这是我到目前为止所做的:
$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的一个问题吗?我知道微软改变了一些东西,服务无法启动用户空间中的应用程序。你认为这会成为同一问题的一部分吗?
答案 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)
}