Powershell >;运算符和设置内容cmdlet

Powershell >;运算符和设置内容cmdlet,powershell,Powershell,我发现这两条线: echo "hello world" > hi.txt echo "hello world" | Set-Content hi.txt 他们做的不是完全一样的工作。我创建了一个简单的脚本,用来替换配置文件中某些值的内容并存储它(使用>),但它似乎以某种奇怪的格式存储文件。标准的windows文本编辑器确实可以正常查看该文件,但是应该加载该文件的IDE(它是项目的配置文件)无法读取该文件(我认为它使用了一些额外的编码或其他方式) 但是,当我用设置内容替换它时,它工作得很好

我发现这两条线:

echo "hello world" > hi.txt
echo "hello world" | Set-Content hi.txt
他们做的不是完全一样的工作。我创建了一个简单的脚本,用来替换配置文件中某些值的内容并存储它(使用>),但它似乎以某种奇怪的格式存储文件。标准的windows文本编辑器确实可以正常查看该文件,但是应该加载该文件的IDE(它是项目的配置文件)无法读取该文件(我认为它使用了一些额外的编码或其他方式)

但是,当我用
设置内容
替换它时,它工作得很好


这些命令的默认行为是什么?集合内容的不同功能是什么?集合内容的默认编码是ASCII。这可以通过以下内容进行确认:

Get-Help -Name Set-Content -Parameter Encoding;
PowerShell重定向操作符的默认编码为Unicode。这可以通过查看PowerShell中关于重定向的帮助主题来确认


集合内容的默认编码是ASCII。这可以通过以下内容进行确认:

Get-Help -Name Set-Content -Parameter Encoding;
PowerShell重定向操作符的默认编码为Unicode。这可以通过查看PowerShell中关于重定向的帮助主题来确认


区别在于使用了什么默认编码。从中,我们可以看到
Set Content
默认为ASCII编码,大多数程序都可以读取该编码(但如果不是编写英语,则可能无法工作)。另一方面,
输出重定向操作符与Powershell的内部字符串表示一起工作,即.Net
系统.string
,即UTF-16()


作为旁注,您还可以使用使用unicode编码的
Out文件。

不同之处在于使用的是默认编码。从中,我们可以看到
Set Content
默认为ASCII编码,大多数程序都可以读取该编码(但如果不是编写英语,则可能无法工作)。另一方面,
输出重定向操作符与Powershell的内部字符串表示一起工作,即.Net
系统.string
,即UTF-16()

作为旁注,您还可以使用使用unicode编码的
Out File