2013-08-12 62 views
7

mam problem, mam skrypt których:Jak uruchomić zdalny proces w PowerShell

  • Connect with PSSession (używam PSSession z konta administratora)
  • zatrzymania procesu 2
  • Do zmiana na nich plików
  • Uruchom 2 procesu (problem tutaj)

chcę aby rozpocząć proces na serwerze, więc jestem połączyć z PSSession (bez problemu)

zrobić Invoke-Command:

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

Ale to nie robi nic (I zweryfikować z VNC)

zrobić Invoke-Command też:

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

To lauch program (dobre), ale mój skrypt czekać na koniec programu (nie dobrze)

Ktoś ma pomysł?

Dzięki

Odpowiedz

11

Można spróbować użyć WMI:

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

Jeśli potrzebujesz przechodzących poświadczeń:

$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

Dzięki! +1: D Myślę, że to "wersja bourrin" (po francusku ^^), ale działa! – Servuc

+0

Le cheval ou la femme facile? ;) C'est un plaisir aider! –

+1

Ale nie ma GUI, jak wyświetlić GUI? –

0

$pathProg może nie być dostępna w bloku skryptu, który zostanie ostatecznie uruchomić. Może chcesz przekazać go jako argument do skryptu zablokować

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

Nie żeby zewnętrznej -argumentlist, przekazuje argumenty do scriptblock.

+0

dzięki ale to nie jest dobre. $ ($ args [0]) działa poprawnie. – Servuc

0

Czy próbowałeś budowaniu polecenia jako ciąg lokalnie, a następnie przekazanie go do skryptu Invoke-Command jako ScriptBlock?

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

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

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

Remove-PSSession $remoteSession 

Jeśli chcesz zwrotne ze zdalnego serwera, a następnie można uzyskać poprzez wyjście Write-Output, na przykład:

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

Nie, ponieważ WMI jest to, że szukałem, również dzięki;) – Servuc

Powiązane problemy