相关疑难解决方法(0)

将变量输出("echo")到文本文件

我正在针对许多服务器运行PowerShell脚本,并且它将输出记录到文本文件中.

我想捕获脚本当前正在运行的服务器.到目前为止,我有:

$file = "\\server\share\file.txt"
$computername = $env:computername

$computername | Add-Content -Path $file
Run Code Online (Sandbox Code Playgroud)

最后一行在输出文件中添加了问号.哎呀.

如何在PowerShell中将变量输出到文本文件?

powershell file-io

35
推荐指数
3
解决办法
16万
查看次数

Powershell编码内存中的问题

我正在通过API解析一些XML文本而不保存实际文件,并且当文本包含来自其他语言的字符时遇到问题.

当试图转换'ë'或其他类似的东西时,我最终得到了文本é.有没有办法在内存中更改变量的编码,因为我没有使用任何文件.

任何帮助将不胜感激.

powershell encoding character-encoding

3
推荐指数
1
解决办法
281
查看次数

是否可以使用重定向运算符将输出重定向到文件而无需在Powershell中编写字节顺序标记?

在将输出流重定向到文件时,有没有办法省略字节顺序标记?例如,如果我想获取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的文件,这也是可以接受的.

powershell byte-order-mark file

1
推荐指数
1
解决办法
129
查看次数