远程机器不执行程序

时间:2012-11-16 16:34:04

标签: powershell powershell-v2.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的一个问题吗?我知道微软改变了一些东西,服务无法启动用户空间中的应用程序。你认为这会成为同一问题的一部分吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

Powershell正在回应你的字符串!

我将引用Oliver Lipkau,如前所述:Source

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

Function New-Process ([string]$computername, [string]$name) {   
  ([WMICLASS]"\\$computername\ROOT\CIMV2:win32_process").Create($name) 
}