2010-12-01 4 views

Répondre

6

La syntaxe $script:Foo est le plus souvent utilisé pour modifier une variable de niveau script, dans ce cas $Foo. Lorsqu'il est utilisé pour lire la variable, généralement $Foo est suffisant. Par exemple, plutôt que d'écrire ceci:

verbose-script.ps1 
$script:foo = '' 
function f { $script:foo } 

Je voudrais écrire ce (moins bavard et fonctionnellement équivalent):

script.ps1 
$foo = '' 
function f { $foo } 

$script:Foo est cruciale est lorsque vous souhaitez modifier une variable de niveau script à l'intérieur une autre portée telle qu'une fonction ou un scriptblock anonyme par exemple:

PS> $f = 'hi' 
PS> & { $f; $f = 'bye';$f } 
hi 
bye 
PS> $f 
hi 

Notez que $f en dehors de la scriptblock n'a pas changé e Bien que nous l'ayons modifié à bye dans le scriptblock. Ce qui s'est passé, c'est que nous avons seulement modifié une copie locale de $f. Lorsque vous n'appliquez pas de modificateur comme script: (ou global:), PowerShell exécute un copy-on-write sur la variable de portée higer dans une variable locale portant le même nom.

Compte tenu de l'exemple ci-dessus, si nous voulions vraiment faire un changement permanent à $f, nous ensuite utiliser un modificateur comme script: ou global: .: par exemple

PS> $f = 'hi' 
PS> & { $f; $global:f = 'bye';$f } 
hi 
bye 
PS> $f 
bye 
5

Le préfixe script: provoque le nom sur le côté droit d'être recherché dans le champ d'application de script. Essentiellement des données qui sont locales au script lui-même. D'autres étendues valides incluent global, local et privé.

La section d'aide pour la portée contient un peu de détail sur ce sujet.

help about_Scopes 
+0

Je parie que vous vouliez dire privé. :-) –

+0

alors que se passe-t-il quand vous dotez un script avec un script: préfixes sur les fonctions et les variables? –

+0

Lorsque vous utilisez une source point, les éléments de portée de script sont extraits dans le script qui effectue le pointage. –

Questions connexes