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

默认情况下,Powershell 把输出发送到屏幕显示。但是,Powershell也可以将输出重定向至一个文本文件,或将错误输出重定向至常规输出流。

重定向运算符有什么用 ?

重定向运算符意味着我们可以将命令的输出信息输出到指定的文件,完全满足脚本中的log的要求,即可以利用重定向打印脚本或命令执行的详细信息。

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

重定向运算符的语法如下:

<input> <operator> [<path>\]<file>

需要注意的是,如果指定的文件已存在,则不追加数据的重定向运算符(> 和 2>)将在不发出警告的情况下覆盖文件当前内容。但是,如果该文件是只读、隐藏或系统文件,则重定向将会失败。追加重定向运算符(>>  和 2>>)不会写入只读文件,但会在系统或隐藏文件中追加内容。

另外需要注意的是,重定向运算符只是 Powershell 提供的一种语法糖(使用起来很方便,但是也更抽象)。例如:

PS D:\> Get-Process > process.txt

与以下命令是等价的。

PS D:\> Get-Process | Out-File process.txt

提到 Out-File 不得不提以下Powershell 重定向的编码问题。

Powershell 重定向运算符 > 在重定向文件时,使用的哪一种编码呢?是ASCII 还是 Unicode ?答案是这取决于重定向运算符 > 右侧是文件还是程序。

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。



重定向运算符中的1、2到底是什么意思 ?

重定向运算符中的数字 所代表的输出信息种类
1 Output/Success
2 Error(错误信息)
3 Warning(警告信息)
4 Verbose(详细信息)
5 Debug(调试信息)

以上表格中的重定向运算符是在 Powershell 中的所有版本中都支持的输出信息种类的重定向。在 Powershell 3.0+ 还支持以下重定向运算符。

运算符 说明
3> 将警告信息重定向到指定的文件。
4>> 将输出的详细信息追加到指定的文件。
5>&1 将调试信息输出到成功流。需要注意,命令执行成功的信息会显示,Debug信息不会显示。
*> 将所有信息(以上列出的5种)重定向到指定的文件。

这些运算符的用法同之前表格中的运算符的用法完全类似。这里不再一一列举。

时间: 2024-08-03 11:29:39

(17)Powershell中的重定向运算符的相关文章

(20)Powershell中的特殊运算符

Powershell 中除了常见的算术运算符,赋值运算符,比较运算符,位运算符,逻辑运算符,字符串的拆分和合并运算符,转义字符,还有一些特殊的运算符,这些特殊的运算符往往可以解决一些特殊的问题,比如执行运行命令,更改值的数据类型等. & (调用运算符) 使用 & (调用运算符)可以运行命令.脚本或脚本块.因为调用运算符不进行分析,所以它不能解释命令参数.此调用运算符用于指示它后面的值为命令(而不是字符串).使用此运算符可以运行存储在变量中并由字符串表示的命令.例如: PS C:\> 

(15)Powershell中的类型运算符

这节介绍 Powershell 中的类型运算符. Powershell 中的类型运算符可以与 .Net Framework 类型协同使用,可以用来判断一个对象是否是指定的 .Net Framework 类型的一个实例,或是判断一个对象是否可以转换为 .Net Framework 类型. Powershell 支持以下类型运算符 运算符 说明 示例 -is 如果对象是指定的 .Net Framework 类型则返回 TRUE,否则返回 FALSE PS C:\> "abc" -is

(18)Powershell中的字符串拆分运算符

Powershell中提供了对字符串的拆分操作运算符.-split 运算符将一个字符串拆分成多个字符串. 拆分运算符 拆分运算符用于将一个或多个字符串拆分为多个子字符串.可更改拆分操作的以下元素: (1)定界符.默认为空白,但是可指定字符.字符串.模式或用于设置定界符的脚本块. (2)子字符串的最大数目.默认设置为返回所有子字符串.如果指定的数字小于子字符串数,则其余子字符串将合并到最后一个子字符串中. (3)用于指定定界符匹配条件的选项,如 SimpleMatch 和 Multiline. 拆

(8)Powershell中变量的定义和使用

上一节介绍了Powershell中的算术运算符,详细内容参考这里,这些运算符主要用于字符串的连接,组成bool表达式等用于对管道中的命令执行结果进行筛选,我们将会后续的文章中讲到. 这一节主要介绍Powershell中变量的定义和使用,以及使用变量时应该注意的事项. 和所有编程语言中的变量一样,Powershell中的变量也是存于存储值的内存单元,需要注意的是,Powershell中的变量是以美元符号($)开头的单字节(一般是英文字符,虽然ISE中支持双字节的字符,但是像任何编程语言,我们不鼓励

PowerShell 中的目录文件管理

前面的一篇文章我们说了部分在PS中进行文件浏览的基本概念,说到了几个虚拟驱动器的概念.并没有深入的描述相关的命令,这里我们进一步对这一知识点进行描述. 2.1 管理当前工作路径/位置 在日常管理中经常需要对当前的路径进行查询和管理:PS提供了四个管理的cmdlet: get-location.set-location.push-location.pop-location. get-location: 相当于unix/Linux中的‘pwd’:用于获取当前的工作路径 set-location: 相

Powershell中命令自动补全功能及使用Windows命令

上一节主要介绍了Powershell中常见的别名,以及怎么通过别名查看真实的Powershell命令,Powershell别名的命名规范以及如何新建自己的别名(Powershell内置别名不可更改)以及Powershell中兼容性别名,详细内容点击这里. 在本节主要包含以下内容. Powershell命令自动补全功能. 在Powershell中使用cmd命令. 总结 Powershell中命令自动补全功能 Powershell命令自动补全的功能也称为Tab扩展,自动补全的功能可以大大提高命令输入

java中的移位运算符:&lt;&lt;,&gt;&gt;,&gt;&gt;&gt;总结

java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     右移运算符,num >> 1,相当于num除以2 >>>    :     无符号右移,忽略符号位,空位都以0补齐 下面来看看这些移位运算都是怎样使用的 1 /** 2 * 3 */ 4 package com.b510.test; 5 6 /** 7 * @author Jone Hongten 8 * @

Exchange的PowerShell中关于Filter的写法

这篇文章简单说一下Exchange的PowerShell中,Filter的用法,不过相信看完的同学以后可能不会用这个东西------虽然这么说,但是毕竟是一个新的选择,大家可以学习一下. 首先我们看一个输出,我们看看在Exchange2010中,get-user有哪些属性可以做筛选 [PS] E:\>Get-User zhangpengliang|select * 正在创建新会话来隐式远程处理"Get-User"命令... RunspaceId               : 2

PowerShell 中的 replace

PowerShell 中的 replace,既是是字符串函数,还是运算符,类似于 like.match 之类. 比如,有一个字符串: $a = "aaa.bbb?ccc=ddd" 要去掉问号后面的字符,可以用 repace 函数: $a.replace("?ccc=ddd", "") 但是,replace 函数好像并不支持正则表达式,如果后面的内容事先不知道,用这个方法就不行了:这时可以用 -replace 运算符: $a -replace &q