Как запустить удаленный процесс в PowerShell

у меня проблема, у меня есть скрипт которых:

  • подключение к PSSession (я использую PSSession С учетной записью администратора)
  • остановить 2 процесса
  • изменить на них файлы
  • запустите процесс 2 (Проблема здесь)

Я хочу запустить процесс на сервере, поэтому я подключаюсь к PSSession (без проблем)

Я вызываю-команда:

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

но он ничего не делает (я проверьте с VNC)

Я тоже вызываю-команду:

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

это lauch программа (хорошо), но мой скрипт ждет конца программы (не хорошо)

У кого-нибудь есть идея ?

спасибо

3 ответов


вы можете попробовать использовать WMI:

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

Если вам нужно передать учетные данные:

$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" )

$pathProg может быть недоступен в блоке скрипта, который запускается в конечном итоге. Возможно, вы захотите передать его в качестве аргумента блоку скрипта

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

не то что внешний -argumentlist, передает Аргументы scriptblock.


вы пытались создать команду как строку локально, а затем передать ее скрипту Invoke-Command как ScriptBlock?

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

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

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

Remove-PSSession $remoteSession

Если вы хотите обратную связь от удаленного сервера, то вы можете получить выход через Write-Output, например:

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