Я застреваю, пытаясь найти лучший метод для вызова функции из функции и предоставления параметров для обеих функций. До сих пор я получил ниже, и все работает, потому что я знаю, какие параметры cmdline нужно указать.Обязательный параметр для внутренней функции
Я нашел this post, но я не уверен, как использовать его с функцией, которая вызывает функцию.
Редактировать: добавлен более короткий код. В коде, как бы вы сделать параметр ParamSet [string]$killserver
обязательным как для материнской функции main
и функции ребенка KillSwitch
так, что если функция выполняется main -nukejobs
Powershell запрашивает переменной $killserver
Edit 2: проработаны запрашивая обязательные пары serverlist
и datelist
но появляется теперь функция ребенка не писать для размещения "receive input from $serverlist and $datelist"
Edit 3: исправил значение Switch ($PSCmdlet.ParameterSetName){
для RunMulti
и теперь вещь выглядят хорошо.
Function Main{
[CmdletBinding(SupportsShouldProcess=$true,DefaultParameterSetName="ViewOnly")]
Param(
[Parameter(Mandatory=$false,ParameterSetName="KillSwitch")]
[Switch]$NukeJobs,
[Parameter(Mandatory=$true,ParameterSetName="KillSwitch",
HelpMessage="Enter ServerName to remove the scheduled reboot for, Check using main -viewonly")]
[String]$killserver,
[Parameter(Mandatory=$false,ParameterSetName="RunMulti")]
[switch]$RunMultiple,
[Parameter(Mandatory=$true,ParameterSetName="RunMulti")]
[String]$serverlist,
[Parameter(Mandatory=$true,ParameterSetName="RunMulti")]
[String]$datelist
)
Switch ($PSCmdlet.ParameterSetName) {
"KillSwitch" {
KillSwitch -server $killserver
} # end killswitch
"RunMulti" {
RunMulti -serverlist $serverlist -datelist $datelist
} # end run multi
} # end switch block
} # end main function
Function KillSwitch{
Param(
[Parameter(Mandatory=$true)]
[String]$server
)
"Removing previous scheduled reboot for $server"
} # end killswitch function
Function RunMulti {
Param(
[Parameter(Mandatory=$true,
HelpMessage="Text file with server names to reboot, one per line!")]
[string]$serverlist,
[Parameter(Mandatory=$true,
HelpMessage="Text file with date/times, one per line!")]
[String]$datelist
)
"receive input from $serverlist and $datelist"
}
Боюсь, я не понимаю, как '[Parameter (Обязательный = $ true)]' не то, что вы хотите. Вот как вы делаете параметры обязательными. Возможно, у вас есть более короткий образец кода, который описывает вашу проблему? – Matt
Измененный код, добавленный лучший пример. – user4317867
Основываясь на вашем коде, когда я запускаю 'main -NukeJobs', я получаю запрос на параметр killserver, вы не получаете тот же результат? – Bluecakes