Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Краткое описание
Определяет, что такое скриптблок и объясняет, как использовать блоки скриптов на языке программирования 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.
Это важно
Не все блоки, заключенные в фигурные скобки, являются блоками скриптов. Например, команды в цикле for или if операторе заключены в блок инструкций.
Блоки инструкций не создают новую область для переменных, поддерживают параметры других ключевых слов оператора.
Использование скриптов
Блок скрипта — это экземпляр типа System.Management.Automation.ScriptBlockMicrosoft .NET Framework. Команды могут иметь значения параметров scriptblock. Например, Invoke-Command командлет имеет ScriptBlock параметр, который принимает значение 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" привязана к первому параметру () и "Second" привязана к ($p1$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.
Использование блоков скриптов с задержкой привязки с параметрами
Типизированный параметр, принимаюющий входные данные конвейера, позволяет использовать блоки скриптов с задержкой привязки для параметра. Для определения параметров конвейерного командлета перед выполнением скрипта можно использовать блоки скриптов с задержкой привязки.
В блоке скриптов с задержкой привязки можно ссылаться на канал в объекте с помощью переменной $_конвейера.
# Both examples rename config.log to old_config.log
# Without delay-binding
dir config.log | ForEach-Object -Process {
Rename-Item -Path $_ -NewName "old_$($_.Name)"
}
# With delay-binding
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 scriptblock and there is no input. A scriptblock 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
См. также
PowerShell