none
Ausführen eines Kommandozeilenbefehls via Invoke-Command auf einem Remoterechner RRS feed

  • Frage

  • Hallo zusammen,

    ich möchte auf einem Remotesystem (beide Systeme haben Windows 7, WinRM ist konfiguriert) einen Kommandozeilenbefehl starten. Wenn ich etwa

    Invoke-Command -ComputerName bla -Credential blabla -ScriptBlock { Get-Process | Where-Object { $_.ProcessName -match "^Input" } Format-Table -Property Id,Name, Path -Autosize }

    eingebe funktioniert das tadellos. In einem Skript überprüfe ich z. B. PIDs von Prozessen und bin auch etwa in der Lage diese Prozesse auf einem Remotesystem zu killen. Was aber nicht funktioniert ist wenn ich einen Prozess starten will

    Invoke-Command -ComputerName bla -Credential blabla -ScriptBlock { c:\Program Files (x86)\Pfad mit Leerzeichen\Programm.exe -Parameter1 - Parameter2 - Parameter3 }

    Ich habe das ganze auch schon versucht mittels cmd in den geschweiften Klammern versucht und ich habe auch schon die Parameter in der Form { ... $($args1[0]) ... } -ArgumentList $param1

    versucht, leider ohne Erfolg. Mache ich hier etwas falsch?

    Gruß und Danke

    Wolpi

    Donnerstag, 27. März 2014 11:30

Antworten

  • Hallo,

    wenn ich den Link hier im Forum anclicke funktionier er, auch wenn ich ihn als Text von hier in die Adressleiste kopiere funktionier er auch.

    Trotzem hier nochmal:

    Click mich!

    Zum Login, bei dem Credential Parameter von Invoke nimmst Du deinen Admin, und beim Credential Parameter von start-process im Scriptblock deinen User.

    Deine wichtigere Frage wegen Nohub hatte ich ueberlesen. Ich glaube das geht ueber das Invoken der  entps. WMI-Methode ab der Powershell 3.0 und ich kann mich dunkel daran erinneren, das das schon mal hier gefragt wurde.

    Ich suche mal und ... bingo

    Invoke-WmiMethod


    Beste Gruesse

    • Als Antwort vorgeschlagen Alex Pitulice Freitag, 4. April 2014 10:48
    • Als Antwort markiert Wolpi35 Freitag, 4. April 2014 10:58
    Freitag, 28. März 2014 12:33

Alle Antworten

  • Hallo,

    versuche mal so was, hier ein konstruiertes Beispiel mit dem Adobe Reader:

    Invoke-Command -ComputerName bla Credential blabla -ScriptBlock {Start-Process -FilePath 'C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe' -ArgumentList 'PDFSigQFormalRep.pdf' -wait}

    Beste Gruesse
    brima


    • Bearbeitet brima Donnerstag, 27. März 2014 15:58
    Donnerstag, 27. März 2014 15:57
  • Hi,

    der Tipp ist schon mal super! Das Programm ist schon mal gestartet. Ich sehe die entsprechenden Prozesse auch im Taskmanager des Remotesystems.

    Allerdings sind diese natürlich wieder weg wenn ich den Aufruf mit CTRL + C abbreche. Ich hatte auch schon mal einen ähnlichen Ansatz mit Start-Job verfolgt, allerdings auch keinen Erfolg, da ich das Programm zwar kurz gesehen hatte es dann aber auch wieder weg war.

    Hast Du eine Idee wie ich das ganze so in den Hintergrund bekomme (vergleichbar mit einem Hintergrundprozess in UNIX mit & ;-)) das das Programm dann dauerhaft läuft?

    Gruß und Danke

    Wolpi

    Donnerstag, 27. März 2014 16:16
  • Nochmal ich,

    was ich noch vergessen hatte und was auch ein wenig doof ist - um mich mit dem Remoterechner verbinden zu können muss ich hierfür meine Admincredentials verwenden (bla = admin). Das Programm soll aber unter einer Userkennung laufen, z. B. unter meiner "normalen" Userkennung. Falls Du dafür auch noch Ideen hast, wäre das großartig, ich vermute aber mal dass dies das Berechtigungskonzept von Windows nicht zulässt, oder?

    Gruss

    Wolpi

    Donnerstag, 27. März 2014 16:21
  • Hallo,

    Start-Process hat auch einen Parameter Credential, du koenntest also dort die gewuenschten nutzen.

    Also kannst Du dort deine normale Userkennung angeben, dann hast du aber Kennung und Kennwort im Klartext im Script stehen, was aus Sicht der Sicherheit bedenklich ist.

    Du kannst natuerlich vor dem Invoke-Command per Get-Credential diese Daten eingeben lassen und dann beim Invoke-Command ueber dessen Parameter argumentlist an das Zielsystem uebegeben, welches den Scriptblock ausfuehrt. Somit musst du in diesem die Credentials mit param schnappen...

     Syntax siehe hier:
    http://blogs.msdn.com/b/powershell/archive/2009/12/29/arguments-for-remote-commands.aspx

    Beste Gruesse
    brima




    • Bearbeitet brima Donnerstag, 27. März 2014 19:03
    Donnerstag, 27. März 2014 19:02
  • Hallo,

    also das mit den Klartextcredentials habe ich im Griff indem ich das im Skript abfrage und verschlüssele und dann übergebe. Das mit den unterschiedlichen Logins ist aber denke ich nicht klar geworden.

    Ich muss die Verbindung über ein Adminlogin herstellen (also die grundsätzliche Ausführung des Invoke-Commands), der Prozess (also das was in dem Skript-Block Klammern steht) müsste dann als anderer User gestartet werden.

    Das mit dem Login ist aber nur mein zweites Problem, das Hauptproblem ist wie ich den Prozess auf dem Zielrechner so in den Hintergrund bekomme, dass der auch nach Ende des Powershellkommandos auf dem Clientrechner weiterläuft.

    Den Link oben zur Syntax habe ich auch angklickt, allerdings kommt da nur "Gruppe nicht gefunden"

    Gruß und Danke

    Wolpi

    Freitag, 28. März 2014 09:07
  • Hallo,

    wenn ich den Link hier im Forum anclicke funktionier er, auch wenn ich ihn als Text von hier in die Adressleiste kopiere funktionier er auch.

    Trotzem hier nochmal:

    Click mich!

    Zum Login, bei dem Credential Parameter von Invoke nimmst Du deinen Admin, und beim Credential Parameter von start-process im Scriptblock deinen User.

    Deine wichtigere Frage wegen Nohub hatte ich ueberlesen. Ich glaube das geht ueber das Invoken der  entps. WMI-Methode ab der Powershell 3.0 und ich kann mich dunkel daran erinneren, das das schon mal hier gefragt wurde.

    Ich suche mal und ... bingo

    Invoke-WmiMethod


    Beste Gruesse

    • Als Antwort vorgeschlagen Alex Pitulice Freitag, 4. April 2014 10:48
    • Als Antwort markiert Wolpi35 Freitag, 4. April 2014 10:58
    Freitag, 28. März 2014 12:33
  • Hallo,

    vielen Dank für die schnelle und super Hilfestellung! Leider ist bei uns im Unternehmen die Einführung von Powershell 3 vorerst noch nicht vorgesehen, so dass ich das Skript leider nicht wie geplant einsetzen kann.

    Viele Grüße

    Wolpi

    Montag, 31. März 2014 09:21