>运算符和Set-Content cmdlet之间有什么区别

Pet*_*etr 4 powershell

我发现这两行:

echo "hello world" > hi.txt
echo "hello world" | Set-Content hi.txt
Run Code Online (Sandbox Code Playgroud)

并没有做同样的工作.我创建了一个简单的脚本来替换配置文件中某些值的内容并将其存储(使用>),但这似乎以某种奇怪的格式存储文件.标准的Windows文本编辑器确实看到文件正常,但是应该加载此文件的IDE(它是项目的配置文件)无法读取它(我认为它使用了一些额外的编码或其他).

但是,当我用它替换Set-Content它工作正常.

这些命令的默认行为是什么,Set-Content的不同之处在于它的工作方式是什么?

car*_*ett 5

区别在于使用的默认编码.从MSDN中,我们可以看到Set-Content默认为ASCII编码,这是大多数程序可读的(但如果你不写英文,可能不起作用).>另一方面,输出重定向运算符使用Powershell的内部字符串表示形式,即.Net System.String,它是UTF-16(参考)

作为旁注,您也可以使用Out-File,它使用unicode编码.