Question différence entre $input et $_

Plus d'informations
il y a 15 ans 4 mois #8010 par jojo
Bonjour les gars, j'espère que vous allez bien :woohoo:

j'ai une question d'ordre syntaxique, quel est la différence entre ces deux syntaxes:

[code:1]PS>1..10|ForEach {$input -replace '1','#'}
#
2
3
4
5
6
7
8
9
#0
PS>1..10|ForEach {$_ -replace '1','#'}
#
2
3
4
5
6
7
8
9
#0[/code:1]
la variable automatique $input et la variable $_ dans cette exempleont le même effet, pourquoi dans l'exemple ci-dessous la valeur générée n'est pas la même:

[code:1]PS> 1..10|ForEach {$_ * 2}
2
4
6
8
10
12
14
16
18
20
PS> 1..10|ForEach {$input * 2}
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10

PS> 1..10|ForEach {$_ -match '1'}
True
False
False
False
False
False
False
False
False
True

PS> 1..10|ForEach {$input -match '1'}
1
10
[/code:1]

pour la fin quand me conseillez-vous d'utiliser $input et quand me conseillez-vous d'utiliser $_

merci les gars :woohoo:

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 4 mois #8012 par Richard Lazaro
Bonjour ce que je comprends de tes tests :

la variable $_ contient l'objet courant du pipeline
la variable $input contient l'objet entier à gauche du pipeline

Ayant cours , je ne peux pas donner pour l'intant plus d'explication quand aux résultats.

Bien Cordialement,
Richard Lazaro.

Think-MS : (Get-Life).Days | %{ Learn-More }

\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 4 mois #8013 par Laurent Dardenne
Salut,
tu trouveras la réponse dans ce tutoriel .
Bonne lecture.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 4 mois #8014 par Arthur
Réponse de Arthur sur le sujet Re:différence entre $input et $_
Juste pour ajouter que la variable $input est surtout utilisée ( Enfin surtout pour moi :P ) dans les fonctions prenant en compte des pipes :

[code:1] function Addition { $input | foreach { $total += $_ } ; $total }
1..4 | Addition
#10[/code:1]<br><br>Message édité par: bilbao, à: 8/11/10 15:16

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 4 mois #8030 par jojo
Réponse de jojo sur le sujet Re:différence entre $input et $_
merci les gars, vous êtes génial :woohoo:

merci Laurent pour ton tutoriel, j'ai compris maintenant que la variable $input au contaraire de la variable $_ à son propre itérateur

merci @ tous :woohoo:

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 4 mois #8034 par Laurent Dardenne
Un complément sur l'usage de $Input
[code:1]
################################################################################
#
# Nom : Remove-Object.ps1
#
# Objectif : Ne pas propager certains éléments d'une collection dans le pipeline :
#
# $Index : Borne inférieure ou supérieure des objets à filtrer
# Par défaut on ne transmet pas les n premiers éléments
#
# $LastObjects : On transmet les n derniers éléments uniquement
#
# Cette fonction se comporte à l'identique d'un bloc END.
# C'est à dire que l'on attend de recevoir toutes les données du segment de pipeline précédent
# avant de procéder au traitement.
#
# Exemple
# PS&gt;1..10|Remove-Object 3
# 4,5,6,7,8,9,10
#
# PS&gt;1..10|Remove-Object 3 -LastObjects
# 1,2,3,4,5,6,7
#
# Version : 1.2
# Auteur : Laurent Dardenne
# Date : le 10/12/2008
#
################################################################################
Function Remove-Object([int]$Index,[switch]$LastObjects)
{
#Cette fonction implémente par défaut uniquement le bloc End
if ($Index -lt 0)
{Throw \&quot;L'index doit être positif.\&quot;}
#L'usage d'un tableau intermédiaire autorise la notation d'intervalle sur $input
$T=@($input) #Cast d'input en un tableau

#L'index précisé peut être hors du tableaux courant
if ($Index -gt $T.GetUpperBound(0))
{$Index=$T.GetUpperBound(0)}

if ($LastObjects)
{ $T[0..($T.count - $Index-1)] }
else
{ $T[($Index)..$T.count] }
}


#exemple
1..10|Remove-Object 3
1..10|Remove-Object 3 -LastObjects
dir
dir|Remove-Object 3
dir|Remove-Object 3 -LastObjects
[/code:1]
On peut utiliser Select-Object mais ce cmdlet nécessite de connaître la taille de la collection.
De plus il n'est pas optimiser .
Ce qui fait que la fonction est plus rapide :
[code:1]
measure-command {1..10|Remove-Object 3}
measure-command {1..10|select -Last 7}

measure-command {1..10|Remove-Object 3 -LastObjects}
measure-command {1..10|select -first 7}
[/code:1]
Voir aussi le comportement de $Input dans un membre synthétique :
[code:1]
$a = \&quot;foo\&quot;
$a = add-member -in $a -memberType ScriptMethod -name Foo -value {
[Int] $Increment= $args[0]
$v3=$_
$v2=$input
$v=$input|%{$_}
write-host \&quot;Increment=$Increment\&quot;
write-host \&quot;v (from `$input)= $v2\&quot;
write-host \&quot;v2(from `$input|%{`$_})= $v\&quot;
write-host \&quot;v3 (from `$_)= $v3\&quot;
write-host (\&quot;-\&quot; * 40)
} -passthru

$a.Foo(753)

1..5|% {$a.Foo(5)}
[/code:1]
Ici le pipeline renseigne $Input ET $_ .

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.051 secondes
Propulsé par Kunena