PowerShell参数集报错:使用$backing时无法解析参数集
PowerShell参数集解析错误修复方案
错误原因
当你使用-backing参数时,PowerShell会匹配Back参数集,但该参数集明确要求$targetName为必填项。如果调用时只传了-backing而未提供-targetName,就会因参数集的必填参数不完整,触发"parameter set cannot be resolved..."错误。其他参数集(如Delete、BackAndDelete)能正常工作,是因为你调用时提供了对应参数集要求的所有必填参数。
修复方案
根据你的实际需求选择以下两种方案之一:
方案一:保持现有参数集设计,正确调用脚本
如果Back场景确实需要强制指定targetName,调用时必须同时提供-targetName和-backing参数,示例:
.\YourScript.ps1 -targetName "你的目标名称" -backing
方案二:修改Back参数集的必填规则
如果Back场景不需要强制要求targetName,将$targetName在Back参数集的Mandatory属性改为$false即可,修改后的代码如下:
[cmdletbinding()] Param ( [Parameter(Mandatory = $false, ParameterSetName = 'Back')] [Parameter(Mandatory = $true, ParameterSetName = 'Delete')] [Parameter(Mandatory = $true, ParameterSetName = 'BackAndDelete')] [string]$targetName, [Parameter(Mandatory = $true, ParameterSetName = 'Delete')] [Parameter(Mandatory = $true, ParameterSetName = 'BackAndDelete')] [string]$PersonalName, [Parameter(Mandatory = $true, ParameterSetName = 'Back')] [switch]$backing, [Parameter(Mandatory = $true, ParameterSetName = 'Delete')] [switch]$Delete, [Parameter(Mandatory = $true, ParameterSetName = 'BackAndDelete')] [switch]$BackAndDelete, [Parameter(Mandatory = $false, ParameterSetName = 'BackAndDelete')] [Parameter(Mandatory = $false, ParameterSetName = 'Delete')] [string]$DeleteType )
注意事项
不需要移除$targetName的[Parameter(...)]声明,否则会破坏Delete和BackAndDelete参数集对$targetName的必填要求。
内容的提问来源于stack exchange,提问作者ZM420
相关产品推荐
相关产品推荐

