Considérez le script Powershell suivant, qui recherche les dossiers dans C: \ avec un «og» dans leur nom:
PS C: \> (ls |% {$ _. Nom} |? {$ _. Contient ("og")}) PerfLogs Fichiers de programme setup.log
Maintenant, je restreins la recherche pour obtenir un seul élément:
PS C: \> (ls |% {$ _. Nom} |? {$ _. Contient ("Prog")}) Fichiers de programme
Ce qui est étrange, c'est que la première opération produit un tableau , tandis que la deuxième opération (qui est à mon humble avis la même opération sémantique, donc elle devrait produire le même type de résultat) renvoie une chaîne . Cela peut être vu dans le résultat suivant:
PS C: \> (ls |% {$ _. Nom} |? {$ _. Contient ("og")}). Longueur 3 PS C: \> (ls |% {$ _. Nom} |? {$ _. Contient ("Prog")}). Longueur 13
Cela peut être très irritant, car apparemment il y a moins de dossiers qui correspondent à 'og' que ceux qui correspondent à 'Prog'.
Évidemment, PowerShell «décompresse» implicitement un tableau à un seul objet, et nous n'obtenons jamais un tableau de longueur 1. Il semble que chaque fois que je veux compter les résultats qui arrivent sur le pipeline, je dois vérifier si je » m traitant d'un tableau ou non.
Comment puis-je empêcher que cela se produise? Comment gérez-vous cela?
$_.Contains
, alors ça%{,,$_.Name}
marche ...