HOWTO · PowerShell
PowerShell 將輸出匯出到文字檔案
本文介紹了將常用命令的 PowerShell 輸出匯出到文字檔案的方法。
本頁內容
若要將命令顯示的輸出存成文字檔,請將輸出透過管線傳給 Out-File,並指定檔案路徑,例如 Get-Process | Out-File -FilePath .\processes.txt。檔案不存在時,PowerShell 會建立檔案;若指定路徑已有檔案,則會取代其內容。若要保留現有文字,請使用 -Append。以下範例會示範如何儲存指定輸出、讀取儲存的內容,以及如何選擇文字檔或工作階段記錄。
使用 Out-File 將 PowerShell 輸出匯出至文字檔
Out-File 會接收管線中的物件,並將其格式化表示寫入檔案。如果目標是產生易讀的文字報告,這個指令就很實用。範例會比較兩份記憶體中的清單、儲存差異,再讀取產生的檔案;過程不需要另外準備輸入檔案。
$reference = @('Alpha', 'Beta', 'Gamma')
$difference = @('Alpha', 'Beta', 'Delta')
$outputPath = Join-Path ([System.IO.Path]::GetTempPath()) 'compare-result.txt'
Compare-Object -ReferenceObject $reference -DifferenceObject $difference |
Out-File -FilePath $outputPath
Get-Content -Path $outputPath
Compare-Object 會比較兩個輸入集合。其 SideIndicator 屬性會標示每個差異項目來自哪個集合:<= 表示項目來自參考集合,=> 則表示項目來自差異集合。在此範例中,Gamma 和 Delta 是不同的值。Get-Content 會顯示儲存在暫存路徑的文字;若要指定永久存放位置,可將 $outputPath 改成 C:\Reports\compare-result.txt 之類的完整路徑。此範例沒有附上實際觀察到的輸出內容,因此請在你的 PowerShell 版本中執行,查看格式化後的表格。
Out-File 寫入的是格式化文字,不會保留管線物件。其預設編碼會依 PowerShell 版本而異。若其他程式需要讀取此檔案,請使用 -Encoding 指定該 PowerShell 版本支援、且符合該程式預期的編碼。
將輸出附加至文字檔
預設情況下,寫入已存在的路徑會取代原有內容。加上 -Append 可保留現有文字,並將新的命令輸出加在檔案末尾。例如,Get-Date | Out-File -FilePath .\log.txt -Append 會將日期那一行附加至 log.txt;若要建立新的報告,則省略 -Append。如果有多個命令要寫入同一個檔案,請讓每次寫入使用相同的編碼,以維持文字一致。
選擇 Out-File 或 PowerShell 工作階段記錄
若要將單一命令的輸出存到指定檔案,或讓指令碼產生內容精簡的文字報告,請使用 Out-File。每次執行時,它可以取代舊報告,也可以透過 -Append 將內容附加到報告中。由於它寫入的是格式化文字,如果後續步驟需要結構化資料,而非供人閱讀的清單,請改用其他匯出命令。
若要記錄較完整的互動式工作階段,包括執行的命令及其顯示的輸出,請使用 Start-Transcript 和 Stop-Transcript。請在要記錄的操作開始前啟動記錄,並在操作結束後停止;可透過 Start-Transcript -Path 指定記錄檔路徑。工作階段記錄包含的內容可能比單一命令的輸出更多:只需保存特定結果時使用 Out-File,需要記錄工作階段過程時則使用工作階段記錄。