Параметры в сценарий PowerShell можно передавать двумя разными способами. (Если вы не знаете о PowerShell, см. Совет «` link: / windows-Introduction_to_PowerShell [Введение в PowerShell] «.) Параметры могут передаваться по позиции или по имени. Оба одинаково действительны, поэтому давайте посмотрим, как они работают.

У меня есть сценарий PowerShell с именем LookForFiles.ps1. Он ищет файлы в заданном каталоге и отображает те файлы, размер которых превышает 20 КБ. Сейчас мой сценарий выглядит так:

$files = Get-ChildItem C:\Temp foreach ($file in $files)

{     if ($file.length -gt 20000)

{         Write-Output $file     } }

Как видите, имя моего каталога (C: \ Temp) и размер для проверки (20000) жестко запрограммированы. Вместо этого я хочу передать имя и размер каталога, чтобы мой сценарий был более гибким.

Во-первых, я изменю все так, чтобы передавать эти параметры по позиции, т.е. первым параметром будет каталог, а вторым параметром будет размер. Мой новый сценарий выглядит так:

$files = Get-ChildItem args[0]

foreach ($file in $files)

{     if ($file.length -gt args[1])

{         Write-Output $file     } }

Теперь я вызываю свой сценарий и наблюдаю за результатом: (См. Рисунок 1.)

image

Рисунок 1. Передача позиционных параметров.

Обратите внимание: когда я вызываю сценарий, я передаю два параметра, а именно «C: \ Temp» и «20000». Они заполняются в «$ args [0]» и «$ args [1]»

соответственно, чтобы сценарий выполнялся точно так же, как и раньше. Теперь давайте изменим скрипт так, чтобы он ожидал именованных параметров:

param([string] $dir = "C:\Temp",        [int32] $size = 20000)

$files = Get-ChildItem $dir foreach ($file in $files)

{     if ($file.length -gt $size)

{         Write-Output $file     } }

Обратите внимание, что я удалил ссылки на переменные «$ args». Также обратите внимание, что первая строка (расширенная до второй строки) — это «параметр»

заявление. Это указывает PowerShell ожидать именованные параметры. Этот оператор «param» должен быть первой строкой в ​​вашем скрипте. Он определяет две переменные и инициализирует их значениями по умолчанию. Он определяет строковую переменную $ dir и устанавливает ее по умолчанию на «C: \ Temp», а также определяет переменную $ size int32 (числовую) и принимает ее по умолчанию на 20000. Эти значения инициализируются значениями по умолчанию, поэтому, если параметры не передаются, скрипт вызывается, он все равно будет работать и использовать эти значения.

Вместо того, где у меня раньше был $ args [0], теперь у меня есть переменная $ dir, а вместо того, где у меня раньше было $ args [1], у меня теперь есть переменная $ size. Давайте вызовем скрипт, указав эти именованные параметры:

(См. Рис. 2.)

image

Рисунок 2. Передача именованных параметров.

Теперь, когда запускается скрипт, я указываю «-dir», за которым следует интересующий меня каталог, и я указываю «-size», чтобы указать интересующий меня размер. Поскольку это именованные параметры, я могу изменить их порядок, чтобы что «-size» указывается первым, а «-dir» указывается вторым.

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

Этот совет (2902) применим к Windows 7, 8 и 10.