2013-08-12 15 views
7

Ich habe ein Problem, ich habe ein Skript die:Wie in Powershell remote starten

  • mit anderen PSSession
  • Stop 2 Prozess
  • Do (I PSSession mit Admin-Konto verwenden) Wechsel auf sie Dateien
  • Starten sie den 2-Prozess (Problem hier)

ich möchte Prozess auf dem Server zu starten, so bin ich mit PSSession (kein Problem) Ich

verbinden tun Invoke-Befehl:

# $pathProg path to my program 
Invoke-Command -session $mySession -command {Start-Process $($args[0])} -ArgumentList $pathProg 

Aber es tut nichts (ich mit VNC überprüfen)

ich tun Invoke-Command zu:

# $pathProg path to my program 
Invoke-Command -session $mySession -command {&$($args[0])} -ArgumentList $pathProg 

Es lauch das Programm (gut), aber mein Skript, um das End-Programm warten (nicht gut)

Wer hat eine Idee?

Dank

Antwort

11

können Sie versuchen, mithilfe von WMI:

$command = "notepad.exe" 
$process = [WMICLASS]"\\$CompName\ROOT\CIMV2:win32_process" 
$result = $process.Create($command) 

Wenn Sie vorbei Anmeldeinformationen benötigen:

$cred = get-credential 
$process = get-wmiobject -query "SELECT * FROM Meta_Class WHERE __Class = 'Win32_Process'" -namespace "root\cimv2" -computername $CompName -credential $cred 
$results = $process.Create("notepad.exe") 
+0

Danke !!! +1: D Ich denke das ist die "Version Bourrin" (auf Französisch ^^) aber es funktioniert! – Servuc

+0

Le cheval oder la femme facile? ;) C'est un plaisir Helfer! –

+1

Aber es gibt keine GUI, wie man die GUI anzeigt? –

0

$pathProg dürfen nicht innerhalb der Skriptblock verfügbar sein werden, die schließlich ausgefuehrt wird. Man könnte es als ein Argument an das Skript übergeben möchten blockieren

Invoke-Command -session $mySession -command { param($progPath) ... } -argumentlist $progPath 

Nicht, dass die äußere -argumentlist, die Argumente für die Skriptgibt.

+0

Dank, aber es ist nicht gut. $ ($ args [0]) funktioniert korrekt. – Servuc

0

Haben Sie versucht, den Befehl als lokal String bauen, dann ist es an das Skript Invoke-Command vorbei als ScriptBlock?

$remoteSession = New-PSSession -ComputerName 'MyServer' 
$processName = 'MyProcess' 

$command = 'Start-Service ' + $processName + ';' 

Invoke-Command -Session  $remoteSession ` 
       -ScriptBlock ([ScriptBlock]::create($command)) 

Remove-PSSession $remoteSession 

Wenn Sie Feedback von dem Remote-Server können Sie die Ausgabe über Write-Output erhalten, wie folgt aus:

$command = 'Start-Service ' + $processName + ' | Write-Output ;' 
+0

Nein, weil WMI ich gesucht habe, danke auch;) – Servuc