我遇到了问题,我有脚本:
PSSession
与管理员帐户)我想在服务器上启动进程,所以我连接PSSession(没问题)
我做Invoke-Command:
# $pathProg path to my program
Invoke-Command -session $mySession -command {Start-Process $($args[0])} -ArgumentList $pathProg
但它什么也没做(我用VNC验证)
我也做Invoke-Command:
# $pathProg path to my program
Invoke-Command -session $mySession -command {&$($args[0])} -ArgumentList $pathProg
程序很好(好)但我的脚本等待结束程序(不好)
有人有想法吗?
由于
答案 0 :(得分:12)
您可以尝试使用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" )
答案 1 :(得分:0)
$pathProg
可能在最终运行的脚本块中不可用。您可能希望将其作为参数传递给脚本块
Invoke-Command -session $mySession -command { param($progPath) ... } -argumentlist $progPath
不是外部-argumentlist
将参数传递给scriptblock。
答案 2 :(得分:0)
您是否尝试在本地将该命令构建为字符串,然后将其作为ScriptBlock传递给Invoke-Command脚本?
$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 ;'