2015-12-30 6 views
2

Les systèmes Cisco SX20 vous permettent d'accéder à leur interface Web et de télécharger une sauvegarde de leur configuration dans un fichier .txt. Je peux ouvrir le fichier et modifier manuellement les paramètres, puis re-télécharger le fichier sans problèmes. Maintenant, j'ai un script Powershell qui va modifier certains paramètres dans le fichier de sauvegarde, puis enregistrez-le en tant que nouveau fichier .txt. Lorsque je tente de télécharger ce nouveau fichier, je reçois une erreur:Format Powershell et .txt

"Invalid file uploaded."

J'ai vérifié pour assurer mon script ne change pas, par inadvertance, d'autres informations dans le fichier et toutes les informations est ce qu'il doit être . La seule différence est que le fichier de sauvegarde original (téléchargé à partir de l'interface Web de Cisco) semble utiliser un format UNIX (LF) pour la lisibilité, tandis que la copie de sauvegarde générée par Powershell utilise le format Windows (CR/LF). Est-il possible que mon script provoque un problème de compatibilité avec l'interface 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} 

Répondre

3

Out-File utilise par défaut le codage UTF-16. Bien que le codage ne soit pas vraiment important, de nombreuses applications ne peuvent pas traiter UTF-16 car elles supposent que tout ce qui contient des octets nuls est des données binaires aléatoires et non du texte. Vous pouvez ajouter le paramètre -Encoding-Out-File pour spécifier un codage pour écrire le fichier dans:

Out-File ... -Encoding ASCII 

Cela fonctionne si, en fait, vous ne disposez que des données ASCII. Si c'est Unicode, utilisez plutôt -Encoding UTF8. Pour les choses partagées avec d'autres systèmes, vous devez vous abstenir d'utiliser -Encoding Default ou -Encoding OEM qui sont les deux codages spécifiques à la configuration de votre système. Ne vous attendez pas à ce qu'ils travaillent avec d'autres systèmes.

+0

Merci, Joey! 'Out fichier $ env: USERPROFILE \ Desktop \ $ nom.txt -Encodage UTF8}' permet à l'interface Web d'accepter le nouveau fichier. Cependant, j'ai une nouvelle erreur. L'interface rejette la toute première ligne du fichier de sauvegarde. Aurais-je besoin d'ajouter une option similaire au début de mon script? – Blake

+0

@Blake S'il vous plaît poster une nouvelle question avec la nouvelle erreur. –

+0

@Blake, c'est probablement parce que l'interface trébuche sur U + FEFF, qui est ajouté comme le tout premier caractère à signaler que le fichier utilise UTF-8. Si vous avez du contenu Unicode et que vous avez besoin de UTF-8, tristement le chemin est '[IO.File] :: WriteAllLines (" $ env: USERPROFILE \ Desktop \ $ nom.txt ", $ content, (Nouveau-Objet System.Text .UTF8Encoding $ False)) '. Vous devez d'abord affecter la variable '$ content', bien sûr, à ce que votre pipeline aurait écrit dans le fichier sinon. – Joey