Powershell Get-ChildItem -Filter fonctionne différemment à la clause Where avec la même valeur
J'ai un dossier sur un serveur appelé MyFolder. Il y a d'autres dossiers appelés MyFolder.1, MyFolder.2, MyFolder.3 etc.
Si je lance:
gci C:\Sample | ? { $_.Name -like "MyFolder.*" }
- Je obtenir le résultat attendu:
Directory: C:\Sample
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 16/10/2012 12:16 MyFolder.1
d---- 16/10/2012 12:16 MyFolder.2
d---- 16/10/2012 12:16 MyFolder.3
Cependant, si je lance:
gci C:\Sample -Filter "MyFolder.*"
J'obtiens:
Directory: C:\Sample
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 16/10/2012 12:16 MyFolder
d---- 16/10/2012 12:16 MyFolder.1
d---- 16/10/2012 12:16 MyFolder.2
d---- 16/10/2012 12:16 MyFolder.3
Je suis confus sur la façon MyFolder est inclus dans la sortie. Je m'attends à la sortie d'être le même.
La l'aide en ligne souligne que la syntaxe du filtre est basé sur le fournisseur, mais je ne suis pas sûr de ce fournisseur est utilisé dans cette instance.
Me manque une pièce fondamentale de la connaissance? J'ai tenté de passer une regex chaîne dans le filtre d'e.g "MyFolder\.*"
mais cela revient tout simplement à rien. Je suis sûr que je suis absent quelque chose de simple.
Je suis en cours d'exécution de Powershell version 2.
Résolution
Grâce à Romain Kouzmine pour souligner les différences de jokers. La suite donne le résultat attendu:
gci C:\Sample\MyFolder.*
Je vais utiliser cette syntaxe pour plus de facilité dans l'avenir pour réduire le bruit dans le code.
source d'informationauteur Kieranties
Vous devez vous connecter pour publier un commentaire.
La
Filter
de fournisseur de système de fichiers utilise plutôt CMD jokers que PowerShell des caractères génériques. CMD caractères génériques sont drôles et pas intuitif dans certains cas limites, surtout sur le plan historique. Voici une explication intéressante: http://blogs.msdn.com/b/oldnewthing/archive/2007/12/17/6785519.aspxUn autre chat à garder à l'esprit:
ls -Filter *.txt
en fait, obtient des fichiers comme*.txt*
dans PowerShell sens, c'est à dire des fichiers avec les extensions de départ avec txt. Cela peut être inattendu et très désagréable dans certains scénarios 🙂