Question aide et evaluation

Plus d'informations
il y a 13 ans 3 semaines #14741 par laucaz
aide et evaluation a été créé par laucaz
Bonjour à tous,

Il y a quelques jours on m'a demandé de lister une arborescence (à rallonge bien entendu) en remontant les l'inventaire sur 3 niveaux...

D'où ... \"p'tit script\" (merci à Arnaud Petitjean pour sa fonction \"Get-ChilItemToDeapht).

J'ai répondu à la question mais je n'ai pas lâché mon \"p'tit script\" pour autant.

Donc j'aurais besoin de vous pour mon fichier de sortie.
Quand l'arborescence dépasse une certaine longueur elle est tronquée. Je voudrais outre passer la limite de l'ecran pour avoir la ligne complete.

Je joint mon script au format Zip.
L'archive contient le script, la fonction d'Arnaud et un lisez moi succint.
Au passage si vous pouvez me dire ce que vous en pensez, histoire de savoir si c'est \"propre\" comme code ou pas :unsure:


D'avance merci
Laurent

Message édité par: titou4, à: 29/04/13 16:24<br><br>Message édité par: titou4, à: 29/04/13 16:48

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

Plus d'informations
il y a 13 ans 3 semaines #14744 par laucaz
Réponse de laucaz sur le sujet Re:aide et evaluation
... Toutes mes excuses...

l'archise Zip ci dessous

La pièce jointe ListageArborescence-4dc66391e10332c602ae566cbd4c72be.zip est absente ou indisponible

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

Plus d'informations
il y a 13 ans 3 semaines #14745 par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:aide et evaluation
Bonjour Laurent,

Important : nous sommes là pour apprendre. Ce que je propose n'est pas l'ultime solution, mais pour te donner quelques pistes.

Les noms de fonction ne correspondent pas aux règles de nommage qu'il est préférable d'utiliser sous PowerShell.

Préférer le format 'verb-noun' (verbe-nom).
Pour récupérer la liste des verbes courants sous PowerShell, voir le résultat de 'Get-Verb'.

Je n'ai pas compris certains découpages que tu as fait en fonctions... Sans doute un reste de 'vbscript + routines (sub)' ;)

Les 2 fonctions 'ListRepRep' et 'ListRepRepFic' sont très similaires et doivent pouvoir être mutualisées en une seule fonction.

Le 'Format-Table' que tu utilises dans ces fonctions est la cause de ton problème de chemin non renseigné 'en entier' dans le fichier de sortie.
Sous PowerShell, il faut penser objet.
Utiliser pour la sortie un Select-Object, suivi d'un Export-CSV.
Les propriétés exportées seront celles sélectionnées via le 'Select-Object'.
Chaque propriété sera un nom de colonne dans le fichier csv résultant.
Chaque ligne du csv correspondra à un objet, dans ton cas, aux informations relatives à un chemin : LastAccessTime et FullName.

De plus, le 'Invoke-Item' pour un csv est top, lorsqu'il est bien formaté (\&quot;;\&quot; si \&quot;Regional\&quot; Settings en Fr) et lorsque Excel est intallé :)

Ici :

[code:1]
$ColProf = 1,2,3,4,5,6,7,8,9

if ($ColProf -like $profondeur)
[/code:1]

Préfères l'opérateur '-Contains' :

[code:1]
PS&gt;$ColProf = @(1,2,3,4,5,6,7,8,9)
PS&gt;$ColProf -contains 2
True
PS&gt;$ColProf -contains 22
False
[/code:1]

Aussi, les paramètres de tes fonctions ne sont pas typés.
Tu risques, par exemple, de te retrouver avec des erreurs si l'opérateur saisie du texte à la place de nombres entiers.
C'est pour cette raison que tu es parti sur des contrôles conditionnels (if /else / switch).

Sous PowerShell, pour le contrôle des paramétres, tu peux utiliser les fonctions avancées.

Un exemple :

[code:1]
Function Test-inputDepth {
param(
[parameter(mandatory=$true)]
[ValidateSet(1,2,3,4,5,6,7,8,9)]
[int]$ColProf
)

write-host $ColProf

}

PS&gt; Test-inputDepth test
Test-inputDepth : Impossible de traiter la transformation d'argument sur le paramètre « ColProf ». Impossible de conver
tir la valeur « test » en type « System.Int32 ». Erreur : « Input string was not in a correct format. »
Au niveau de ligne : 1 Caractère : 16
+ Test-inputDepth &lt;&lt;&lt;&lt; test
+ CategoryInfo : InvalidData: (:«») [Test-inputDepth], ParameterBindin...mationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Test-inputDepth

PS&gt; Test-inputDepth \&quot;test\&quot;
Test-inputDepth : Impossible de traiter la transformation d'argument sur le paramètre « ColProf ». Impossible de conver
tir la valeur « test » en type « System.Int32 ». Erreur : « Input string was not in a correct format. »
Au niveau de ligne : 1 Caractère : 16
+ Test-inputDepth &lt;&lt;&lt;&lt; \&quot;test\&quot;
+ CategoryInfo : InvalidData: (:«») [Test-inputDepth], ParameterBindin...mationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Test-inputDepth

PS&gt; Test-inputDepth 22
Test-inputDepth : Impossible de valider l'argument sur le paramètre « ColProf ». L'argument « 22 » n'appartient pas au
jeu « 1,2,3,4,5,6,7,8,9 » spécifié par l'attribut ValidateSet. Indiquez un argument qui se trouve dans le jeu et réessa
yez.
Au niveau de ligne : 1 Caractère : 16
+ Test-inputDepth &lt;&lt;&lt;&lt; 22
+ CategoryInfo : InvalidData: (:«») [Test-inputDepth], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Test-inputDepth

PS&gt; Test-inputDepth 1
1
PS&gt; Test-inputDepth 9
9

[/code:1]


La fonction 'DirFic' s'apparente à un switch. Si le switch est spécifié, la variable portant le paramètre est à $true, sinon il est à $false (voir, par exemple, '-includeFiles').

Etant donné qu'il n'y a qu'une seule fonction dans ton module, rien ne t'empêche de directement l'inclure dans ton script.
C'est un choix : Cette fonction sera-t'elle vraiment utilisée dans un autre contexte ?...
Cette fonction pourra éventuellement être modifiée, dans le cadre de ton traitement.

Remarque : Dans la fonction 'Get-ChildItemToDepth', la valeur de départ de '$CurrentDepth' est 0 =&gt; Si on précise 3 niveaux, on en retrouve 4 (0,1,2 et 3 niveaux =&gt; 4 au total).

Je joins un exemple (peut être modifié / arrangé / etc... ).

La pièce jointe Get_DirectoryTree.zip est absente ou indisponible



Quelques exemples d'utilisation :

[code:1]
.\Get-DirectoryTree.ps1 -Path D:\ -LimitDepth 3
.\Get-DirectoryTree.ps1 -Path D:\sources -LimitDepth 3 -Format txt
.\Get-DirectoryTree.ps1 -Path D:\sources -LimitDepth 3 -includeFiles
[/code:1]

Si l'opérateur qui l'utilise spécifie de mauvais arguments : le script ne tourne pas et retourne une erreur dans la console...
Si le chemin à 'browser' n'existe pas : Idem.

Ceci grâce au bloc param() en entrée :

[code:1]
param(
[Parameter(Mandatory=$true)]
[ValidateScript({Test-Path $_ -PathType Container})]
[String]$Path,
[parameter(Mandatory=$true)]
[ValidateSet(1,2,3,4,5,6,7,8,9)]
[int]$LimitDepth,
[parameter(Mandatory=$false)]
[ValidateSet(\&quot;txt\&quot;,\&quot;csv\&quot;«»)]
[String]$Format = \&quot;csv\&quot;,
[switch]$includeFiles
)
[/code:1]

Un log par jour (avec des append pour chaque nouvelle utilisation, sur une même journée) sous '\logs'.

Le résultat est exporté sous '\output' : fichier au format txt ou csv portant dans le nom, la date de création (année_mois_jour pour le classement : c'est plus pratique) et le chemin qui a été traité.

Il manque le bloc \&quot;Cmd Based Help\&quot; pour pouvoir utiliser Get-Help sur le script :

[code:1]
Get-Help .\Get-DirectoryTree
Get-Help .\Get-DirectoryTree -Detailled
Get-Help .\Get-DirectoryTree -Full
Get-Help .\Get-DirectoryTree -Examples
[/code:1]

A suivre ....

@ +

Matthew
Pièces jointes :

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

Plus d'informations
il y a 13 ans 3 semaines #14746 par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:aide et evaluation
J'oubliais : Comme j'ai utilisé un bloc param() en entrée du script, tu peux du coup utiliser l'autocomplétion via la touche 'tab' lors de la saisie des paramétres ou afin de connaître les différents paramétres qu'il est possible de spécifier (plusieurs fois sur 'tab') :)

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

Plus d'informations
il y a 13 ans 3 semaines #14747 par laucaz
Réponse de laucaz sur le sujet Re:aide et evaluation
:-)))

Merci Matthew...

Je \&quot;re\&quot;lirais ta reponse demain au boulot... mais effectivement je pense qu'il me faut \&quot;repenser\&quot; la conception au sens \&quot;objet\&quot;...

Merci encore
@+
Laurent

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

Plus d'informations
il y a 13 ans 2 semaines #14749 par laucaz
Réponse de laucaz sur le sujet Re:aide et evaluation
... Nickel, je l'ai testé ce matin sur plusieurs arbo... ça fait le boulo B)

Cela dit, mais c'est de l'ordre du détail, j'aime bien suffixer mes logs avec date-Heure-min-sec car, en général, quand on nous pose ce type de question... il y a des tiroirs à la question donc ré exécution plusieurs fois par jour.

Sinon, probablement une vieille habitude de \&quot;tech\&quot;, dans la mesure où je ne maîtrise pas le niveau de connaissance des utilisateurs (sans aucun jugement de valeur), j'ai tendance limiter l'action à un \&quot;double clique\&quot; et à \&quot;poser des questions\&quot; au début en orientant les réponses. D'où les controles.
La meilleur solution serait probablement d'ecrire mes scripts en suivant tes conseils pour que ce soit \&quot;propre et maintenable\&quot; et de creer une interface graphique pour les utiliser ...:woohoo:

Mais nous auront l'occasion d'en reparler :-).

En attendant je vais essayer de ré écrire d'autres scripts en suivant tes conseils.

Merci encore pour ton retour.
@+
Laurent

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

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