2016-05-19 13 views
1

我試圖將來自Invoke-expression的輸出存儲到變量以及屏幕上。我有PS日誌記錄,它會自動將一切記錄爲Write-Host在一個文件中。現在,我使用Invoke-Expression這似乎是打印在屏幕上或一個變量的輸出,我既需要在屏幕和變量上調用表達式輸出

所有我曾嘗試是:

$var = "C:\ER\work\Canny.exe -Init ER\ER2 Get-ip" 

$val = Invoke-Expression $var 

這不會在屏幕上打印任何東西,所以我我無法知道運行時是否有任何問題。我後來做$val該記錄,但一個Write-Host它有時來不及知道發生了什麼 如果我使用:

Invoke-Expression $var 

沒有被記錄(明顯),但有控制檯輸出,如果我想看到後有時候爲了記錄發生了什麼,我沒辦法調查。 我也曾嘗試:

Invoke-Expression $var -OutVariable out 

OR

Invoke-Expression $var -OutVariable $out 

這是在這裏沒有用的。我還創建了一個腳本塊,並與

Invoke-Command 

嘗試,但再次沒有用的我只需要它打印在屏幕上,以及一個變量輸出。

回答

4

Invoke-Expression -Command $var -OutVariable out應該工作(變量+控制檯輸出),但有一些奇怪的事情。它在ISE中有效,但在普通的PowerShell控制檯中,我得到一個空的ArrayList。如果你將它連接到另一個命令如Out-String它可以工作(但這會返回一個多行字符串)。

Invoke-Expression -Command $var | Out-String -OutVariable out 

要麼我忘了什麼東西,也可能是一個錯誤與Invoke-Expression

解決方法是使用Tee-Object,其行爲與-OutVariable相同。

三通對象cmdlet重定向輸出,即,它發送命令的在兩個方向上的輸出 (如字母「T」)。它將 輸出存儲在文件或變量中,並將其沿管道發送。如果 Tee-Object是管道中的最後一個命令,則在提示符處顯示命令輸出 。

實施例:

Invoke-Expression $var -OutVariable | Tee-Object -Variable out 

或(到文件):

Invoke-Expression $var -OutVariable | Tee-Object -FilePath c:\text.txt 

注意,它覆蓋在$out的內容。

0

這就是cmdlet Tee-Object派上用場的地方。您可以將您的Invoke-Command管道連接到它,並指定是否要將輸出存儲爲變量或文件,並且它將同時存儲指定的數據,並將其傳遞到管道(要輸出到屏幕,如果那是你想要的)。

Invoke-Expression $var | Tee-Object C:\Path\To\File.txt 
+0

這將啓動我的埃克失敗: – Akshay

+0

調用表達$ expr的;效果很好,Invoke-Expression $ var | Tee-Object -Variable xyz; EXE給出System.NullReferenceException:對象引用未設置爲對象的實例 – Akshay

+0

我看到你找到了解決方案,但我猜測'(Invoke-Expression $ var)| Tee-Object -Var xyz'可能會工作,但是這會讓可執行文件在它試圖將信息傳遞給管道之前完成其輸出。 – TheMadTechnician

1

這現在工作:

調用,表達是$ var -OutVariable出來|三通對象-variable出

感謝您的幫助