En travaillant sur mes serveurs de fichiers, j'ai remarqué un dossier étrange qui a cassé mon script. Le dossier a un nom composé d'un seul caractère avec la valeur ascii 160 ( espace insécable (NBSP). Visuellement, ce nom est le même que le caractère d'espace.
En bref, j'ai Get-ChildItem
est exécuté sur ce dossier et il entre dans une boucle sans fin. La commande est en réalité exécutée contre le dossier parent et elle retourne à nouveau le dossier problématique, donc mon script est entré dans une boucle sans fin.
Vous pouvez facilement simuler cela sur votre propre environnement. Dans C:\temp
créer un nouveau dossier dont le nom est uniquement NBSP. Vous pouvez taper ce nom en maintenant la touche alt et en appuyant sur 0160 sur le clavier numérique. Après l'avoir créé, exécutez
Get-ChildItem C:\Temp\ -Recurse
vous obtiendrez une liste interminable de dossiers sans nom, bien que je n'aie que ce seul dossier.
d----- 6/15/2017 2:20 PM
d----- 6/15/2017 2:20 PM
d----- 6/15/2017 2:20 PM
d----- 6/15/2017 2:20 PM
d----- 6/15/2017 2:20 PM
. . .
J'ai testé ceci avec PowerShell 4 et 5, sur le serveur et le système d'exploitation client et c'est le même comportement. Commande Get-Item
a également un problème avec ce nom, et les deux commutateurs -Path
y -LiteralPath
se comportent de la même manière. J'ai également essayé [System.IO.Directory]
mais il avait le même problème.
Question : J'ai mis à jour mon script pour signaler les dossiers portant ce nom comme une erreur et les ignorer, mais je me demande s'il existe un moyen plus intelligent de le faire ? Mon objectif serait d'exécuter Get-ChildItem
ou équivalent contre ce dossier.
Est-ce un problème connu ? Cela vaudrait-il la peine de le signaler quelque part comme un bogue, s'il est confirmé par d'autres personnes ?