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

我发现这两行:

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

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

但是,当我用Set-Content取代它时,它工作正常。

什么是这些命令的默认行为,什么Set-Content做不同的工作,以便它的工作?

区别在于使用了什么样的默认编码。 从MSDN ,我们可以看到Set-Content默认为ASCII编码,大多数程序都可以读取(但是如果你不是英文的话可能无法工作)。 >输出重定向操作符另一方面与Powershell的内部字符串表示,即.Net System.String ,这是UTF-16( 引用 )

作为一个附注,你也可以使用Out-File ,它使用unicode编码。

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

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

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

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