(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种)重定向到指定的文件。

    这些运算符的用法同以前表格中的运算符的用法彻底相似。这里再也不一一列举。

相关文章
相关标签/搜索