遠端執行「啟動進程」:如何顯示標準輸出?

遠端執行「啟動進程」:如何顯示標準輸出?

我有一個用於在遠端電腦上安裝軟體的 PowerShell 腳本。

到目前為止,我已經成功使用以下程式碼:

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

我現在需要安裝 MSI,例如。 'msiexec /ic:\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」遠端執行時,它不會產生任何控制台輸出。我不得不將輸出重定向到文件,然後讀取該文件。有沒有更好的辦法?

答案1

我會嘗試將它通過管道傳輸到tee-object cmdlet,然後在需要時將文件保存在那裡(我不知道將文件輸出發送到$null 是否可行,太糟糕了,這不是Linux,我們可以將其發送到 / dev/null,但我離題了)

這是 tee-object cmdlethttp://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

也可能有效。

相關內容