Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Краткое описание
Определяет, что такое скриптблок и объясняет, как использовать блоки скриптов на языке программирования 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" привязана к первому параметру ($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.
Использование блоков скриптов с задержкой привязки с параметрами
Типизированный параметр, принимаюющий входные данные конвейера, позволяет использовать блоки скриптов с задержкой привязки для параметра. Для определения параметров конвейерного командлета перед выполнением скрипта можно использовать блоки скриптов с задержкой привязки.
В блоке скриптов с задержкой привязки можно ссылаться на канал в объекте с помощью переменной $_конвейера.
# 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