【问题标题】:Powershell and .txt formatPowershell 和 .txt 格式
【发布时间】:2015-12-30 15:05:54
【问题描述】:

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

“上传的文件无效。”

我已检查以确保我的脚本不会无意中更改文件中的任何其他信息,并且所有信息都是它所需要的。唯一的区别是原始备份文件(从 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} 

【问题讨论】:

    标签: powershell carriage-return lf


    【解决方案1】:

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

    Out-File ... -Encoding ASCII
    

    如果您实际上只有 ASCII 数据,则此方法有效。如果是 Unicode,则改用 -Encoding UTF8。对于与其他系统共享的内容,您应该避免使用-Encoding Default-Encoding OEM,它们都是特定于您的系统配置的编码。不要期望它们与其他系统一起工作。

    【讨论】:

    • 谢谢你,乔伊! Out-file $env:USERPROFILE\Desktop\$name.txt -Encoding UTF8} 允许 Web 界面接受新文件。但是,我收到一个新错误。界面拒绝备份文件中的第一行。我还需要在脚本开头添加一个类似的选项吗?
    • @Blake 请发布一个带有新错误的新问题。
    • @Blake,这可能是因为界面偶然发现了 U+FEFF,它是作为第一个字符添加的,表示文件使用 UTF-8。如果您有 Unicode 内容并且需要 UTF-8,那么遗憾的是方法是 [IO.File]::WriteAllLines("$env:USERPROFILE\Desktop\$name.txt", $content, (New-Object System.Text.UTF8Encoding $False))。首先,您当然需要将变量 $content 分配给您的管道将写入文件的内容。
    猜你喜欢
    • 2018-10-23
    • 1970-01-01
    • 2022-10-15
    • 2021-12-11
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多