Если вы хотите функцию с параметрами, вам нужно определить параметры. Вы также можете использовать каноническую форму «Глагол-Существительное» для названия своей функции (список утвержденных глаголов см. здесь ).
Простой подход:
function Deploy-WindowsTemplate($Cluster, $VMHost) {
foreach ($image in $winimage) {
$templatename = $image, $Cluster -join "_"
...
}
}
Подробнее Продвинутый Подход:
function Deploy-WindowsTemplate {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[string]$Cluster,
[Parameter(Mandatory=$true)]
[string]$VMHost
)
foreach ($image in $winimage) {
$templatename = $image, $Cluster -join "_"
...
}
}
Если вы хотите, вы также можете обойтись без параметров и использовать автоматическую переменную $args
, хотя я бы не рекомендовал этого.
function Deploy-WindowsTemplate {
foreach ($image in $winimage) {
$templatename = $image, $args[0] -join "_"
...
}
}
Обратите внимание, однако, что при вызове функции значения параметра / аргумента разделяются пробелом, а не запятыми. Их можно передавать как позиционные параметры (по умолчанию в том порядке, в котором они были определены)
Deploy-WindowsTemplate $wincluster $vmhostwin
или именованные параметры
Deploy-WindowsTemplate -Cluster $wincluster -VMHost $vmhostwin
Значения, разделенные запятыми, передаются как один аргумент массива.
Deploy-WindowsTemplate $wincluster, $vmhostwin
# ^^^^^^^^^^^^^^^^^^^^^^^
# one argument!