about_Script_Blocks

Applies To: Windows PowerShell 2.0

TOPIC
    about_Script_Blocks

SHORT DESCRIPTION
    Defines what a script block is and explains how to use script blocks in 
    the Windows PowerShell programming language.


LONG DESCRIPTION
    In the Windows PowerShell programming language, a script block is a 
    collection of statements or expressions that can be used as a single unit. 
    A script block can accept arguments and return values.

    Syntactically, a script block is a statement list in braces, as shown in 
    the following syntax:


        {<statement list>}


    A script block returns the output of all the commands in the script block, 
    either as a single object or as an array.

    Like functions, a script block can include parameters. Use the Param 
    keyword to assign named parameters, as shown in the following syntax: 


        {
            param ([type]$parameter1 [,[type]$parameter2])
            <statement list>
        }


    In a script block, unlike a function, you cannot specify parameters outside 
    the braces.


    Like functions, script blocks can include the DynamicParam, Begin, Process, 
    and End keywords. For more information, see about_Functions and 
    about_Functions_Advanced.


  Using Script Blocks

      A script block is an instance of a Microsoft .NET Framework type 
      (System.Management.Automation.ScriptBlock). Commands can have script 
      block parameter values. For example, the Invoke-Command cmdlet has a 
      ScriptBlock parameter that takes a script block value, as shown in this 
      example:


          C:\PS> 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   
          . . .           


      The script block that is used as a value can be more complicated, as 
      shown in the following example:


          C:\PS> invoke-command -scriptblock { param ($uu = "Parameter"); 
              "$uu assigned." }  
          Parameter assigned.


      The script block in the preceding example uses the Param keyword to 
      create a parameter that has a default value. The following example uses 
      the Args parameter of the Invoke-Command cmdlet to assign a different 
      value to the parameter:


          C:\PS> invoke-command -scriptblock {param ($uu = "Parameter"); 
              "$uu assigned."} -args "Other value"
          Other value assigned.


      You can assign a script block to a variable, as shown in the following 
      example:


          C:\PS> $a = {param ($uu = "Parameter"); "$uu assigned."}


      You can use the variable with a cmdlet such as Invoke-Command, as shown 
      in the following example:


          C:\PS> invoke-command -scriptblock $a -args "Other value"
          Other value assigned.


      You can run a script block that is assigned to a variable by using the 
      call operator (&), as shown in the following example:


          C:\PS> &$a 
          Parameter assigned.


      You can also provide a parameter to the script block, as shown in the 
      following example:


          C:\PS> &$a "Other value"
          Other value assigned.


      If you want to assign the value that is created by a script block to a 
      variable, use the call operator to run the script block directly, as 
      shown in the following example:


          C:\PS> $a = &{param ($uu = "Parameter"); "$uu assigned."}
          C:\PS> $a
          Parameter assigned.


      For more information about the call operator, see about_Operators.


SEE ALSO
    about_Functions
    about_Functions_Advanced
    about_Operators