Que signifie $ dans PowerShell?

J'ai beaucoup vu ce qui suit dans PowerShell, mais que fait-il exactement?

$_
183
demandé sur Peter Mortensen 2010-08-16 18:33:33

6 réponses

C'est la variable pour la valeur actuelle dans la ligne de conduite, qui est appelée $PSItem dans Powershell 3 et plus récent.

1,2,3 | %{ write-host $_ } 

Ou

1,2,3 | %{ write-host $PSItem } 

Par exemple, dans le code ci-dessus, le bloc %{} est appelé pour chaque valeur du tableau. La variable $_ ou $PSItem contiendra la valeur actuelle.

138
répondu JaredPar 2018-09-03 12:12:06

Je pense que la façon la plus simple de penser à cette variable comme paramètre d'entrée dans l'expression lambda en C#. I. e. $_ est similaire à x dans x => Console.WriteLine(x) fonction anonyme en C#. Considérons les exemples suivants:

PowerShell:

1,2,3 | ForEach-Object {Write-Host $_}

Impressions:

1
2
3

Ou

1,2,3 | Where-Object {$_ -gt 1}

Impressions:

2
3

Et comparez cela avec la syntaxe C # en utilisant LINQ:

var list = new List<int> { 1, 2, 3 };
list.ForEach( _ => Console.WriteLine( _ ));

Impressions:

1
2
3

Ou

list.Where( _ => _ > 1)
    .ToList()
    .ForEach(s => Console.WriteLine(s));

Impressions:

2
3
34
répondu Sergey Teplyakov 2015-08-15 19:53:22

Selon ce site web, c'est une référence à this, principalement dans les boucles.

$_ (dollar trait de soulignement) "Ce" jeton. Se réfère généralement à la élément à l'intérieur d'une boucle foreach. Tâche: Imprimer tous les éléments d'une collection. Solution. ... | foreach { Write-Host $_ }

26
répondu Ikke 2010-08-16 14:35:26

$_ est un alias pour la variable automatique $ PSItem (introduite dans PowerShell V3. 0; Informations D'utilisation trouvées ici ) qui représente l'élément courant du tuyau.

PowerShell (v6.0) la documentation en ligne pour les variables automatiques est ici.

2
répondu Xalorous 2018-09-12 21:51:01

$_ est une variable qui itère sur chaque objet / élément passé du précédent / (pipe).

1
répondu Bill 2010-08-31 16:18:39

$_ est une variable créée par le système généralement à l'intérieur des expressions de bloc qui sont référencées par cmdlets qui sont utilisés avec pipe tels que Where-Object et ForEach-Object.

, Mais il peut également être utilisé dans d'autres types d'expressions, par exemple avec Select-Object, combiné avec l'expression de propriétés. Get-ChildItem | Select-Object @{Name="Name";Expression={$_.Name}}. Dans ce cas, le $_ représente l'élément en cours d'acheminement, mais plusieurs expressions peuvent exister.

Il peut également être référencé par validation de paramètre personnalisé, où un bloc de script est utilisé pour valider valeur. Dans ce cas, $_ représente la valeur du paramètre reçue de l'appel.

L'analogie la plus proche avec C# et java est l'expression lamda. Si vous décomposez powershell aux bases, tout est un bloc de script, y compris un fichier de script a, des fonctions et des applets de commande. Vous pouvez définir vos propres paramètres, mais dans certaines occasions, un est créé par le système pour vous qui représente l'élément d'entrée à traiter / évaluer . Dans ces situations la variable automatique est $_.

0
répondu Alex Sarafian 2017-04-05 19:33:14