Функции Powershell в скобках

#powershell

#функция #powershell

Вопрос:

Как вызвать функцию, используя параметры в powershell со скобками.

У меня есть в качестве примера эта функция

 function Greet([string]$name , [int]$times)
{
    for ([int]$i = 1; $i -le $times;$i  )
    {
        Write-Host Hiiii $name
    }
}
 

Если я вызываю функции с помощью
Greet Ricardo 5 или Greet "Ricardo" 5 работает.
Но когда я использую Greet ("Ricardo",5) или Greet("Ricardo" ; 5) это не удается.

Что не так?

Комментарии:

1. Что плохого в отсутствии круглых скобок?

2. Ничего. Мне интересно, как они создают функции (cmd-lets), которые используют круглые скобки

3. Например $ACL.SetAccessRule $Rule , eexample не работает без круглых скобок.

Ответ №1:

Функции ведут себя как командлеты. То есть вы не вводите dir(c:temp ). Функции также принимают параметры через пробел и, подобно командлетам, поддерживают позиционные, именованные и необязательные параметры, например:

 Greet Recardo 5
Greet -times 5 -name Ricardo
 

PowerShell использует (), чтобы позволить вам указывать выражения, подобные so:

 function Greet([string[]]$names, [int]$times=5) {
    foreach ($name in $names) {
        1..$times | Foreach {"Hi $name"}
    }
}

Greet Ricardo (1 4)

Great Ricardo    # Note that $times defaults to 5
 

Вы также можете указать простые массивы, используя список, разделенный запятыми, например:

 Greet Ricardo,Lucy,Ethyl (6-1)
 

Поэтому, когда вы передаете что-то подобное ("Ricardo",5) , это оценивается как значение одного параметра, которое представляет собой массив, содержащий два элемента "Ricardo" и 5 . Это будет передано $name параметру, но тогда для параметра не будет значения $times .

Список параметров в скобках используется только при вызове методов .NET, например:

 "Hello World".Substring(6, 3)