Question Largeur des chaines résultat trop etroites

Plus d'informations
il y a 16 ans 1 mois #1626 par sonic
Bonjour,
C'est encore moi ;)

Voila c'est toujours au sujet de ma surveillance de répertoire et envois de mail . Tout fonctionne .
Reste un légé souci .
On des comiques qui mettent des noms de fichiers de presque 50 Caractères .... :blink: Alors du coup le chemin est tronqué ou alors j'ai le message (je vous envois un exemple de mail renvoyé):
[code:1]
Ca donne ca:
=============================
Ne répondez pas a ce mail.
=============================

Rapport des modifications
Le format est: date, HH:MM:«»SS, taille, nom, chemin.

Fichies modifies:

06/02/2008 14:47:48 86528 369 PRC 1.0 Tableau de bord.xls E:\Partage DSI\Ex...


Fichier créés:

Ou ca:
=============================
Ne répondez pas a ce mail.
=============================

Rapport des modifications
Le format est: date, HH:MM:«»SS, taille, nom, chemin.

Fichies modifies:

AVERTISSEMENT : la colonne « DirectoryName » ne tient pas à l'écran et a été supprimée.

06/02/2008 14:46:46 26 lsdjfmgjsdklmdfkljslfkjsdlfkjsdlfkjsdklfjsklfjsdklfsdfgjlsdfkmjgdfklmgjlmsdfmgjsdflmgjsdf...

[/code:1]

Comme vous le voyez il me parle de l'écran , donc sa largeur . Je vais chercher vers out-host ou out-string .
Pour ceux qui pourrons m'aider voici le code qui produit une des chaines incriminé :

[code:1]
$actuel = get-childitem $rep -r |Where-Object {$_.PSIsContainer -eq 0}
$a=$actuel |where {($_.lastwritetime -gt $derniercheck)-and($_.creationtime -lt $derniercheck)} |
format-table Lastwritetime, Length, name, directoryname -autosize -hideTableHeaders
[/code:1]
Je pense que le réglage doit se faire ici a moins que ca ne soit pour la globalité du script ? largeur ecrant = ? bref .....
A noté que dans mon mail j'ai de la marge avant de débordé en largeur , c'est juste powershell qui coupe a je ne sais combien de caractère .
Je vais faire des test mais si vous pouvez m'aider ....<br><br>Message édité par: sonic31, à: 6/02/08 15:44

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

Plus d'informations
il y a 16 ans 1 mois #1628 par sonic
Alors je comprend pas !!!
J'ai volontairement allongé le nom d'un fichier (pour test) et la ,passé une certaine longeur PS me revois la chaine sur un format plus large . Sauf que si il affiche plus de lettre du nom il tronque toujours le chemin !!!!!
Il prend plus de caractère alors que pour l'instant je ne lui ai rien demandé par contre il ne le fait que sur le nom !!!!! Il semblerait que je ne doivent donc chercher a ne régler que la colonne directory ?
Ca se corse !!

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

Plus d'informations
il y a 16 ans 1 mois #1630 par sonic
Du nouveau .
Je n'ai ce phénomène que quand je lance mon script par une tache planifiée avec un compte dédié ... Ca doit bien etre un souci de paramétrage de la console . Il faut que j'arrive a donner a Ps la largeur !!!

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

Plus d'informations
il y a 16 ans 1 mois #1634 par Arnaud Petitjean
Bonsoir Sonic,

J'ai bien compris ton problème. ;)

Les commandes Format-* sont prévues pour une sortie écran, c'est pour cela qu'elles dépendent directement de la taille de la console.
Pour éviter ce genre de soucis, il faut que tu utilises la commande Select-Object suivie des propriétés que tu souhaites récupérer. Soit dans ton cas : Lastwritetime, Length, name, directoryname

N'oublie pas en remplaçant Format-Table par Select-Object d'enlever les paramètres -autosize -hideTableHeaders.

D'autre part, pour des raisons de performances, tu devrais éviter de faire plusieurs Where-Object les uns à la suite des autres mais plutôt regrouper tes conditions.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

Plus d'informations
il y a 16 ans 1 mois #1638 par sonic
En effet tu as bien compris mon problème .
J'ai modifié mon code:
[code:1]
echo \&quot;Itération du:\&quot; &gt;&gt; $fichier_log
get-date &gt;&gt; $fichier_log

\&quot;Photo des repertoires\&quot; &gt;&gt; $fichier_log
$actuel = get-childitem $rep -r |Where-Object {$_.PSIsContainer -eq 0}

get-date &gt;&gt; $fichier_log

\&quot;fichiers modifiés\&quot; &gt;&gt; $fichier_log
$a=$actuel |where {($_.lastwritetime -gt $derniercheck)-and($_.creationtime -lt $derniercheck)} |
select-object Lastwritetime, Length, name, directoryname

get-date &gt;&gt; $fichier_log

\&quot;fichiers crees\&quot; &gt;&gt; $fichier_log
$b=$actuel |where {($_.creationtime -gt $derniercheck)} |
select-object Lastwritetime, Length, name, directoryname

get-date &gt;&gt; $fichier_log

# \&quot;fichiers renomés\&quot;
# $c=$actuel | where {(($ancien | foreach {$_.name}) -notcontains $_.name)-and ($_.creationtime -lt $derniercheck)}
select-object Lastwritetime, Length, name, directoryname

# get-date


# \&quot;fichiers supprimés\&quot;
# $d=$ancien |where {((get-childitem $rep -r $_) -eq $null)} |
select-object Lastwritetime, Length, name, directoryname
# get-date

if ($trace -eq \&quot;VRAI\&quot;«»)
{
# echo \&quot;Les variables : a($a) b($b) c($c) d($d)\&quot; &gt;&gt; $fichier_log
}

$test=$a,$b,$c,$d

if ($test -ne $nul)
{
echo $a &gt; C:\APPL\at.txt
echo $b &gt; C:\APPL\bt.txt
echo $c &gt; C:\APPL\ct.txt
echo $d &gt; C:\APPL\dt.txt

$fmod= get-content C:\APPL\at.txt
$fcre= get-content C:\APPL\bt.txt
# $freno= get-content C:\APPL\ct.txt
# $fsupp= get-content C:\APPL\dt.txt

\&quot; \&quot; &gt; $ficok
\&quot;Rapport des modifications\&quot; &gt;&gt; $ficok
\&quot;Le format est: date, HH:MM:«»SS, taille, nom, chemin.\&quot; &gt;&gt; $ficok
\&quot;\&quot; &gt;&gt; $ficok
\&quot;Fichies modifies:\&quot; &gt;&gt;$ficok
$fmod &gt;&gt; $ficok
# $ficok = $ficok + `r`n
\&quot;Fichier créés:\&quot; &gt;&gt; $ficok
$fcre &gt;&gt; $ficok
# \&quot;fichier remonés:\&quot; &gt;&gt; $ficok
# $freno &gt;&gt; $ficok
# \&quot;Fichier suprimés:\&quot; &gt;&gt; $ficok
# $fsupp &gt;&gt; $ficok
$body= \&quot;=============================\&quot; + \&quot;`r`n\&quot; + \&quot;Ne répondez pas a ce mail.\&quot; + \&quot;`r`n\&quot; + \&quot;=============================\&quot;
$bodya = get-content $ficok
Foreach ($bodyok in $bodya)
{
$body = $body + \&quot;`r`n $bodyok\&quot;
[/code:1]

Maintenant il utilise bien toute la page mais n'importe comment . Ca donne ca :
ah pas possibel de mettre d'image pour l'instant !!!
En bref il donne a la colonne date une largeur ridiculement démesuré et ne laisse presque rien au nom et chemin qui eux en auraient besoin . Deplus il laisse les tete de colonne .Autre souci, malgrés mon ajout de retour retour chariot et a la ligne il ne les y met plus !!!!! Des que ca refonctionne je met une image .
Derniere new: problème du retour a la ligne résolu .
Toujours pas mis en forme corecte .<br><br>Message édité par: sonic31, à: 7/02/08 12:46

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

Plus d'informations
il y a 16 ans 1 mois #1639 par Jacques Barathon
Arnaud avait raison de pointer le fait que format-table utilise la taille de la console pour déterminer la taille d'affichage de ses lignes, mais la solution proposée n'est malheureusement pas satisfaisante, pour la raison que tu as toi-même découverte: select-object n'offre aucun contrôle dans le formatage des champs, tu te retrouves donc avec des espacements arbitraires.

Il serait possible de ruser en modifiant la largeur de la console en début de script et en restaurant sa largeur initiale en fin de script. Mais les concepteurs de PowerShell ont quand même été un peu plus sympas et nous fournissent une solution un peu plus élégante:

Reprends ta syntaxe initiale avec format-table en appliquant le paramètre -autosize qui permet un alignement automatique des colonnes sur la taille réelle des informations collectées. Mais au lieu d'utiliser le symbole \&quot;&gt;&gt;\&quot; pour rediriger les sorties dans un fichier, utilise la commandelette \&quot;out-file\&quot;. Cette commandelette propose le paramètre -width qui te permettra de spécifier la largeur maximale des lignes. Si tu mets une très grande valeur (du genre 9999) tu devrais pouvoir afficher tous les noms de fichiers correctement.

Dernière précision: pour reproduire la fonctionnalité d'ajout en fin de fichier de l'opérateur \&quot;&gt;&gt;\&quot;, n'oublie pas d'utiliser le paramètre -append avec out-file.

J'espère que ça t'aidera!

Janel

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

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