(17)Powershell中的重定向運算符

默認狀況下,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種)重定向到指定的文件。

    這些運算符的用法同以前表格中的運算符的用法徹底相似。這裏再也不一一列舉。

相關文章
相關標籤/搜索