Wie halten Sie remote-powershell-Befehl lebendig nach Ende der Sitzung?
Verwende ich den folgenden Befehl zum ausführen setup_server.exe
auf Windows-remote-box:
powershell -command "$encpass=convertto-securestring -asplaintext RPASSWORD -force;$cred = New-Object System.Management.Automation.PSCredential -ArgumentList RUSER,$encpass; invoke-command -computername RCOMPUTERNAME -scriptblock {setup_server.exe} -credential $cred;"
setup_server.exe
's Aufgabe ist es, auf der einige Konfigurationsdateien und starten Sie my_server.exe
(einige daemon-Prozess), dann ist es beendet. Und ich will my_server.exe
am laufen zu halten, nach setup_server.exe
fertig ist.
Also wenn ich es per CMD auf die lokale box (also einfach nur laufen setup_server.exe
von CMD) funktioniert es, aber wenn ich es per powershell auf dem remote host funktioniert es nicht. Nämlich die my_server.exe
wird gestartet, aber direkt nach setup_server.exe
geschlossen ist der server auch geschlossen wird(getötet).
Also die Frage ist folgende:
Die powershell-Flaggen/- cmdlets sollte ich verwenden, um das beschriebene Szenario zu arbeiten, als im lokalen Modus?
HINWEIS: ich möchte synchron bekommen Ausgabe setup_server.exe
, so laufen remote-Befehl mit -AsJob
Flagge, wahrscheinlich würde nicht funktionieren für mich, obwohl ich selbst weiß nicht, ob es hält den server am Leben zu erhalten, nachdem setup_server.exe
's end.
- entweder erstellen Sie einen Dienst oder eine geplante Aufgabe zum ausführen der exe-Datei ?
- Funktioniert es, wenn Sie starten
setup_server.exe
überStart-Process
(non-blocking für die ps-Sitzung) statt direkt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Weg, um die remote-PowerShell-Sitzung ausführen, nachdem der Befehl beendet wurde, ist die Verwendung einer PSSession z.B.:
Generell aber exes ausgeführt werden soll, unabhängig von der app, die Sie abgefeuert.
powershell -command \"\$encpass=convertto-securestring -asplaintext mypassword -force;\$cred = New-Object System.Management.Automation.PSCredential -ArgumentList myuser,\$encpass;\$session = new-PSSession -computername HOSTNAME -credential \$cred; invoke-command -session \$session -scriptblock {setup_server.exe};\"
aber wieder der server wurde sofort getötet, nachdem setup_server ist getan.Warum verwendest du "Invoke-Command". Wenn Sie möchten, eine dauerhafte Sitzung, verwenden Sie Enter-PSSession".
Mit "Enter-PSSession" Sie sind nicht nur die Berufung auf einen Befehl auf dem Server, Sie werden direkt angemeldet-wie Sie wahrscheinlich wissen, von SSH.
# Once you are finnished
dies nicht passieren würde. Will ich starten Sie eine remote-server, und das ist alles. Dann möchte ich die Sitzung beenden halten die server auf remote-host.Wenn Sie möchten, dass Ihre powershell-Sitzung laufen zu halten, weil Sie eine exe-Datei, versuchen Sie es mit der -InDisconnectedSession wechseln. Von dem, was ich verstehe, es wird führen Sie die ausführbare Datei auf dem remote-Rechner in einer Sitzung, die nicht tatsächlich auf Ihrem computer verbunden. Im wesentlichen wird der computer nicht zerstören die Sitzung, wenn es die Verbindung trennt, sodass die exe, weiter zu laufen.
invoke-command -computername RCOMPUTERNAME -scriptblock {start-process setup_server.exe} -InDisconnectedSession
Wenn Sie brauchen, um dies zu tun, auf mehreren Computern. Setup ein array von Computernamen.
Hinweis: ich glaube nicht, dass das funktioniert mit sessions, die bereits angelegt sind.
In Ordnung zu halten, eine powershell-code läuft auf die Sitzung beenden, es sollte ein Prozess sein. Und die windows Weg, um den Prozess mit ein .exe-oder windows-Dienst.
Halten ein Powershell-shell öffnen nach Ausführung eines Befehls, verwende ich die -NoExit-Schalter, z.B. dieses Skript startet eine remote interactive PS-Sitzung auf servername mit dem Benutzer administrator
http://powershell-guru.com/powershell-tip-13-prevent-powershell-from-exiting-once-script-finished/