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

时间:2014-03-14 13:34:05

标签: powershell

我发现这两行:

echo "hello world" > hi.txt
echo "hello world" | Set-Content hi.txt

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

但是,当我用Set-Content替换它时,它可以正常工作。

这些命令的默认行为是什么,Set-Content以不同的方式执行哪些操作?

2 个答案:

答案 0 :(得分:5)

区别在于使用的默认编码。从MSDN开始,我们可以看到Set-Content默认为ASCII编码,大多数程序都可以读取(但如果您不写英文,则可能无效)。另一方面,>输出重定向运算符使用Powershell的内部字符串表示形式,即.Net System.String,即UTF-16(reference

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

答案 1 :(得分:4)

Set-Content的默认编码是ASCII。这可以通过以下方式确认:

Get-Help -Name Set-Content -Parameter Encoding;

PowerShell重定向运算符>的默认编码是Unicode。这可以通过查看PowerShell中的help about_Redirection主题来确认。

http://technet.microsoft.com/en-us/library/hh847746.aspx