我正在针对许多服务器运行PowerShell脚本,并且它将输出记录到文本文件中.
我想捕获脚本当前正在运行的服务器.到目前为止,我有:
$file = "\\server\share\file.txt"
$computername = $env:computername
$computername | Add-Content -Path $file
Run Code Online (Sandbox Code Playgroud)
最后一行在输出文件中添加了问号.哎呀.
如何在PowerShell中将变量输出到文本文件?
我正在通过API解析一些XML文本而不保存实际文件,并且当文本包含来自其他语言的字符时遇到问题.
当试图转换'ë'或其他类似的东西时,我最终得到了文本é.有没有办法在内存中更改变量的编码,因为我没有使用任何文件.
任何帮助将不胜感激.
在将输出流重定向到文件时,有没有办法省略字节顺序标记?例如,如果我想获取XML文件的内容并用新值替换字符串,我需要创建一个新的编码并将新输出写入如下所示的文件,这个文件非常简单:
$newContent = ( Get-Content .\settings.xml ) -replace 'expression', 'newvalue'
$UTF8NoBom = New-Object System.Text.UTF8Encoding( $false )
[System.IO.File]::WriteAllText( '.\settings.xml', $newContent, $UTF8NoBom )
Run Code Online (Sandbox Code Playgroud)
我也试过使用Out-File,但指定UTF8编码仍然包含BOM:
( Get-Content .\settings.xml ) -replace 'expression', 'newvalue' | Out-File -Encoding 'UTF8' .\settings.xml
Run Code Online (Sandbox Code Playgroud)
我想要做的只是重定向到没有BOM的文件:
( Get-Content .\settings.xml ) -replace 'expression, 'newvalue' > settings.xml
Run Code Online (Sandbox Code Playgroud)
问题是添加到输出文件的BOM通常会在从其他应用程序读取这些文件时导致问题(最值得注意的是,如果我修改XML并且它以BOM开头,大多数读取XML的应用程序都会爆炸,Chef Client也是不喜欢JSON属性文件中的BOM.如果我没有编写类似于Write-FileWithoutBom接受管道输入和输出路径的功能,那么在将输出重定向到文件时,我是否可以简单地"关闭"写入BOM?
解决方案不一定必须使用重定向运算符.如果有一个内置的cmdlet,我可以使用它输出到没有BOM的文件,这也是可以接受的.