7

我有一个问题,我有一个脚本

  • 与 PSSession 连接(我使用PSSession管理员帐户)
  • 停止 2 进程
  • 更改他们的文件
  • 启动2过程(问题在这里)

我想在服务器上启动进程,所以我与 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

它启动程序(好)但我的脚本等待结束程序(不好)

有人有想法吗?

谢谢

4

3 回答 3

12

You can try using WMI:

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

If you need passing credentials:

$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" )
于 2013-08-12T09:15:35.620 回答
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 ;'
于 2013-08-12T09:43:44.590 回答
0

$pathProg在最终运行的脚本块中可能不可用。您可能希望将其作为参数传递给脚本块

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

不是外部的-argumentlist,将参数传递给脚本块。

于 2013-08-12T08:47:03.883 回答