簡體   English   中英

寫主機 => 導出到文件

[英]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.txtscript | 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM