2015-08-19 3 views
0

Я застреваю, пытаясь найти лучший метод для вызова функции из функции и предоставления параметров для обеих функций. До сих пор я получил ниже, и все работает, потому что я знаю, какие параметры 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" 
} 
+0

Боюсь, я не понимаю, как '[Parameter (Обязательный = $ true)]' не то, что вы хотите. Вот как вы делаете параметры обязательными. Возможно, у вас есть более короткий образец кода, который описывает вашу проблему? – Matt

+0

Измененный код, добавленный лучший пример. – user4317867

+0

Основываясь на вашем коде, когда я запускаю 'main -NukeJobs', я получаю запрос на параметр killserver, вы не получаете тот же результат? – Bluecakes

ответ

0

Я нашел обязательные параметры, необходимые отдельные:

[Parameter(Mandatory=$true,ParameterSetName="RunOnce")] блоков.

Например, это не будет работать, даже если Mandatory=$true

Я думаю, потому что это относится только к [switch]

[Parameter(Mandatory=$false,ParameterSetName="RunOnce", 
HelpMessage="Enter ServerName to schedule reboot for.")] 
[switch]$RunOnce, 
[string]$server, 
[string]$date, 

Но это будет работать, в результате чего Powershell запрашивал $server и $date когда это дается переключатель RunOnce.

[Parameter(Mandatory=$false,ParameterSetName="RunOnce", 
HelpMessage="Enter ServerName to schedule reboot for.")] 
[switch]$RunOnce, 
[Parameter(Mandatory=$true,ParameterSetName="RunOnce")] 
[string]$server, 
[Parameter(Mandatory=$true,ParameterSetName="RunOnce")] 
[string]$date, 
Смежные вопросы