Comme je le lis dans le guide de l'utilisateur PowerShell, l'un des concepts de base de PowerShell est que les commandes acceptent et renvoient des objets au lieu de texte. Ainsi par exemple, courir get-alias
me renvoie un certain nombre d' System.Management.Automation.AliasInfo
objets:
PS Z: \> get-alias Définition du nom du type de commande ----------- ---- ---------- Alias% ForEach-Object Alias? Où-objet Alias ac Add-Content Alias asnp Add-PSSnapIn Chat alias Get-Content Alias cd Set-Location Alias chdir Set-Location ...
Maintenant, comment obtenir le nombre de ces objets?
powershell
scripting
ulidtko
la source
la source
$Counter = $(get-alias | measure).Count
car il renvoie toujours la valeur 1 au cas où il n'y aurait qu'une seule occurrence, comme vous l'avez dit.get-alias | measure | % { $_.Count }
measure
est l'abréviation deMeasure-Object
; et renvoie beaucoup d'autres choses - commeAverage
,Sum
,Maximum
, etc ...Get-Alias | Measure-Object | Select-Object -ExpandProperty Count
pour se débarrasser de%
et{}
. Ce qui est plus facile à écrire et à lire est pour une autre discussion.Aussi courte que la réponse de @ jumbo soit :-) vous pouvez le faire encore plus laconiquement. Cela renvoie simplement la
Count
propriété du tableau retourné par la sous-expression antécédente:Quelques points à noter:
Vous pouvez mettre une expression arbitrairement complexe à la place de
Get-Alias
, par exemple:Le signe at initial (@) est nécessaire pour une solution robuste. Tant que la réponse est égale ou supérieure à deux, vous obtiendrez une réponse équivalente avec ou sans @, mais lorsque la réponse est zéro ou un, vous n'obtiendrez aucune sortie à moins que vous n'ayez le signe @! (Il force la
Count
propriété à exister en forçant la sortie à être un tableau.)2012.01.30 Mise à jour
Ce qui précède est vrai pour PowerShell V2. L'une des nouvelles fonctionnalités de PowerShell V3 est que vous disposez d'une
Count
propriété même pour les singletons, de sorte que le signe arobase devient sans importance pour ce scénario.la source
Set-StrictMode -Version Latest
est utilisé. Je viens de rencontrer ceci aujourd'hui (sur 5.1) - quelque chose fonctionnait de manière interactive qui ne fonctionnait pas dans une fonction. Je l'ai suivi jusqu'à la fonction contenant Set-StrictMode; lorsque je définissais le mode strict de manière interactive, cela ne fonctionnait pas non plus.Set-StrictMode
, alors j'aurais dû le remarquer.if ($myObject.PSobject.Properties.Name -contains "count")
(de stackoverflow.com/questions/26997511/… ) avant d'essayer de tester la propriété count. Je déteste que PoSH me fasse faire cela, mais le mode strict en vaut la peine.Utilisez simplement des parenthèses et «compte». Cela s'applique à Powershell v3
la source
@($output).Count
ne produit pas toujours des résultats corrects. J'ai utilisé la($output | Measure).Count
méthode.J'ai trouvé ceci avec l'applet de commande VMware Get-VmQuestion:
La réponse qu'il a donnée est une, alors que
n'a produit aucun résultat (la réponse correcte était 0, telle que produite avec la
Measure
méthode).Cela ne semblait être le cas que pour 0 et 1. Tout ce qui était supérieur à 1 était correct avec des tests limités.
la source