Powershell Cmdlet Get-Service "Windows Defender Antivirus Service"

  • Hallo zusammen,

    hatte gestern schon mal ähnliche Frage gestellt. (ShellExecute)

    alpines hat mir hier geholfen. Danke nochmal

    Jetzt habe ich immer noch das Problem das PS Cmdlet "Windows Defender Antivirus Service" zu verarbeiten. :cursing:

    Ich habe Google zur Hilfe gezogen finde ab nicht so das passende. Mit ShellExecute bekomme ich das auch nicht hin.

    Sehe immer nur das .ps1 Script gestartet werden.

    Würde mich freuen wenn ich hier einen Tipp bekommen würde. Evtl auch Hinweis wo oder ob es darüber eine Tut gibt.

    co_steffl

  • Hallo co_steffl

    Das kannst du mit Run lösen. Ich habe es dir mal beispielhaft umgesetzt. Hier wird erst das cmdlet geschrieben, dann mit Run ausgeführt und die Ausgabe gelesen. Danach wird die cmdlet-Datei wieder gelöscht und es erfolgt die Rückgabe der Funktion. Die Rückgabe kannst du in der SciTE-Konsole lesen.

    Grüße autoiter

  • Das geht auch ohne eine temporäre Datei anzulegen und auszuführen...

    AutoIt
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   RunCmdlet()" & RunCmdlet() & @CRLF & "!@ " & @TAB & "#Error: " & @error & @CRLF)
    
    Func RunCmdlet()
        Local $iPid = Run("PowerShell.exe -Command Get-Service 'Windows Defender Antivirus Service'", @ScriptDir, @SW_HIDE, 2)
        If Not $iPid Then Return SetError(1, 0, False)
        ProcessWaitClose($iPid)
        Return StringStripWS(StdoutRead($iPid), 2)
    EndFunc   ;==>RunCmdlet

    2 Mal editiert, zuletzt von Bitnugger (20. Juli 2018 um 02:13)

  • Moin zusammen,

    danke an alle für die Hilfe :thumbup:

    Bitnugger Der Script ist erst ein Gerüst, steht noch nicht viel drin. Danke für deinen Script/Beispiel und Link. Mach mich gleich an die Arbeit. :thumbup:

    _mk_ Danke auch für den Tipp. An SC.exe hab ich nicht gedacht. Werde auch dies ausprobieren...

    autoiter Danke auch an dich. Ich denke nicht das du doof bist.... Viele Wege führen nach Rom

  • Hallo

    so ich muß nochmal nerven und mir einen Tipp von den Profis erhoffen

    Hier mal der Code von Bitnugger.

    Hintergrund:

    Ich möchte als erstes wissen ob es diesen Dienst überhaupt existiert.

    Danach möchte ich den Status abfragen (Kommt später)

    Ich habe nun das Problem, das es in diesem Fall den Dienst nicht gibt.

    StdoutRead liefert mir nun keine Daten.

    Die Konsole liefert mir dies.

    Code
    @@ Debug(13) : SetError(1, 0, False) = False
    >Error code: 1
    @@ Debug(13) : SetError(1, 0, False) = False
    >Error code: 1
    @@ Debug(5) : _RunCmdlet($s_ServWDAS) = 
    >Error code: 0
    +>09:58:40 AutoIt3.exe ended.rc:0
    +>09:58:40 AutoIt3Wrapper Finished.
    >Exit code: 0    Time: 1.929

    Wie frage ich dies jetzt am besten ab. Abfrage nach StdoutRead nach "" Leerzeichen möchte ich nicht so gerne.

    Die Console/Run liefert mir ja "Error Code: 1"

    Ich könnte notfalls damit leben. Aber gibt es da noch eine elegantere Lösung?

  • Hier mal der Code von Bitnugger.

    Schreibe demnächst bitte dabei, dass du den Code geändert hast.

    StdoutRead liefert mir nun keine Daten.

    In dem Fall liest du dann einfach StderrRead aus... hier ein Beispiel nach der Art, wie es _mk_ vorgeschlagen hat.

  • Hallo zusammen,

    sorry sorry sorry... nach 6 Std. an der Glotze wird man Betriebsblind.:cursing:

    Code
    falscher Code
    
    Local $iPid = Run("PowerShell.exe -Command & $TmpCmd", @ScriptDir, @SW_HIDE, 6)
    
    
    richtiger Code
    
    Local $iPid = Run("PowerShell.exe -Command " & $TmpCmd, @ScriptDir, @SW_HIDE, 6)

    Trotzdem Danke für die Unterstützung.:thumbup: