Powershell 参数集的最佳实践设置
我正在尝试设置参数集,但我不确定这是否是我尝试执行的最佳实践方法。我正在查找的设置如下所示:Powershell 参数集的最佳实践设置,powershell,parameters,Powershell,Parameters,我正在尝试设置参数集,但我不确定这是否是我尝试执行的最佳实践方法。我正在查找的设置如下所示: $FolderSetup - Not Manditory. [ValidateSet("Yes", "No"] Default is "No" If "Yes" is used, then no following parameters should be able to be selected $OSVersion - Manditory. [ValidateSet("2008SP2",
$FolderSetup - Not Manditory. [ValidateSet("Yes", "No"] Default is "No"
If "Yes" is used, then no following parameters should be able to be selected
$OSVersion - Manditory. [ValidateSet("2008SP2", "2008R2", "2012R2", "2016", "All")].
If "All" is used, then no following parameters should be able to be selected
$InputFile - Not Manditory - User inputs location of file
$OutputFolder - Not Manditory. - User inputs desired output location
$InputFile must be used before $OutputFolder can be used.
示例:
SinglePackage -FolderSetup 'Yes'
#No Other Parameters can be used
SinglePackage -OSVersion 'All'
#No Other Parameters can be used
SinglePackage -OSVersion '2008SP2'
SinglePackage -OSVersion '2008SP2' -InputFile 'C:\Temp\MyFile.txt'
SinglePackage -OSVersion '2008SP2' -InputFile 'C:\Temp\MyFile.txt' -OutputFolder 'C:\Temp\MyFolder'
SinglePackage -OSVersion '2008SP2' -OutputFolder 'C:\Temp\MyFolder'
#Not Allowed. Must have -InputFile if using -OutputFolder
这是你如何做你要求的参数
Function TEST(){
Param(
[Parameter(Position=0, Mandatory=$true)]
[switch]$FolderSetup,
[Parameter(Position=1, Mandatory=$false)]
[ValidateSet("2008SP2", "2008R2", "2012R2", "2016", "All")]
[string]$OSVersion,
[Parameter(ParameterSetName="InputFiles", Mandatory=$false)]
[string]$InputFile,
[Parameter(ParameterSetName="InputFiles", Mandatory=$false)]
[string]$OutputFolder
)
}
我认为最好的方法是如下声明参数块:
param(
[Parameter(Mandatory=$true,ParameterSetName="Folder")]
[switch]$FolderSetup,
[Parameter(Mandatory=$true,ParameterSetName="AllVersions")]
[Alias("AllOS")]
[switch]$All,
[Parameter(Mandatory=$true,ParameterSetName="OSSpecific")]
[Parameter(Mandatory=$true,ParameterSetName="IOFolders")]
[ValidateSet("2008SP2","2008R2", "2102R2", "2016")]
[string]$OSVersion,
[Parameter(Mandatory=$true,ParameterSetName="IOFolders")]
[string]$InputFolder,
[Parameter(ParameterSetName="IOFolders")]
[string]$OutputFolder
)
这将强制调用采用上面给出的有效形式之一,并禁止无效组合。如果它不能确定正在使用哪一组参数,它将抛出一个错误,这样说-但这保证了尝试了无效的参数组合
它有一个限制,您不能使用
-OSVersion“All”
;改用-All
或-AllOS
。不清楚你在问什么。请提供一些如何调用脚本的示例。根据我所看到的情况,您不能在参数设置中这样做。您需要在函数中执行此操作errors@JeffZeitlin我补充了一些例子。请让我知道我是否应该尝试进一步解释。@ArcSet,所以这是不可能的。好啊谢谢ArcSet。这正是我想知道的。让$FolderSetup
作为[switch]
更有意义。他正在寻找最佳实践,因此值得包括“正确”的方法吗?谢谢@arcet,但您似乎忽略了一些事情。请看我列举的例子。我希望他们能帮助我解释我在寻找什么,或者我在寻找什么是可能的$FolderSetup
不是强制性的,但如果将其设置为Yes
,则它是唯一可以使用的参数<仅当选择了$OutputFolder
时,code>InputFile才是必需的。