You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell Parameter Set搭配Switch参数失效问题求助

PowerShell参数集配置修正方案

问题诊断

你的脚本未正确通过参数集关联AlternateLocation开关与对应的必填目标参数,导致PowerShell无法识别开关触发的约束规则,因此不会强制要求输入$Target、$TargetDbName等参数。

修正后的脚本代码

[CmdletBinding(DefaultParameterSetName = 'DefaultRestore')]
param(
    # 通用必填参数,同时归属两个参数集
    [Parameter(Mandatory = $true, ParameterSetName = 'DefaultRestore')]
    [Parameter(Mandatory = $true, ParameterSetName = 'AlternateLocationRestore')]
    [string]$Domain,

    [Parameter(Mandatory = $true, ParameterSetName = 'DefaultRestore')]
    [Parameter(Mandatory = $true, ParameterSetName = 'AlternateLocationRestore')]
    [string]$CohesityVip,

    [Parameter(Mandatory = $true, ParameterSetName = 'DefaultRestore')]
    [Parameter(Mandatory = $true, ParameterSetName = 'AlternateLocationRestore')]
    [string]$Source,

    [Parameter(Mandatory = $true, ParameterSetName = 'DefaultRestore')]
    [Parameter(Mandatory = $true, ParameterSetName = 'AlternateLocationRestore')]
    [string]$SourceDbName,

    [Parameter(Mandatory = $true, ParameterSetName = 'DefaultRestore')]
    [Parameter(Mandatory = $true, ParameterSetName = 'AlternateLocationRestore')]
    [string]$UserName,

    # 默认参数集的可选参数
    [Parameter(Mandatory = $false, ParameterSetName = 'DefaultRestore')]
    [string]$RestoreTo,

    # 替代位置开关,仅归属AlternateLocationRestore参数集
    [Parameter(Mandatory = $true, ParameterSetName = 'AlternateLocationRestore')]
    [switch]$AlternateLocation,

    # 替代位置必填参数,仅归属AlternateLocationRestore参数集
    [Parameter(Mandatory = $true, ParameterSetName = 'AlternateLocationRestore')]
    [string]$Target,

    [Parameter(Mandatory = $true, ParameterSetName = 'AlternateLocationRestore')]
    [string]$TargetDbName,

    [Parameter(Mandatory = $true, ParameterSetName = 'AlternateLocationRestore')]
    [string]$MdfFolder,

    [Parameter(Mandatory = $true, ParameterSetName = 'AlternateLocationRestore')]
    [string]$LdfFolder
)

# 根据参数集生成restoreSQL.ps1命令
if ($PSCmdlet.ParameterSetName -eq 'DefaultRestore') {
    $command = ".\restoreSQL.ps1 -Domain $Domain -CohesityVip $CohesityVip -Source $Source -SourceDbName $SourceDbName -UserName $UserName"
    if ($RestoreTo) {
        $command += " -RestoreTo $RestoreTo"
    }
}
else {
    $command = ".\restoreSQL.ps1 -Domain $Domain -CohesityVip $CohesityVip -Source $Source -SourceDbName $SourceDbName -UserName $UserName -Target $Target -TargetDbName $TargetDbName -MdfFolder $MdfFolder -LdfFolder $LdfFolder"
}

Write-Output $command

关键配置说明

  1. 参数集划分:
    • 创建DefaultRestore(默认)和AlternateLocationRestore两个参数集
    • 通用必填参数同时归属两个集合,确保无论哪个场景都必须输入
  2. 开关与参数关联:
    • AlternateLocation开关仅归属AlternateLocationRestore集合,且设为Mandatory=$true,作为该参数集的触发标识
    • 目标相关参数($Target、$TargetDbName等)仅归属AlternateLocationRestore集合,且设为必填
  3. 默认参数集:通过CmdletBinding指定DefaultParameterSetName,确保不使用开关时自动启用默认集合

验证场景

  • 场景1(无开关):运行脚本仅提示输入通用必填参数,可选添加-RestoreTo,输出符合预期的命令
  • 场景2(使用-AlternateLocation):运行脚本会强制要求输入$Target、$TargetDbName等参数,输出包含目标参数的完整命令

内容的提问来源于stack exchange,提问作者user351479

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:43:37