簡體   English   中英

內部功能的必填參數

[英]Mandatory parameter for inner function

我一直試圖找出從函數中調用函數並使參數對於兩個函數都是必需的最佳方法。 到目前為止,我已經掌握了以下內容,並且可以正常工作,因為我知道要指定哪些cmdline參數。

我確實找到了這篇文章,但是我不確定如何在調用函數的函數中使用它。

編輯:添加了較短的代碼。 在代碼中,你將如何讓ParamSet參數[string]$killserver強制兩個父功能main和子功能KillSwitch因此,如果運行該功能main -nukejobs PowerShell的提示輸入變量$killserver

編輯2:提示了強制性參數serverlistdatelist的提示,但現在看來子功能沒有寫入主機"receive input from $serverlist and $datelist"

編輯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(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,

但這將起作用,導致在給出RunOnce開關時,Powershell提示輸入$server$date

[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,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM