[英]Write-Host => Export to a file
我有一個帶有一些命令的腳本,例如Write-Host "Server1"
。 如何將其導出到文件?
當我嘗試使用script > export.txt
它不起作用。
Write-Host
僅將輸出重定向到控制台。
您可以使用Write-Output
並重定向到文件( > export.txt
或管道到Out-File export.txt
)
在絕對需要重定向腳本的所有輸出的極端情況下,請查看此 cmdlet:
Start-Transcript
Get-Help Start-Transcript -full
在 PowerShell script > export.txt
是script | Out-File -path export.txt
語法糖script | Out-File -path export.txt
script | Out-File -path export.txt
。
Write-Host 將對象發送到主機,並且不返回任何對象。 這意味着沒有對象通過管道傳輸到 Out-File cmdlet,並且沒有任何內容寫入 export.txt 文件。 一種解決方法(以防您不想更改腳本)是打開cmd
控制台並使用 cmd 控制台重定向來重定向 PowerShell 輸出。
C:\> powershell .\script.ps1 > .\export.txt
當然,不同方法的用處很大程度上取決於您的用例,但是……
我相信,執行此操作的“正確”方法是,如果您可以控制腳本(這就是我通常所做的,盡管我今天正在尋找捷徑)是“重載” Write-Host
,以便說話,然后將您將發送到Write-Host
所有內容發送到這個新函數。
為了保持有效的 PowerShell 動詞,我將我的稱為Write-Feedback
。
function Write-Feedback()
{
param
(
[Parameter(Position=0,ValueFromPipeline=$true)]
[string]$msg,
[string]$BackgroundColor = "Yellow",
[string]$ForegroundColor = "Black"
)
process {
$msg | ForEach-Object {
Write-Host `
-BackgroundColor $BackgroundColor `
-ForegroundColor $ForegroundColor `
$_;
}
}
}
因此,現在您擁有一個與Write-Host
基本相同的功能,但您可以輕松控制輸出的位置。 如果您需要寫入文件,您可以編輯Write-Feedback
以便它的所有調用現在可以執行您需要的任何操作。
您可以簡單地將該行更改為Write-Output
,具體取決於您是否在管道中執行任何其他操作...
...
Write-Output $_;
您可以將輸出發送到將命令的其余部分通過管道傳送到的同一文件,但在Write-Feedback
函數中,甚至還保留Write-Host
:
function Write-Feedback()
{
param
(
[Parameter(Position=0,ValueFromPipeline=$true)]
[string]$msg,
[string]$BackgroundColor = "Yellow",
[string]$ForegroundColor = "Black"
)
process {
$msg | ForEach-Object {
Write-Host `
-BackgroundColor $BackgroundColor `
-ForegroundColor $ForegroundColor `
$_;
$_ | Out-File "./export.txt" -Append; # <<< or add a param to location
}
}
}
或者,如果你有一些異常值,你不想Write-Feedback
的內容通過管道輸送到一個文件中,可以添加一個詢問如何每個具體做了新的可選參數, Write-Feedback
來電時switch
的關閉- -發送到文件,以Write-Host
,來Write-Output
,等等-更改默認你平時想要什么,並明確switch
荷蘭國際集團在那里的明確設置新的參數了。
等等等等。將所有呼叫路由到集中式票據交換所以在 PowerShell 中輸出要容易得多。 然后,當你改變你的想法,這是不是一個巨大的搜索和替換-和替換回來-任務。
我認為這里唯一的痛苦是如果您不想將內容發送到管道中,因此Write-Output
已退出,但確實想確保Write-Feedback
的文件Write-Feedback
與您在中指定的文件相同您的示例中的> export.txt
無需每次都編輯Write-Feedback
。 我不確定是否有一種簡單的方法可以做到這一點。
但是,既然您已經從“管道步驟”中移除了一步,那么這可能不是一個合法的用例。
無論如何,底線是重載Write-Host
並通過在一個地方進行編輯來做任何您想做的事情。
使用 *> 而不是 > 對我有用。 它將所有輸出重定向到一個文件; 屏幕上不顯示任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.