Сведения о блоках скриптов

Краткое описание

Определяет, что такое блок скрипта, и объясняет, как использовать блоки скриптов на языке программирования PowerShell.

Подробное описание

На языке программирования PowerShell блок скрипта — это коллекция инструкций или выражений, которые можно использовать в качестве одной единицы. Блок сценария может принимать аргументы и возвращать значения.

Блок скрипта представляет собой список операторов в фигурных скобках, как показано в следующем синтаксисе:

{<statement list>}

Блок скрипта возвращает выходные данные всех команд в блоке скрипта в виде одного объекта или в виде массива.

Можно также указать возвращаемое значение с помощью ключевого return слова. Ключевое return слово не влияет на другие выходные данные, возвращаемые блоком скрипта. Однако ключевое return слово завершает блок скрипта в этой строке. Дополнительные сведения см. в about_Return.

Как и функции, блок скрипта может включать параметры. Используйте ключевое слово Param для назначения именованных параметров, как показано в следующем синтаксисе:

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

Примечание

В блоке скрипта, в отличие от функции, нельзя указывать параметры за пределами фигурных скобок.

Как и функции, блоки скриптов могут включать DynamicParamключевые слова , BeginProcessи End их ключевые слова. Дополнительные сведения см. в разделе about_Functions и about_Functions_Advanced.

Использование блоков скриптов

Блок скрипта — это экземпляр типа System.Management.Automation.ScriptBlockMicrosoft платформа .NET Framework. Команды могут иметь значения параметров блока скрипта. Например, Invoke-Command командлет имеет ScriptBlock параметр, который принимает значение блока скрипта, как показано в следующем примере:

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 также может выполнять блоки скриптов с блоками параметров. Параметры назначаются по позиции с помощью параметра ArgumentList .

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

Блок скрипта в предыдущем примере использует param ключевое слово для создания параметров $p1 и $p2. Строка First привязана к первому параметру ($p1) и "Second" привязана к ($p2).

Дополнительные сведения о поведении ArgumentList см. в about_Splatting.

Переменные можно использовать для хранения и выполнения блоков скриптов. В приведенном ниже примере блок скрипта хранится в переменной и передается в Invoke-Command.

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

Оператор вызова — это еще один способ выполнения блоков скриптов, хранящихся в переменной. Например Invoke-Command, оператор вызова выполняет блок скрипта в дочерней области. Оператор вызова может упростить использование параметров с блоками скриптов.

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

Выходные данные из блоков скриптов можно хранить в переменной с помощью назначения.

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

Дополнительные сведения об операторе вызова см. в about_Operators.

Использование блоков скриптов с задержкой привязки с параметрами

Типизированный параметр, принимаюющий входные данные конвейера (by Value) или (by PropertyName) позволяет использовать блоки скриптов задержки привязки для параметра. В блоке скрипта задержки привязки можно ссылаться на конвейерный объект с помощью переменной $_конвейера.

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

В более сложных командлетах блоки скриптов с задержкой привязки позволяют повторно использовать один канал в объекте для заполнения других параметров.

Примечания о блоках скриптов задержки привязки в качестве параметров:

  • Необходимо явно указать все имена параметров, используемые с блоками скриптов задержки привязки .

  • Параметр не должен быть нетипизированным, а тип параметра не может быть [scriptblock] или [object].

  • При использовании блока скрипта задержки привязки возникает ошибка без ввода входных данных конвейера.

    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
    

См. также:

about_Functions

about_Functions_Advanced

about_Operators