#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Description=Pre Backup Job: TS-Sessions zurücksetzen. #AutoIt3Wrapper_Res_Fileversion=1.0.0.1 #AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y #AutoIt3Wrapper_Res_LegalCopyright=(c) 2011-2013 by Rudolf Thilo, IT-Beratung Rudolf Thilo #AutoIt3Wrapper_Res_SaveSource=y #AutoIt3Wrapper_Res_Language=1031 #AutoIt3Wrapper_Run_Obfuscator=y #Obfuscator_Parameters=/striponly #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include #include #include #include $Log = "C:\Install\RDP-Trennen.txt" $DroboxCopyTo="c:\daten\dropbox\Sync-AHJServer-rthilo\" ConsoleWrite("Logfile = " & $Log & @CRLF) If Not FileExists($Log) Then $res = FileWriteLine($Log, "Log-File angelegt: " & _NowCalc()) ConsoleWrite($res & " " & @error & @CRLF) $res = _FileWriteToLine($Log, 1, "----------------------------------------------------------") ConsoleWrite($res & " " & @error & @CRLF) EndIf _FileWriteToLine($Log,1,"Startzeit:" & _NowCalc()) _FileWriteToLine($Log, 1, "Arcserve Pre Backup Job: TS Sessions zurücksetzen. (" & @ScriptFullPath & ")") Local $foo = Run(@ComSpec & " /c qwinsta.exe", @TempDir, @SW_HIDE, $STDOUT_CHILD) Local $line = "" While 1 $line &= StdoutRead($foo) If @error Then ExitLoop WEnd $line = StringTrimRight($line, 2) ; letzes @CRLF abschneiden $line = StringReplace($line,"”","ö") $line = StringReplace($line,"Ž","Ä") $aLine = StringSplit($line, @CRLF, 1) ConsoleWrite($line & @CRLF) #cs Output Style: SITZUNGSNAME BENUTZERNAME ID STATUS TYP GERÄT services 0 Getr. rdp-tcp#1 helfrich 1 Aktiv rdpwd >rdp-tcp#0 Administrator 2 Aktiv rdpwd Wirsching 8 Getr. console 10 Verb. rdp-tcp 65536 Abhör. #ce $aktive = False $LoopCount = 0 $insert = "" Dim $aFoo[7] = [6] While 1 For $i = 1 To $aLine[0] ; erste Zeile = Header Zeile -> ignorieren $aFoo[1] = StringLeft($aLine[$i], 1) ; eigene Sitzung wird mit einem ">" eingeleitet $aFoo[2] = StringStripWS(StringMid($aLine[$i], 2, 17), 1 + 2) ; Sitzungsname $aFoo[3] = StringStripWS(StringMid($aLine[$i], 20, 21), 1 + 2) ; Benutzername $aFoo[4] = StringStripWS(StringMid($aLine[$i], 42, 5), 1 + 2) ; Session-ID $aFoo[5] = StringStripWS(StringMid($aLine[$i], 49, 7), 1 + 2); Session-Status (es interessiert: "Getr." und "Aktiv") $aFoo[6] = StringStripWS(StringMid($aLine[$i], 57, 11), 1 + 2); Session-Typ: Sollte für RDP Sessions = "rdpwd" sein (ist es aber nicht immer) ConsoleWrite($aLine[$i] & @CRLF) If $aFoo[1] = ">" Then ConsoleWrite("Selbst: " & $aLine[$i] & @CRLF) ContinueLoop ; dass ist die Session, hier läuft dieser Prozess selbst. EndIf If StringStripWS($aFoo[2], 8) = "Services" Then ConsoleWrite("Services: " & $aLine[$i] & @CRLF) ContinueLoop EndIf Switch StringStripWS($aFoo[5], 8) Case "Getr." $Run = "rwinsta.exe " & $aFoo[4] ConsoleWrite($Run & @CRLF) Run($Run) $res = _FileWriteToLine($Log, 1, "Getrennt: " & $aFoo[3] & " (Sitzung " & $aFoo[4] & " wird zurückgesetzt: " & $Run & ")") ConsoleWrite($res & " " & $aFoo[3] & @error & @CRLF) Case "Aktiv" $aktive = True ConsoleWrite("Aktiv: " & $aLine[$i] & @CRLF) If $LoopCount = 1 Then $insert = "*jetzt* " ElseIf $LoopCount = 2 Then $insert = "*JETZT SOFORT* " EndIf $Run = "msg.exe " & $aFoo[4] & ' /w "Nachricht an User ' & $aFoo[3] & ': Bitte ' & $insert & 'Programme schließen und abmelden, Datensicherung beginnt!"' ConsoleWrite($Run & @CRLF) If $LoopCount = 3 Then ; schluss mit Lustig! $Run = "rwinsta.exe " & $aFoo[4] EndIf Run($Run) ; Message an User rausschicken, nicht warten. ConsoleWrite(">>>> RUN: " & $Run & @CRLF) ConsoleWrite("Session ID Ativ: """ & $aFoo[4] & """" & @CRLF) $res = _FileWriteToLine($Log, 1, "Aktiv : " & $aFoo[4] & ": " & $Run) ConsoleWrite($res & " " & $aFoo[3] & @error & @CRLF) Case Else ConsoleWrite("Weder aktiv noch getrennt: " & $aLine[$i] & @CRLF) EndSwitch Next If $aktive Then Sleep(60 * 1000) $LoopCount += 1 Else ExitLoop ; fertig EndIf WEnd _FileWriteToLine($Log, 1, "-------") _FileWriteToLine($Log, 1, $line) _FileWriteToLine($Log, 1, "-------") _FileWriteToLine($Log, 1, "Ende: " & _NowCalc()) _FileWriteToLine($Log, 1, "__________________________________________________________") ; Run("notepad " & $Log) FileCopy($Log,$DroboxCopyTo,1)