Question Astuce : Optimisation de Get-ChildItem

Plus d'informations
il y a 11 ans 2 semaines #19212 par Raphaël Turmeau
Bonjour,

Je débute tout juste en powershell et j’ai proposé deux petits scripts au lien ci-dessous qui dégageaient une problématique intéressante : l’optimisation de la méthode « Get-ChildItem », c’est pourquoi j’ai ouvert un petit sujet là-dessus pour ceux que ça intéresse ou qui ont déjà été confronté à ce problème.

powershell-scripting.com/index.php?optio...id=19211&catid=5

Pour rappel je devais donc calculer la taille de répertoires contenant des millions de fichiers et j’avais trouvé une première méthode par l’intermédiaire du sujet ci-dessous assez basique par l’intermédiaire d’un Get-ChildItem avec l’option –Recurse pour balayer toute l’arborescence :

powershell-scripting.com/index.php?optio...325&catid=5#1325

[code:1] dir $LogFolder -recurse | measure-object length –sum [/code:1]

Mais cette méthode prends un temps considérable lorsque les objets sont nombreux puisque toute les propriétés sont incluses dans cette commande (même si on inclue des critères). Autant dire que cette commande avec une éventuelle utilisation d’un pipe derrière est inutilisable.

Avec les brillants conseils d’Arnaud, je me suis alors penché sur l’optimisation de cette commande et j’ai trouvé des choses intéressantes là-dessus. Je me suis inspiré du dernier script du sujet évoqué ci-dessus.

En effet l’idée est de chercher dans le .net et de passer directement par les propriétés de la classe DirectoryInfo ou FileInfo (je ne sais plus exactement le nom de la classe, désolé !)
Du coup voici une alternative au Get-ChildItem qui optimise considérablement le temps de calcul :

[code:1]
$FSO = New-Object -com Scripting.FileSystemObject
$FolderPath = \"chemin du repertoire”
$taille = ($FSO.GetFolder($FolderPath)).Size
[/code:1]

Cette méthode “GetFolder” permets de récupérer les informations du dossier, ce qui nous intéresse dans notre cas, ainsi cela évite d’inclure les autres propriétés des objets avec le Get-ChildItem.
Malheureusement je n’ai pas réalisé de mesures précises du temps gagné mais on parle d’un facteur de 3 ou 4.

Pour conclure, il ne faut donc pas oublier que l’optimisation de la méthode avec Get-ChildItem est indispensable ou très utile dans certains scripts et le sujet est peut être intéressant pour les débutants, ce qui est mon cas.

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

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