itemproperty powershell parameters dependencies registry flags

itemproperty - El parámetro obligatorio de PowerShell depende de otro parámetro



get itemproperty (2)

Podría agrupar esos parámetros definiendo un conjunto de parámetros para lograr esto.

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

Referencia:

http://blogs.msdn.com/b/powershell/archive/2008/12/23/powershell-v2-parametersets.aspx

http://blogs.technet.com/b/heyscriptingguy/archive/2011/06/30/use-parameter-sets-to-simplify-powershell-commands.aspx

--- Actualización ---

Aquí hay un fragmento que imita la funcionalidad que estás buscando. El conjunto de parámetros "Extra" no se procesará a menos que se llame al conmutador -Favorito.

[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"

Tengo una función de PowerShell que cambia los valores de la clave de registro. Código:

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

Tiene un parámetro, "CreateNewChild", y si se establece ese indicador, la función creará la propiedad de la clave, incluso si no se encontró. El parámetro "PropertyType" debe ser obligatorio, pero solo si se ha establecido la marca "CreateNewChild".

La pregunta es, ¿cómo hago un parámetro obligatorio, pero solo si se ha especificado otro parámetro?

OK, he estado jugando con eso. Y esto funciona:

param( [Parameter(ParameterSetName="one")] [switch]$DoNotCreateNewChild, [string]$KeyPath, [string]$Name, [string]$NewValue, [Parameter(ParameterSetName="two")] [switch]$CreateNewChild, [Parameter(ParameterSetName="two",Mandatory=$true)] [string]$PropertyType )

Sin embargo, esto significa que $ KeyPath, $ Name y $ NewValue ya no son obligatorios. Si se configura el parámetro "uno" en obligatorio, se rompe el código ( "el conjunto de parámetros no se puede resolver" error). Estos conjuntos de parámetros son confusos. Estoy seguro de que hay una manera, pero no puedo averiguar cómo hacerlo.