提问人:SpyNet 提问时间:10/3/2023 最后编辑:SpyNet 更新时间:10/3/2023 访问量:38
如何使PowerShell动态参数更具动态性?
How to make PowerShell Dynamic parameters more dynamic?
问:
这是我的代码
function test-function {
[CmdletBinding()]
Param(
[Parameter(Mandatory = $false, ParameterSetName = 'parameter set A')][switch]$Default,
[Parameter(Mandatory = $false, ParameterSetName = 'parameter set B')][switch]$NoFlightRoots,
# [Parameter(Mandatory = $false, ParameterSetName = 'parameter set A')]
# [Parameter(Mandatory = $false, ParameterSetName = 'parameter set B')]
# [switch]$PrepMode,
# [Parameter(Mandatory = $false, ParameterSetName = 'parameter set A')]
# [Parameter(Mandatory = $false, ParameterSetName = 'parameter set B')]
# [switch]$AuditAndEnforce,
[Parameter(Mandatory = $false, ParameterSetName = 'parameter set A')]
[Parameter(Mandatory = $false, ParameterSetName = 'parameter set B')]
[Switch]$SomeMoreParameter,
[Parameter(Mandatory = $false, ParameterSetName = 'parameter set A')]
[Parameter(Mandatory = $false, ParameterSetName = 'parameter set B')]
[Switch]$SomeMoreParameter2
)
DynamicParam {
if (
($PSBoundParameters['Default']) -or ($PSBoundParameters['NoFlightRoots'])
) {
# Add the dynamic parameters to the param dictionary
$paramDictionary = [System.Management.Automation.RuntimeDefinedParameterDictionary]::new()
if (!$PSBoundParameters['PrepMode']) {
# Create a dynamic parameter for AuditAndEnforce
$AuditAndEnforceDynamicParameter = [System.Management.Automation.ParameterAttribute]@{
Mandatory = $false
ParameterSetName = '__AllParameterSets'
HelpMessage = 'The mode to audit and enforce the policy.'
}
$paramDictionary.Add('AuditAndEnforce', [System.Management.Automation.RuntimeDefinedParameter]::new(
'AuditAndEnforce',
[switch],
[System.Management.Automation.ParameterAttribute[]]@($AuditAndEnforceDynamicParameter)
))
}
if (!$PSBoundParameters['AuditAndEnforce']) {
# Create a dynamic parameter for PrepMode
$PrepModeDynamicParameter = [System.Management.Automation.ParameterAttribute]@{
Mandatory = $false
ParameterSetName = '__AllParameterSets'
HelpMessage = 'The name of the computer to sign the policy for.'
}
$paramDictionary.Add('PrepMode', [System.Management.Automation.RuntimeDefinedParameter]::new(
'PrepMode',
[switch],
[System.Management.Automation.ParameterAttribute[]]@($PrepModeDynamicParameter)
))
}
return $paramDictionary
}
}
begin {}
process {}
}
test-function -Default
目标是使 和 参数互斥而不显示任何错误。这完全与控制台上的 PowerShell 参数建议有关。-PrepMode
-AuditAndEnforce
我尝试了不同的方法,这是我迄今为止最接近的方法。代码有问题,我需要一种方法来强制动态参数块更加动态,即我需要它多次重新评估所选参数。
当我这样做时
test-function -Default -PrepMode
我不想接下来被建议,反之亦然。-AuditAndEnforce
我使用 PowerShell 7.3。
我现在可以同时选择这两个参数的原因是,Dynamic parameter 模块只对所选参数进行一次评估,并且由于它看到这两个参数中没有一个被选中,因此它同时提供了这两个参数,但是当我选择其中一个动态参数时,我需要该模块再次运行,以根据所选的动态参数更新其逻辑。
答: 暂无答案
评论