Delen via


about_Script_Blocks

Korte beschrijving

Definieert wat een scriptblok is en legt uit hoe u scriptblokken gebruikt in de PowerShell-programmeertaal.

Lange beschrijving

In de PowerShell-programmeertaal is een scriptblok een verzameling instructies of expressies die als één eenheid kunnen worden gebruikt. Een scriptblok kan argumenten accepteren en waarden retourneren.

Syntactisch is een scriptblok een instructielijst tussen accolades, zoals wordt weergegeven in de volgende syntaxis:

{<statement list>}

Een scriptblok retourneert de uitvoer van alle opdrachten in het scriptblok, hetzij als één object of als een matrix.

U kunt ook een retourwaarde opgeven met behulp van het return trefwoord. Het return trefwoord heeft geen invloed op of onderdrukt geen andere uitvoer die wordt geretourneerd door het scriptblok. return Het trefwoord sluit echter het scriptblok op die regel af. Zie about_Return voor meer informatie.

Net als bij functies kan een scriptblok parameters bevatten. Gebruik het trefwoord Param om benoemde parameters toe te wijzen, zoals wordt weergegeven in de volgende syntaxis:

{
Param([type]$Parameter1 [,[type]$Parameter2])
<statement list>
}

Notitie

In een scriptblok kunt u, in tegenstelling tot een functie, geen parameters buiten de accolades opgeven.

Net als bij functies kunnen scriptblokken de DynamicParamtrefwoorden , Begin, Processen End bevatten. Zie about_Functions en about_Functions_Advanced voor meer informatie.

Scriptblokken gebruiken

Een scriptblok is een exemplaar van een Microsoft-.NET Framework-type System.Management.Automation.ScriptBlock. Opdrachten kunnen parameterwaarden voor scriptblok bevatten. De cmdlet heeft bijvoorbeeld Invoke-Command een ScriptBlock parameter die een scriptblokwaarde gebruikt, zoals in dit voorbeeld wordt weergegeven:

Invoke-Command -ScriptBlock { Get-Process }
Handles  NPM(K)    PM(K)     WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----     ----- -----   ------     -- -----------
999          28    39100     45020   262    15.88   1844 communicator
721          28    32696     36536   222    20.84   4028 explorer
...

Invoke-Command kan ook scriptblokken uitvoeren die parameterblokken bevatten. Parameters worden toegewezen per positie met behulp van de parameter ArgumentList .

Invoke-Command -ScriptBlock { param($p1, $p2)
"p1: $p1"
"p2: $p2"
} -ArgumentList "First", "Second"
p1: First
p2: Second

Het scriptblok in het vorige voorbeeld gebruikt het param trefwoord om een parameter $p1 en $p2te maken. De tekenreeks 'First' is gebonden aan de eerste parameter ($p1) en 'Second' is gebonden aan ($p2).

Zie about_Splatting voor meer informatie over het gedrag van ArgumentList.

U kunt variabelen gebruiken om scriptblokken op te slaan en uit te voeren. In het onderstaande voorbeeld wordt een scriptblok opgeslagen in een variabele en doorgegeven aan Invoke-Command.

$a = { Get-Service BITS }
Invoke-Command -ScriptBlock $a
Status   Name               DisplayName
------   ----               -----------
Running  BITS               Background Intelligent Transfer Ser...

De aanroepoperator is een andere manier om scriptblokken uit te voeren die zijn opgeslagen in een variabele. Net als Invoke-Command, voert de aanroepoperator het scriptblok uit in een onderliggend bereik. Met de aanroepoperator kunt u eenvoudiger parameters gebruiken met uw scriptblokken.

$a ={ param($p1, $p2)
"p1: $p1"
"p2: $p2"
}
&$a -p2 "First" -p1 "Second"
p1: Second
p2: First

U kunt de uitvoer van uw scriptblokken opslaan in een variabele met behulp van toewijzing.

PS>  $a = { 1 + 1}
PS>  $b = &$a
PS>  $b
2
PS>  $a = { 1 + 1}
PS>  $b = Invoke-Command $a
PS>  $b
2

Zie about_Operators voor meer informatie over de oproepoperator.

Scriptblokken voor vertragingsbinding gebruiken met parameters

Een getypte parameter die pijplijninvoer (by Value) of (by PropertyName) accepteert, maakt het gebruik van scriptblokken met vertragingsbinding op de parameter mogelijk. Binnen het scriptblok voor vertragingsbinding kunt u verwijzen naar het object dat is doorgesluisd met behulp van de pijplijnvariabele $_.

# Renames config.log to old_config.log
dir config.log | Rename-Item -NewName {"old_" + $_.Name}

In complexere cmdlets kunnen scriptblokken met vertragingsbindingen het hergebruiken van één object dat is doorgesluisd, worden gebruikt om andere parameters te vullen.

Opmerkingen over scriptblokken voor vertragingsbinding als parameters:

  • U moet expliciet parameternamen opgeven die u gebruikt met scriptblokken voor vertragingsbinding .

  • De parameter mag niet worden getypeerd en het type van de parameter mag niet of [object]zijn[scriptblock].

  • U ontvangt een fout als u een scriptblok voor vertragingsbinding gebruikt zonder pijplijninvoer op te geven.

    Rename-Item -NewName {$_.Name + ".old"}
    
    Rename-Item : Cannot evaluate parameter 'NewName' because its argument is
    specified as a script block and there is no input. A script block cannot
    be evaluated without input.
    At line:1 char:23
    +  Rename-Item -NewName {$_.Name + ".old"}
    +                       ~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : MetadataError: (:) [Rename-Item],
          ParameterBindingException
        + FullyQualifiedErrorId : ScriptBlockArgumentNoInput,
          Microsoft.PowerShell.Commands.RenameItemCommand
    

Zie ook