2015-12-30 63 views
2

思科SX20系统允许您访问其Web界面并将其配置备份下载到.txt文件中。我可以打开文件并手动更改设置,然后重新上传文件而不会出现问题。现在,我有一个Powershell脚本,它将更改备份文件中的某些设置,然后将其另存为新的.txt文件。当我尝试上传这个新的文件,我得到一个错误:Powershell和.txt格式

"Invalid file uploaded."

我检查,以确保我的脚本是不是在不经意间改变文件和所有的相关信息中的任何其他信息是它必须是。唯一的区别是原始备份文件(从Cisco Web界面下载)似乎使用UNIX(LF)格式以提高可读性,而由Powershell生成的备份副本使用Windows(CR/LF)格式。我的脚本是否有任何方式导致与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} 

回答

3

Out-File默认为UTF-16编码。虽然编码不应该很重要,但是那里的许多应用程序不能处理UTF-16,因为它们假定包含空字节的任何内容都是随机二进制数据而不是文本。您可以将-Encoding参数添加到Out-File到指定的编码写在文件中:

Out-File ... -Encoding ASCII 

这工作,如果你实际上只有ASCII数据。如果是Unicode,则改为使用-Encoding UTF8。对于与其他系统共享的东西,您应该避免使用-Encoding Default-Encoding OEM,这两种编码都是特定于系统配置的编码。不要指望他们在其他系统上工作。

+0

谢谢你,乔伊! 'Out-file $ env:USERPROFILE \ Desktop \ $ name.txt -Encoding UTF8}'允许Web界面接受新文件。但是,我收到一个新的错误。该界面拒绝备份文件中的第一行。我需要在脚本的开头添加一个类似的选项吗? – Blake

+0

@Blake请用新的错误发布一个新问题。 –

+0

@Blake,这可能是因为接口在U + FEFF上绊倒了,UEFF被添加为第一个字符来表示该文件使用UTF-8。如果你有Unicode内容并且需要UTF-8,那么可悲的是'[IO.File] :: WriteAllLines(“$ env:USERPROFILE \ Desktop \ $ name.txt”,$ content,(New-Object System.Text .UTF8Encoding $ False))'。首先,您需要将变量'$ content'分配给您的管道,否则将写入该文件。 – Joey