0

这是我到目前为止所拥有的:

$source1="C:\Folder\Files\IPList.txt"
Get-Content $source1 |
Where-Object {-not(gwmi win32_process -ComputerName $_ -filter "name='Program.exe'")} |
Foreach-Object {Invoke-Command -ComputerName $_ -ScriptBlock {"C:\Program Files\Folder\Folder\Program.exe"}}

当我在 ISE 中运行它时,一切都恢复正常并说它运行正确。但是,当我查看我的远程机器时,什么都没有执行。Process Program.exe 未运行,应启动该 exe。我正在从服务器运行它来访问大约 50 台远程机器。一旦它通过所有 50,我将循环它并让它再次执行,然后在无限循环中继续该过程。

程序远程启动我缺少什么?顺便说一句,我在 Server 2008 R2 上运行这个脚本,它正在运行 Windows 7 机器。

编辑

我想知道,因为我可以看到进程启动,这是 Windows 7 的问题吗?我知道微软改变了一些事情,服务无法在用户空间中启动应用程序。你认为这会是同一个问题的一部分吗?

4

2 回答 2

0

尝试将调用 (&) 运算符添加到 ScriptBlock:

$source1="C:\Folder\Files\IPList.txt"
Get-Content $source1 |
Where-Object {-not(gwmi win32_process -ComputerName $_ -filter "name='Program.exe'")} |
Foreach-Object {Invoke-Command -ComputerName $_ -ScriptBlock {& "C:\Program Files\Folder\Folder\Program.exe"}}

这是一篇关于您可以使用的各种方法的好文章: http: //social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx

于 2012-11-16T17:29:47.723 回答
0

在您当前的语法中,您传递的命令只是一个字符串!这是远程端发生的事情:

PS C:\> "C:\Program Files\Console2\Console.exe"
C:\Program Files\Console2\Console.exe

Powershell 正在回显您的字符串!

我将引用此处提到的 Oliver Lipkau:来源

如果您需要在脚本完成后继续运行的远程计算机上启动一个进程,请使用此函数:

Function New-Process ([string]$computername, [string]$name) {   
  ([WMICLASS]"\\$computername\ROOT\CIMV2:win32_process").Create($name) 
}
于 2012-11-26T15:22:44.573 回答