gpt4 book ai didi

powershell - PowerShell强制参数取决于另一个参数

转载 作者:行者123 更新时间:2023-12-03 13:56:23 25 4
gpt4 key购买 nike

我有一个PowerShell函数,它可以更改注册表项的值。码:

param(
[Parameter()] [switch]$CreateNewChild,
[Parameter(Mandatory=$true)] [string]$PropertyType
)

它有一个参数“CreateNewChild”,并且如果设置了该标志,该函数将创建key属性,即使找不到该属性也是如此。参数“PropertyType”必须是强制性的,但是仅当已设置“CreateNewChild”标志时。

问题是,仅当指定了另一个参数时,如何才能使该参数成为必需参数?

好的,我一直在玩。这确实有效:
param(
[Parameter(ParameterSetName="one")]
[switch]$DoNotCreateNewChild,

[string]$KeyPath,

[string]$Name,

[string]$NewValue,

[Parameter(ParameterSetName="two")]
[switch]$CreateNewChild,

[Parameter(ParameterSetName="two",Mandatory=$true)]
[string]$PropertyType
)

但是,这意味着$ KeyPath,$ Name和$ NewValue不再是必需的。将“一个”参数设置为强制设置会破坏代码(“无法解析参数集”错误)。这些参数集令人困惑。我敢肯定有办法,但是我不知道怎么做。

最佳答案

您可以通过定义参数集来完成这些参数的分组。

param (
[Parameter(ParameterSetName='One')][switch]$CreateNewChild,
[Parameter(ParameterSetName='One',Mandatory=$true)][string]$PropertyType
)
引用:
https://devblogs.microsoft.com/powershell/powershell-v2-parametersets
http://blogs.technet.com/b/heyscriptingguy/archive/2011/06/30/use-parameter-sets-to-simplify-powershell-commands.aspx
-更新-
这是一个模仿您正在寻找的功能的代码片段。除非调用-Favorite开关,否则不会处理“额外”参数集。
[CmdletBinding(DefaultParametersetName='None')] 
param(
[Parameter(Position=0,Mandatory=$true)] [string]$Age,
[Parameter(Position=1,Mandatory=$true)] [string]$Sex,
[Parameter(Position=2,Mandatory=$true)] [string]$Location,
[Parameter(ParameterSetName='Extra',Mandatory=$false)][switch]$Favorite,
[Parameter(ParameterSetName='Extra',Mandatory=$true)][string]$FavoriteCar
)

$ParamSetName = $PsCmdLet.ParameterSetName

Write-Output "Age: $age"
Write-Output "Sex: $sex"
Write-Output "Location: $Location"
Write-Output "Favorite: $Favorite"
Write-Output "Favorite Car: $FavoriteCar"
Write-Output "ParamSetName: $ParamSetName"

关于powershell - PowerShell强制参数取决于另一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13533763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com