远程运行'Start-Process':如何显示标准输出?


4

我有一个用于在远程计算机上安装软件的PowerShell脚本。

到目前为止,我已成功使用以下代码:

$prog = "ping"
$arg = "localhost"
$computername = "MACHINE01"
invoke-command -computername $computername {param($p,$a)& $p $a} -ArgumentList $prog,$arg

我现在需要安装MSI,例如。 'msiexec / i c:\ file.msi / passive'。

我无法让MSIEXEC将“MSIEXEC”之后的所有内容视为参数。 相反,PowerShell只是尝试将其作为一个大命令执行。 我曾经尝试了很多事情,主要涉及文字引号的放置,但无法使其发挥作用。

我现在放弃了调用操作符(&),转而使用'-ArgumentList'参数的'Start-Process'。 MSI现在可以正确执行。大!

invoke-command -computername $computername {param($p,$a) start-process $p -argumentlist $a -nonewwindow -wait -redirectstandardoutput c:\output.txt; get-content c:\output.txt} -ArgumentList $prog,$arg

“Start-Process”的问题在于,当使用“Invoke-Command”远程运行时,它不会产生任何控制台输出。 我不得不求助于将输出重定向到文件然后读取文件。有没有更好的办法?

Answers:


0

我会尝试将它连接到tee-object cmdlet,然后在需要时将文件保存在那里(我不知道将文件输出发送到$ null是否会起作用,太糟糕了,这不是linux,我们可以将它发送到/ dev / null,但我离题了)

这是tee-object cmdlet http://technet.microsoft.com/en-us/library/ee177014.aspx

invoke-command -computername $computername {param($p,$a) start-process $p -argumentlist $a -nonewwindow -wait | tee-object -file c:\output.txt} -ArgumentList $prog,$arg

这是未经测试的代码 ,但这通常是你想要的。

invoke-command -computername $computername {param($p,$a) start-process $p -argumentlist $a -nonewwindow -wait | tee-object -file $null} -ArgumentList $prog,$arg

可能也会起作用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.