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 の問題ですか? Microsoft が変更したことと、サービスがユーザー空間でアプリケーションを起動できないことを知っています。これは同じ問題の一部だと思いますか?

4

2 に答える 2

0

現在の構文では、渡すコマンドは単なる文字列です! これは、リモート エンドで起こっていることです。

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

Powershell が文字列をエコーし​​ています!

ここで言及されているオリバー・リプカウの言葉を引用します:ソース

スクリプトが終了した後も実行し続けるリモート コンピューターでプロセスを開始する必要がある場合は、次の関数を使用します。

Function New-Process ([string]$computername, [string]$name) {   
  ([WMICLASS]"\\$computername\ROOT\CIMV2:win32_process").Create($name) 
}
于 2012-11-26T15:22:44.573 に答える
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 に答える