默認狀況下,Powershell 把輸出發送到屏幕顯示。可是,Powershell也能夠將輸出重定向至一個文本文件,或將錯誤輸出重定向至常規輸出流。shell
重定向運算符有什麼用 ?bash
重定向運算符意味着咱們能夠將命令的輸出信息輸出到指定的文件,徹底知足腳本中的log的要求,便可以利用重定向打印腳本或命令執行的詳細信息。ide
Powershell 中有如下重定向運算符。
編碼
運算符 | 說明 | 示例 |
> |
將輸出發送到指定文件。 | PS D:\> Get-Process > process.txt |
>> | 將輸出追加到指定的文件。 | PS D:\> dir *.txt >> process.txt |
2> | 將輸出中的錯誤發送到指定的文件。 | PS D:\> Get-Process none 2> errors.txt |
2>> |
將輸出中的錯誤追加到指定的文件。該運算符是在實際使用中使用頻率最高的重定向運算符。 | PS D:\> Get-Process none,powershell 2>> .\errore.txt |
2>&1 |
將錯誤發送到成功輸出流。這個須要注意,命令執行成功的信息會顯示,可是錯誤的信息並不會顯示。 | PS D:\> Get-Process none,powershell 2>$1 |
重定向運算符的語法以下:
spa
<input> <operator> [<path>\]<file>
須要注意的是,若是指定的文件已存在,則不追加數據的重定向運算符(> 和 2>)將在不發出警告的狀況下覆蓋文件當前內容。可是,若是該文件是隻讀、隱藏或系統文件,則重定向將會失敗。追加劇定向運算符(>> 和 2>>)不會寫入只讀文件,但會在系統或隱藏文件中追加內容。設計
另外須要注意的是,重定向運算符只是 Powershell 提供的一種語法糖(使用起來很方便,可是也更抽象)。例如: 調試
PS D:\> Get-Process > process.txt
與如下命令是等價的。code
PS D:\> Get-Process | Out-File process.txt
提到 Out-File 不得不提如下Powershell 重定向的編碼問題。blog
Powershell 重定向運算符 > 在重定向文件時,使用的哪種編碼呢?是ASCII 仍是 Unicode ?答案是這取決於重定向運算符 > 右側是文件仍是程序。ci
Powershell 中的String 類型使用的是16位的Unicode編碼,是 .Net Framework 中 System.String 類的實例。因此當你在Powershell中使用重定向運算符時,使用的Unicode編碼。而Unicode編碼也是Out-File 命令重定向文件時的默認編碼。
那若是重定向運算符 > 是程序,而不是文件時,使用的編碼取決於Powershell內置變量 $OutputEncoding 的值,而 $OutputEncoding 的默認值就是ASCII(許多程序並不能正確處理Unicode編碼,編碼是計算機中比較複雜的知識點,感興趣的能夠了解下兩種編碼的不一樣)。如下是在個人電腦中 $OutputEncoding 的值。
PS D:\> $OutputEncoding IsSingleByte : True BodyName : us-ascii EncodingName : US-ASCII HeaderName : us-ascii WebName : us-ascii WindowsCodePage : 1252 IsBrowserDisplay : False IsBrowserSave : False IsMailNewsDisplay : True IsMailNewsSave : True EncoderFallback : System.Text.EncoderReplacementFallback DecoderFallback : System.Text.DecoderReplacementFallback IsReadOnly : True CodePage : 20127
固然這個值能夠是能夠更改的,使用例子參考 Powershell 的設計者 Jeffrey blog https://blogs.msdn.microsoft.com/powershell/2006/12/11/outputencoding-to-the-rescue/
因此在重定向 Powershell的輸出時,可使用語法糖(>),也可使用 Out-File 命令,使用 Out-File 的好處是,經過 -encoding 參數能夠指定編碼格式。
另外須要注意的是,若是要將內容強制重定向到只讀、隱藏或系統文件時,可使用帶 Force 參數使用 Out-File cmdlet。
重定向運算符中的一、2究竟是什麼意思 ?
重定向運算符中的數字 | 所表明的輸出信息種類 |
1 | Output/Success |
2 | Error(錯誤信息) |
3 | Warning(警告信息) |
4 | Verbose(詳細信息) |
5 | Debug(調試信息) |
以上表格中的重定向運算符是在 Powershell 中的全部版本中都支持的輸出信息種類的重定向。在 Powershell 3.0+ 還支持如下重定向運算符。
運算符 | 說明 |
3> |
將警告信息重定向到指定的文件。 |
4>> |
將輸出的詳細信息追加到指定的文件。 |
5>&1 |
將調試信息輸出到成功流。須要注意,命令執行成功的信息會顯示,Debug信息不會顯示。 |
*> | 將全部信息(以上列出的5種)重定向到指定的文件。 |
這些運算符的用法同以前表格中的運算符的用法徹底相似。這裏再也不一一列舉。