我有一个脚本可以更改备份.txt文件并保存一个新的.txt,我可以使用它来上传到Cisco Web界面。使用我的原始脚本,我会收到一个错误:
上传的文件无效。
这是原始剧本:
$name = Read-Host 'What is the SX20 name?'
if ($name -notlike "SX20NAME[a-z , 0-9]*")
{
Read-Host 'Please begin naming conventions with "SX20NAME".'
}
else {
$description = Read-Host 'What is the SX20 alias?'
(Get-Content C:\Users\SX20_Backup.txt)|
Foreach-Object {$_-replace 'SX20NAME[a-z , 0-9]*' , $name}|
Foreach-Object {$_-replace 'SetAlias' , $description}|
Out-file $env:USERPROFILE\Desktop\$name.txt}
我将-Encoding UTF8
添加到Out-File中,现在它看起来像这样:Out-file $env:USERPROFILE\Desktop\$name.txt -Encoding UTF8}
。所以现在接口将接受该文件,但是我收到一条新的错误消息:
有些命令遭到拒绝:卷:“50”
“Volume”恰好是备份文件中的第一行。我可以调整什么来解决这个问题?
答案 0 :(得分:2)
问题是它使用带有BOM 的UTF-8 ,所以用零填充 adds some extra characters at the beginning (most likely 0xFFFE
)。如果您在十六进制编辑器中打开文件,则可以看到此操作。
我之前使用Powershell遇到过这个问题,不幸的是,修复工作并不是很好。 This answer给出了正确的公式。
编辑:更适合您的代码,我认为这样可行。注意我使用%
别名代替ForEach-Object
(它们是相同的)。
$name = Read-Host 'What is the SX20 name?'
if ($name -notlike "SX20NAME[a-z0-9]*") {
Read-Host 'Please begin naming conventions with "SX20NAME".'
} else {
$description = Read-Host 'What is the SX20 alias?'
$newContent = (Get-Content C:\Users\SX20_Backup.txt) | %{ $_ -replace 'SX20NAME[a-z,0-9]*', $name } | %{$_ -replace 'SetAlias', $description}
$filename = $env:USERPROFILE\Desktop\$name.txt
[IO.File]::WriteAllLines($filename, $newContent)
}