繁体   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