Powershell как подсчитать количество аргументов

написание a .PS1 powershell script, и мне было интересно, как я найду, сколько аргументов передал пользователь. Например, мне нужна моя программа для проверки строки в нескольких файлах. Таким образом, пользователь должен иметь возможность ввести

./Script "a" ex1.txt или

./Script "a" ex1.txt ex2.txt

Я знаю, что в bash можно использовать $# но как проверить powershell. Спасибо

3 ответов


в скрипте или функции вы можете получить доступ к аргументам, переданным через автоматически заполняемый $args переменной. The $args является массивом, поэтому вы можете найти количество аргументов, переданных через его Count собственность.

пример:

function PrintArgs()
{
    Write-Host "You passed $($args.Count) arguments:"
    $args | Write-Host
}

вызов PrintArgs:

> PrintArgs 'a' 'b' 'c'
You passed 3 arguments:
a
b
c

прочитайте несколько файлов справки Если у вас есть время, это вообще очень полезно!

get-help *
get-help *parameters*
get-help about_Parameters
get-help about_Automatic_Variables
get-help about_Functions*
#etc...

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

$Args

содержит массив необъявленных параметров и / или параметр значения, передаваемые функции, сценарию или блоку сценариев. При создании функции можно объявить параметры с помощью ключевое слово param или путем добавления разделенный запятыми список параметров скобки после имени функции.

в действии события переменная $Args содержит объекты, представляющие аргументы события обрабатываемого события. Эта переменная заполняется только в блоке действий регистрации события команда. Значение этой переменной также можно найти в SourceArgs свойство объекта PSEventArgs (Система.Управление.Автоматизация.PSEventArgs) это событие возвращает.

$PSBoundParameters

содержит словарь параметров, передаваемых скрипту или функции и их текущие значения. Эта переменная имеет только значение в области, где объявлены параметры, такие как скрипт или функция. Его можно использовать для отображения или изменения текущих значений параметров или передать значения параметров другому скрипту или функции.

Если вы используете как связанные параметры, так и несвязанные аргументы, вы можете объединить два (пример)

немного не по теме:

Я настоятельно рекомендую не использовать $args. Вы всегда должны использовать связанные параметры, очень мало случаев, когда вы вынуждены их не использовать.

почему? Все функции, которые принимают параметры, должны следовать рекомендациям и использовать блок param() для ваших параметров. Если вы прочитав параметры в файлах справки, вы обнаружите, что использование блока param дает вам всевозможные полезные функции, такие как проверка, принудительное выполнение обязательных параметров, принятие ввода конвейера и т. д. Это также требуется, прежде чем позволить PowerShell сделать еще больше работы для вас с [cmdletbinding()]

Ура!


вы используете встроенный в $Args и администрацией Count для него.

$Args.Count

Это даст вам, сколько аргументов пользователь передал скрипту.