23

レジストリ キーの値を変更する PowerShell 関数があります。コード:

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

これにはパラメーター「CreateNewChild」があり、そのフラグが設定されている場合、関数はキー プロパティが見つからなくても作成します。パラメータ「PropertyType」は必須である必要がありますが、「CreateNewChild」フラグが設定されている場合のみです。

問題は、別のパラメーターが指定されている場合にのみ、パラメーターを必須にする方法です。

OK、私はそれで遊んでいます。そして、これは機能します:

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 が必須でなくなったことを意味します。「1 つの」パラメーター セットを必須に設定すると、コードが壊れます ( 「パラメーター セットを解決できません」というエラー)。これらのパラメータ セットは混乱を招きます。方法があると確信していますが、それを行う方法がわかりません。

4

2 に答える 2

37

これを実現するためのパラメーター セットを定義することで、これらのパラメーターをグループ化できます。

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 スイッチが呼び出されない限り、"Extra" パラメータ セットは処理されません。

[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"
于 2012-11-23T18:46:12.030 に答える
-4

動的パラメーターを使用することもできます。

動的パラメータを作成する新しい方法

于 2012-11-26T06:50:14.570 に答える