我正在尝试使用Invoke-Command在许多计算机上远程运行PowerShell中的命令,并从中捕获它们的输出,但我没有从中获取任何输出。我怀疑这是我使用Start-Process的方式,但我不确定。
$RunCommand = {
Start-Process "$env:ProgramFiles\Some Program\someprogram.exe" -ArgumentList "-SignatureUpdate"
}
$comp_list = @(Get-Content "c:\temp\comp_list.txt")
$cred = Get-Credential
$jobs = Invoke-Command -Credential $cred -Computer $comp_list -ScriptBlock $RunCommand -AsJob
Wait-Job $jobs
$r = Receive-Job $jobs
$r | % { $_ > c:\temp\$($_.PScomputerName).output }
有没有更好的方法来使用像这样的环境变量来调用命令?
答案 0 :(得分:1)
我发现Start-Process
可能不是捕获二进制输出的最佳方法,除非二进制文件本身传递.NET对象。我发现效果更好的是call operator:
$RunCommand = {
$exe = "$env:ProgramFiles\Some Program\someprogram.exe"
& $exe -SignatureUpdate
}
我仍然没有得到我期待的输出。更具体地说,我只是从命令而不是整个事物获得输出的最后一行。最终我突然意识到以前的所有行都被覆盖了,所以我把最后一行更改为:
$r | % { $_ >> c:\temp\$($_.PScomputerName).output }
注意:我将>
更改为>>
以附加到该文件。