Remote Session abfragen

  • Hallo, ich bin gerade dabei ein kleines Tool zu basteln, dass mir im ersten Schritt alle angemeldeten Benutzer und Sessions Infos von verschiedenen Terminal Servern auslesen soll.

    Hier habe ich aber schon ein Problem, dies richtig in eine Funktion zu bringen.

    Auschnitt aus dem Code:

    Spoiler anzeigen
    [autoit]


    ;######### Variablen
    Local $TS = "TSA,TSB,TSC,TSD" ; All TS listed with "," separated
    Local $TSfile = "C:\test.log" ;Liste der TS Benutzer
    Local $TSarrSize
    Local $TSarr = StringSplit($TS, ",") ; The string in data will be split into an array everywhere "," is encountered
    Local $PID, $Ret = ""

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;######### Funktionen
    ;TS Liste ($TSfile) aktualisieren; Auslesen aller angemeldeten Benutzer an allen TS

    [/autoit] [autoit][/autoit] [autoit]

    Func RefreshList()
    If IsArray($TSarr) Then
    $TSarrSize = UBound($TSarr); get array size
    For $i = 0 to $TSarrSize - 1; subtract 1 from size to prevent an out of bounds error
    ConsoleWrite($TSarr[$i] & @LF)
    $PID = Run("quser.exe /server:" & $TSarr[$i], '', @SW_HIDE, 0x2 + 0x4)
    While 1
    $Ret &= StdoutRead($PID) & StderrRead($PID)
    If @error Then ExitLoop
    WEnd
    FileWrite($TSfile,$Ret)
    Next
    EndIf
    EndFunc

    [/autoit]


    Ich habe mehrere Server, die abgefragt werden müssen. Leider habe ich wohl ein Denkfehler in der Funktion.
    Es soll die Liste der Server die oben im $TS array stehen nacheinander nach den Benutzern abgefragt werden, denke die beste und schnellste Lösung ist per quser, oder?
    Dann sollen die Benutzer mit Session Info in die $TSfile eingetragen werden, wenn allerdings eine Fehlermeldung zurückkommt bzw. der Server nicht erreichbar war, soll er dieses nicht in die Datei schreiben. Bei mir schreibt er nun bei einem Server der Offline ist:

    Spoiler anzeigen


    {ErrorPrintf(): LoadString failed, Error 15105, (0x00003B01)}
    Fehler [15105]:Im Cache des Ressourcenladeprogramms ist kein MUI-Eintrag geladen.
    Fehler [1722]:Der RPC-Server ist nicht verfgbar.

    Wie kann ich dies am besten lösen? Hat jemand eine bessere, einfacherre Variante diese Abfrage zu lösen?

    Bin für jeden Denkanstoß dankbar!

  • Man könnte in der Schleife abfragen, ob

    Code
    {ErrorPrintf(): LoadString failed, Error 15105, (0x00003B01)}
     Fehler [15105]:Im Cache des Ressourcenladeprogramms ist kein MUI-Eintrag geladen.
    Fehler [1722]er RPC-Server ist nicht verfgbar.


    in der Abfrage steht.

    Ich hab mal ein paar (Ich behaupte mal Einzigartige Textstellen genutzt):

    [autoit]

    While 1
    $string=StdoutRead($PID) & StderrRead($PID)
    If @error Then ExitLoop
    if NOT (stringinstr($string,"Error 15105") or stringinstr($string,"Fehler [15105]") or stringinstr($string,"Fehler [1722]")) then
    $Ret &=$string
    endif
    WEnd

    [/autoit]