2015-12-30 4 views
2

Системы Cisco SX20 позволяют получить доступ к их веб-интерфейсу и загрузить резервную копию их конфигурации в TXT-файле. Я могу открыть файл и вручную изменить настройки, а затем повторно загрузить файл без проблем. Теперь у меня есть сценарий Powershell, который изменит некоторые параметры в файле резервной копии, а затем сохранит его как новый .txt. Когда я пытаюсь загрузить этот новый файл, я получаю сообщение об ошибке:Powershell и .txt формат

"Invalid file uploaded."

Я проверил, чтобы убедиться, мой сценарий не неосторожно меняющимся любой другой информации в файл и всю информации является то, что она должна быть , Единственное различие заключается в том, что исходный файл резервной копии (загружаемый с веб-интерфейса Cisco), по-видимому, использует формат UNIX (LF) для удобства чтения, а резервная копия, созданная Powershell, использует формат Windows (CR/LF). Есть ли способ, которым мой сценарий вызывает проблему совместимости с веб-интерфейсом?

$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}' позволяет веб-интерфейсу принимать новый файл. Однако я получаю новую ошибку. Интерфейс отклоняет самую первую строку в файле резервной копии. Нужно ли мне добавить аналогичный вариант в начало моего скрипта? – Blake

+0

@Blake Пожалуйста, задайте новый вопрос с новой ошибкой. –

+0

@Blake, это, вероятно, потому, что интерфейс натыкается на U + FEFF, который добавляется как самый первый символ, чтобы сигнализировать, что файл использует UTF-8. Если у вас есть контент Юникода и нужен UTF-8, то, к сожалению, путь «[IO.File] :: WriteAllLines (« $ env: USERPROFILE \ Desktop \ $ name.txt », $ content, (New-Object System.Text .UTF8Encoding $ False)) '. Сначала вам нужно назначить переменную '$ content', конечно, тому, что ваш конвейер написал бы в файл в противном случае. – Joey

Смежные вопросы