【发布时间】:2015-11-13 10:00:33
【问题描述】:
我一直在试图找出从函数调用函数并使两个函数都强制参数的最佳方法。到目前为止,我已经掌握了以下内容,并且一切正常,因为我知道要指定哪些 cmdline 参数。
我确实找到了this post,但我不确定如何将它与调用函数的函数一起使用。
编辑:添加了更短的代码。在代码中,如何使父函数main 和子函数KillSwitch 的ParamSet 参数[string]$killserver 强制,这样如果函数运行main -nukejobs,Powershell 会提示输入变量$killserver
编辑 2: 解决了强制参数 serverlist 和 datelist 的提示,但现在看来子函数没有写入主机 "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)]怎么不是你想要的。这就是你如何使参数成为强制性的。也许您有一个简短的代码示例来概述您的问题? -
修改代码,添加更好的例子。
-
根据你的代码,当我运行
main -NukeJobs时,我被要求输入 killserver 参数,你得到的结果不是一样吗? -
您现在使用
main -nukejobsPowerShell 的方式会提示您输入$killserver... 因此,如果在killswitch中适当地调用main,则永远不会有问题跨度> -
抱歉,问题出在
RunMultiple,因为在代码所在的位置,Powershell 不会提示输入最终将成为文件路径的参数。
标签: function powershell