Как запустить удаленный процесс в 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 ;'