从Invoke-Command获取命令输出

时间:2015-03-23 23:29:00

标签: powershell

我正在尝试使用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 }

有没有更好的方法来使用像这样的环境变量来调用命令?

1 个答案:

答案 0 :(得分:1)

我发现Start-Process可能不是捕获二进制输出的最佳方法,除非二进制文件本身传递.NET对象。我发现效果更好的是call operator

$RunCommand = {
    $exe = "$env:ProgramFiles\Some Program\someprogram.exe"
    & $exe -SignatureUpdate
}

我仍然没有得到我期待的输出。更具体地说,我只是从命令而不是整个事物获得输出的最后一行。最终我突然意识到以前的所有行都被覆盖了,所以我把最后一行更改为:

$r | % { $_ >> c:\temp\$($_.PScomputerName).output }

注意:我将>更改为>>以附加到该文件。