Comme je le lis dans le manuel d'utilisation de PowerShell, l'un des concepts fondamentaux de PowerShell est que les commandes acceptent et renvoient des objets au lieu du texte. Ainsi, par exemple, l'exécution de get-alias
me renvoie un certain nombre d'objets System.Management.Automation.AliasInfo
:
PS Z: \> get-alias Nom du type de commande Définition ----------- ---- ---- ------ Alias% ForEach-Object Alias? Where-Object Alias a Add-Content Alias asnp Add-PSSnapIn Alias cat Get-Content Alias cd Set-Location Alias chdir Set-Location ...
Maintenant, comment puis-je obtenir le nombre de ces objets?
Cela vous permettra de compter:
get-alias | measure
Vous pouvez travailler avec le résultat comme avec l'objet:
$m = get-alias | measure
$m.Count
Et si vous souhaitez également avoir des alias dans certaines variables, vous pouvez utiliser Tee-Object:
$m = get-alias | tee -Variable aliases | measure
$m.Count
$aliases
Certaines informations supplémentaires sur l'applet de commande Measure-Object sont activées Technet .
Ne le confondez pas avec l'applet de commande Measure-Command, qui sert à mesurer le temps. (à nouveau sur Technet )
Aussi bref que la réponse de @ jumbo est :-) vous pouvez le faire encore plus simplement. Cela retourne simplement la propriété Count
du tableau renvoyé par la sous-expression antecedent:
@(Get-Alias).Count
Quelques points à noter:
Vous pouvez mettre une expression arbitrairement complexe à la place de Get-Alias
, par exemple:
@(Get-Process | ? { $_.ProcessName -eq "svchost" }).Count
Le signe at initial (@) est nécessaire pour une solution robuste. Tant que la réponse est deux ou plus, vous obtiendrez une réponse équivalente avec ou sans le @, mais lorsque la réponse sera zéro ou un, vous obtiendrez non sortie sauf si vous avez le signe @! (Cela force la propriété Count
à exister en forçant la sortie à être un tableau.)
Mise à jour 2012.01.
Ce qui précède est vrai pour PowerShell V2. L’une des nouvelles fonctionnalités de PowerShell V3 réside dans le fait que vous avez une propriété Count
même pour les singletons. Par conséquent, le signe d’attribution devient sans importance pour ce scénario.
Il suffit d'utiliser la parenthèse et "compter". Ceci s'applique à Powershell v3
(get-alias).count
@($output).Count
ne produit pas toujours des résultats corrects. J'ai utilisé la méthode ($output | Measure).Count
.
J'ai trouvé cela avec l'applet de commande VMware Get-VmQuestion:
$output = Get-VmQuestion -VM vm1
@($output).Count
La réponse est un, alors que
$output
ne produit aucune sortie (la réponse correcte était 0 telle que produite avec la méthode Measure
).
Cela semblait être le cas uniquement avec 0 et 1. Tout ce qui dépassait 1 était correct avec des tests limités.