2013-08-12 14 views
7

ho un problema, ho un sceneggiatura cui:Come avviare da remoto processo in PowerShell

  • Collegare con PSSession (io uso PSSession con account admin)
  • Stop 2 processo
  • Do cambiamento su di loro file
  • Avviare il processo 2 (problema qui)

voglio per avviare il processo sul server, in modo io sono in contatto con PSSession (nessun problema)

faccio Invoke-Command:

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

Ma non fa nulla (verifico con VNC)

faccio Invoke-Command troppo:

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

E lauch il programma (buono), ma il mio script attendere la fine programma (non buono)

Qualcuno ha un'idea?

Grazie

risposta

11

Puoi provare a utilizzare WMI:

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

Se avete bisogno di credenziali di passaggio:

$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

Grazie !!! +1: D Penso che sia la "versione bourrin" (in francese ^^) ma funziona! – Servuc

+0

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

+1

Ma non c'è GUI, come visualizzare la GUI? –

0

$pathProg potrebbero non essere disponibili entro il blocco di script che viene eseguito alla fine. Si potrebbe desiderare di passare come argomento allo script bloccare

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

Non che l'esterno -argumentlist, passa gli argomenti al scriptblock.

+0

grazie, ma non va bene. $ ($ args [0]) funziona correttamente. – Servuc

0

Hai provato costruire il comando come una stringa a livello locale, per poi passare allo script Invoke-Command come ScriptBlock?

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

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

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

Remove-PSSession $remoteSession 

Se si desidera un feedback dal server remoto allora si può ottenere l'output tramite Write-Output, in questo modo:

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

No perché WMI è quello che ho cercato, grazie anche a);) – Servuc

Problemi correlati