Question Powershell et Putty

Plus d'informations
il y a 12 ans 1 mois #11275 par gege
Powershell et Putty a été créé par gege
Bonjour,

Voilà j'ai un cas à vous soumettre, j'ai bien cherché de mon côté et je sèche sur la suite que je peux donner à mon problème.

J'ai un script qui tourne sur Unix en bash et qui me permet de créer des boîtes mail sous Zimbra.
C'est un script qui prend un certain nombre d'arguments, il permet non seulement de créer la boite mail, mais aussi la signature de l'utilisateur.

./creebal.sh -u balsansdomaine -n Nomdefamille -p Prénom -f fonction -s service -t n°téléphone -F n°fax -c classedeservicezimbra


Puis j'ai mon script de création d'utilisateur dans mon AD, dans lequel je veux incorporer la création de boîte mail.

Mon idée à la base, était d'utiliser Putty.
J'arrive à lancer putty en ligne de commande et lui passer comme argument un fichier txt qui contient les commandes a exécuter dans le terminal.

Putty root@zimbraserver -m fichiercommande.txt


J'ai testé cette commande dans une invite cmd, en ayant créer avant mon fichier txt qui contient la ligne suivante:

./creebal.sh -u balsansdomaine -n Nomdefamille -p Prénom -f fonction -s service -t n°téléphone -F n°fax -c classedeservicezimbra


Putty se lance sur la fenêtre de terminal du serveur cible, me demande mon mot de passe, puis exécute bien la commande saisi dans mon fichier txt.
La boîte et la signature sont bien créés.

Arrivé là et vu que les arguments nécessaire pour créer la boîte sont déjà saisi pour créer le compte utilisateur dans l'AD, j'ai juste besoin dans mon script powershell de générer un fichier txt contenant ces arguments et d'exécuter la commande sur putty.

Seulement voilà, le fichier txt généré par powershell est en unicode (par défaut), malheureusement ce format n'est pas utilisable dans putty, ou tout du moins putty le gère très mal.
J'ai modifié mon bout de code powershell pour générer le fichier en ASCII, mais malheureusement (encore !!) le fichier txt résultant a les caractères accentués tronqués ,les remplaçant par des ?.

Voici mon bout de code powershell:

$Zfonction = \"\"\"\" + $fonction + \"\"\"\" #permet de garder la valeur entre double côte, très important pour le script de création de bal.
$Znom = \"\"\"\"+ $Nom +\"\"\"\"
$zprenom = \"\"\"\"+ $Prenom +\"\"\"\"
$zservice = \"\"\"\"+ $service +\"\"\"\"
$zfax = \"\"\"\"+ $Fax +\"\"\"\"
$pathzimbra = \"\\monserveur\$CP.txt\"
$creebal = \"/opt/zimbra/creebal.sh -u \"+ $CP +\" -n \"+ $zNom +\" -p \"+ $zPrenom +\" -f \"+ $zfonction +\" -s \"+ $zservice +\" -t \"+ $tel +\" -F \"+ $zFax +\" -c \"+ $ClasseZ
echo $creebal | out-file $pathzimbra -append -width 200 -encoding default
Start-Process c:\putty\putty \"-load zimbra -m $pathzimbratmp\"




Je sais qu'on peut prendre le problème par plusieurs bouts, côté powershell afin de fournir un fichier txt non tronqué et géré par putty. côté putty en faisant en sorte qu'il prenne correctement en charge le fichier txt unicode.

Ou je n'ai certainement pas la bonne méthode, il y a une autre façon de voir les choses, et c'est bien pour ça que je vous soumets mon cas, car à force de bosser dessus, on ne voit plus grand chose ;)

Message édité par: kenobytes, à: 7/03/12 09:16<br><br>Message édité par: kenobytes, à: 7/03/12 09:17

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 1 mois #11296 par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Powershell et Putty
Bonjour,

Dans ton code, tu n'es pas obligé de doubler les guillemets :

[code:1]\&quot;\&quot;\&quot;\&quot;[/code:1]

Tu peux aussi utiliser cette forme :

[code:1]\&quot;`\&quot;\&quot;[/code:1]

Cela donne par exemple :

[code:1]$Znom = \&quot;`\&quot;$Nom`\&quot;\&quot;[/code:1]

Tu pourras noter que tu n'es pas obligé de concaténer avec le '+'.

De ce fait, pour la ligne :
[code:1]
$creebal = \&quot;/opt/zimbra/creebal.sh -u \&quot;+ $CP +\&quot; -n \&quot;+ $zNom +\&quot; -p \&quot;+ $zPrenom +\&quot; -f \&quot;+ $zfonction +\&quot; -s \&quot;+ $zservice +\&quot; -t \&quot;+ $tel +\&quot; -F \&quot;+ $zFax +\&quot; -c \&quot;+ $ClasseZ[/code:1]

Cela donne :

[code:1]
$creebal = \&quot;/opt/zimbra/creebal.sh -u $CP -n $zNom -p $zPrenom -f $zfonction -s $zservice -t $tel -F $zFax -c $ClasseZ\&quot;[/code:1]

Ou bien encore :

[code:1]
$creebal = \&quot;/opt/zimbra/creebal.sh -u $CP -n `\&quot;$Nom`\&quot; -p `\&quot;$Prenom`\&quot; -f `\&quot;$fonction`\&quot; -s `\&quot;$service`\&quot; -t $tel -F `\&quot;$Fax`\&quot; -c `\&quot;$Classe`\&quot;\&quot;[/code:1]

Ce que je trouve nettement plus lisible :P

Au sujet de l'encodage, je n'ai pas tout compris.

Normalement \&quot;-encoding Default\&quot; donne comme résultat un fichier encodé en ANSI.

Je n'ai pas complétement testé ce que tu cherches à faire avec Putty. Par contre, j'ai repris ton code PowerShell et je n'obtiens pas de ? pour les caractères accentués.

Il y a sûrement une raison... dont je n'ai pas encore connaissance.

Aussi, as tu essayé en UTF8 ?

@ +

Matthew<br><br>Message édité par: Matthew BETTON, à: 10/03/12 11:16

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 1 mois #11324 par gege
Réponse de gege sur le sujet Re:Powershell et Putty
Merci pour ta réponse.

Effectivement, c'est plus lisible comme cela ;)

C'est en utilisant ce code là que j'obtiens les ? à la place des caractères accentués.

[code:1]echo $creebal | out-file $pathzimbra -append -width 200 -encoding ASCII[/code:1]

Par contre, si je laisse
[code:1]-encoding Default[/code:1]

J'obtiens un fichier txt avec les caractères correctement typographié.

Seulement lorsque ma commande de création de bal est exécutée avec ce fichier txt, la signature de la boîte créée comporte des ? à la place des caractères accentués.


J'ai essayé avec

[code:1]-encoding Unicode[/code:1]

le fichier txt est correctement typographié.
Mais lors de l’exécution de la commande putty, j'ai un message d'erreur à l'ouverture du terminal:

bash: ÿþ/: Aucun fichier ou répertoire de ce type

Pour moi, il interprète mal mon fichier txt au vu du \&quot;ÿb/:\&quot;
Du coup la boîte n'est pas créée.


J'ai essayé avec

[code:1]-encoding UTF8[/code:1]

le fichier txt est correctement typographié.
Mais à l'exécution de la commande putty, j'ai un message d'erreur à l'ouverture du terminal:

bash: /opt/zimbra/creebal.sh: Aucun fichier ou répertoire de ce type

Il l'interprète également mal.
Du coup la boîte n'est pas créée.



Donc, par désespoir de cause j'utilise :

[code:1]-encoding Default[/code:1]

Puis je vais dans la boîte mail de l'utilisateur et je modifie à la main sa signature en remplaçant les caractères ?.


C'est pas que j'essaye de faire quelque chose d'impossible, mais comme je l'ai expliqué dans mon précédent message, si je créé un fichier txt à la main, donc en faisant un clic droit &gt; Nouveau &gt; document texte et que j'y mets:
[code:1]/opt/zimbra/creebal.sh -u gdupres -n \&quot;Duprés\&quot; -p \&quot;Gérard\&quot; -f \&quot;Mécanicien\&quot; -s \&quot;Garage\&quot; -t 01.02.03.04.05 -F 01.02.03.04.05 -c \&quot;100mo\&quot;[/code:1]

Lorsque je tape dans mon invite de commande:
[code:1]putty -load serverzimbra -m \&quot;chemin du fichier txt\&quot;[/code:1]

Non seulement la boîte et sa signature se créées mais en plus la signature est correctement typographié.
Et quand on regarde de plus près on voit que le fichier txt ainsi créé est en ANSI.

C'est pour cela que je penchais pour une solution par powershell... mais il se peut qu'il n'y en ait pas.

Merci.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 1 mois #11326 par gege
Réponse de gege sur le sujet Re:Powershell et Putty
Je suis peut être sur une piste.

En essayant la commande

[code:1]send-mailmessage[/code:1]

J'ai remarqué que si je mettais dans mon corps de texte un caractère accentué, le mail reçu avait des ? à la place des caractère accentué.



J'ai trouvé cette variable:

[code:1]$OutputEncoding[/code:1]

qui me renvoie cela:

IsSingleByte : True
BodyName : us-ascii
EncodingName : US-ASCII
HeaderName : us-ascii
WebName : us-ascii
WindowsCodePage : 1252
IsBrowserDisplay : False
IsBrowserSave : False
IsMailNewsDisplay : True
IsMailNewsSave : True
EncoderFallback : System.Text.EncoderReplacementFallback
DecoderFallback : System.Text.DecoderReplacementFallback
IsReadOnly : True
CodePage : 20127


Je pense que cela doit être étroitement lié, mais je ne sais pas comment modifier cette variable...

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 4 semaines #11385 par gege
Réponse de gege sur le sujet Re:Powershell et Putty
J'ai trouvé une solution (certainement parmi tant d'autres) que je partage avec vous...

Le problème que je rencontrai venait du fait que le fichier txt généré par powershell en UTF8 est en fait en UTF8 BOM, et cette particularité n'est pas gérer par putty.
D'ailleurs, j'aimerai comprendre pourquoi powershell utilise le BOM dans l'UTF8 vu que par définition il ne sert à rien...

Donc à partir de ce constat fallait \&quot;simplement\&quot; trouver le moyen de produire un UTF8 sans BOM.

Et cette commande m'y aide...

[code:1][system.IO.File]::WriteAllLines($pathzimbra, $creebal)[/code:1]

à la place de ça:

[code:1]echo $creebal | out-file $pathzimbra -append -width 200 -encoding UTF8[/code:1]


Résultat, mes accents sont bien mieux géré et je n'ai plus besoin de retourner voir ensuite les signatures de mes utilisateurs ainsi créé.

Merci encore à Matthew pour l'aide et le temps passé sur mon cas... ;)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 3 semaines #11396 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Powershell et Putty
kenobytes écrit:

D'ailleurs, j'aimerai comprendre pourquoi powershell utilise le BOM dans l'UTF8 vu que par définition il ne sert à rien...

Comment connaitre l'encodage sans le BOM ?
Si Putty attend de l'UTF8 effectivement pas besoin de le lui rappeler via le BOM.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.127 secondes
Propulsé par Kunena