#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)