首页 > 系统相关 >(17)Powershell中的重定向运算符

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

时间:2024-01-22 13:55:21浏览次数:27  
标签:编码 重定向 17 运算符 File Powershell Out

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

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

重定向运算符有什么用 ?

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

Powershell 中有以下重定向运算符。

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

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

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

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

Get-Process > process.txt

与以下命令是等价的。

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 C:\Powershell> $OutputEncoding 


BodyName          : iso-2022-jp
EncodingName      : Japanese (Shift-JIS)
HeaderName        : iso-2022-jp
WebName           : shift_jis
WindowsCodePage   : 932
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
IsSingleByte      : False
EncoderFallback   : System.Text.InternalEncoderBestFitFallback
DecoderFallback   : System.Text.InternalDecoderBestFitFallback
IsReadOnly        : True
CodePage          : 932

当然这个值可以是可以更改的,使用例子参考 Powershell 的设计者 Jeffreyblog https://blogs.msdn.microsoft.com/powershell/2006/12/11/outputencoding-to-the-rescue/

所以在重定向 Powershell的输出时,可以使用语法糖(>),也可以使用 Out-File 命令,使用 Out-File 的好处是,通过 -encoding 参数可以指定编码格式。

另外需要注意的是,如果要将内容强制重定向到只读、隐藏或系统文件时,可以使用带 Force 参数使用 Out-File cmdlet。


标签:编码,重定向,17,运算符,File,Powershell,Out
From: https://www.cnblogs.com/zhang-snail/p/17979861

相关文章

  • (16)Powershell中的转义字符
    (16)Powershell中的转义字符转义字符用于对其后的字符给出特殊解释。Powershell中的转义字符是反引号(`),也称为抑音符(ASCII96)。它可用于指示文本(变量名不替换为变量值,直接输出)、行继续(还有后续输入)和特殊字符。1.指示文本(变量名直接输出,不替换为变量值)当转义字符......
  • JavaScript 中的展开运算符是什么?
    展开运算符(SpreadOperator)是JavaScript中的一种语法,用于将可迭代对象(如数组或字符串)展开为独立的元素。它使用三个连续的点号(...)作为操作符。展开运算符可以在多种情况下使用,包括数组、对象和函数调用等。下面是一些展开运算符的用法示例:1:展开数组:使用展开运算符可以将一......
  • 【LeetCode1747. 应该被禁止的 Leetflex 账户】[MySQL 用户变量/Pandas]面向过程编程;
    目录题目地址MySQL代码等效pandas代码题目地址https://leetcode.cn/problems/leetflex-banned-accounts/description/MySQL代码witht1as(selectaccount_id,ip_address,loginastick,"login"asmytypefromLogInfounionallselectaccount_id,ip......
  • AtCoder Regular Contest 170 D Triangle Card Game
    洛谷传送门AtCoder传送门赛后调了40min,哈哈。首先先把\(a,b\)排序。考虑先枚举Alice选的数\(a_i\),然后若\(\forallj,\existsk\nei,(a_i,b_j,a_k)\)能组成三角形,Alice就赢了。考虑简化条件。\((x,y,z)\)能形成三角形的充要条件是\(z\in(|x-y|,x+......
  • 20240117进度汇报
     #!/usr/bin/envpythonfrom__future__importprint_functionimportcollectionsimportcsvimportloggingimportosimportSimpleITKassitkimportradiomicsfromradiomicsimportfeatureextractordefmain():outPath=r''inputCS......
  • 逻辑运算符||、&&
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ inti=0,a=0,b=2,c=3,d=4; //i=a++&&++b&&d++; //当第一个&&左边的条件为假时,其后条件便不再进行(逻辑截断) i=a++||++b||d++; //当第一个||成立,其后的表达式不再进行运算 prin......
  • 17. 电话号码的字母组合(中)
    目录题目题解:回溯题目题解:回溯classSolution:defletterCombinations(self,digits:str)->List[str]:ifnotdigits:#检查输入的数字串digits是否为空return[]a={"2":"abc","3":"def","4"......
  • (8)Powershell中变量的定义和使用
    (8)Powershell中变量的定义和使用这一节主要介绍Powershell中变量的定义和使用,以及使用变量时应该注意的事项。和所有编程语言中的变量一样,Powershell中的变量也是存于存储值的内存单元,需要注意的是,Powershell中的变量是以美元符号($)开头的单字节(一般是英文字符,虽然ISE中支持......
  • (14)Powershell中的逻辑运算符
    (14)Powershell中的逻辑运算符上一节介绍了Powershell中的比较运算符,以及如何使用Powershell中的位运算来操作文件的属性,想写内容参考HERE。这一节介绍Powershell中的逻辑运算符。逻辑运算符可以连接表达式和语句,返回值为TRUE或者FALSE,以此来构成条件为真或为假的bool(TR......
  • (13)Powershell中的比较运算符与位运算符
    (13)Powershell中的比较运算符与位运算符上一节介绍了Powershell中变量的类型,详细内容使劲戳这里。本节介绍Powershell中的比较运算符。使用比较运算符,可以指定用于比较值,也可以查找与指定模式匹配的值。如果要使用比较运算符,需要同时指定要进行比较的值以及分隔这些值的运算......