Ho una funzione di PowerShell che modifica i valori delle chiavi del Registro di sistema. Codice:I parametri obbligatori di PowerShell dipendono da altri parametri
param(
[Parameter()] [switch]$CreateNewChild,
[Parameter(Mandatory=$true)] [string]$PropertyType
)
Ha un parametro "CreateNewChild", e se è impostato che la bandiera, la funzione creerà la proprietà chiave, anche se si wa non trovato. Il parametro "PropertyType" deve essere obbligatorio, ma solo se è stato impostato il flag "CreateNewChild".
La domanda è, come rendere obbligatorio un parametro, ma solo se è stato specificato un altro parametro?
OK, ci ho giocato un po '. E questo funziona:
param
([Parameter(ParameterSetName="one")]
[switch]$DoNotCreateNewChild, [string]$KeyPath, [string]$Name, [string]$NewValue, [Parameter(ParameterSetName="two")]
[switch]$CreateNewChild, [Parameter(ParameterSetName="two",Mandatory=$true)]
[string]$PropertyType
)
Tuttavia, questo significa che $ KeyPath, $ nome e $ NewValue non sono più obbligatori. L'impostazione del parametro "uno" su obbligatorio interrompe il codice (il set di parametri non può essere risolto). Questi set di parametri sono confusi. Sono sicuro che c'è un modo, ma non riesco a capire come farlo
Ho provato questo, ecco il codice: 'param ( [parametri (posizione = 0, Mandatory = $ true) ] [stringa] $ KeyPath, [Parametro (Posizione = 1, Obbligatorio = $ true)] [stringa] $ Nome, [Parametro (Posizione = 2, Obbligatorio = $ vero)] [stringa] $ NuovoValore, [Parametro (ParameterSetName = "One")] [switch] $ CreateNewChild, [Parametro (ParameterSetName = " Uno ", Obbligatorio = $ vero)] [stringa] $ PropertyType ) ' Tuttavia, questo non funziona. Quando si tenta di eseguire quanto segue: 'Set-RegistryKeyPropertyValue -KeyPath $ percorso -Nome $ nome -NuovoValore 0' Mi chiede di fornire il valore per $ PropertyType, poiché è obbligatorio – lime
Spiacente, avrei dovuto essere più specifico. Ho aggiunto un esempio migliore alla risposta sopra. :) –
Sì, questo è esattamente quello che stavo cercando! Grazie! p.s. L'unica opzione che non ho provato a rendere obbligatorio "$ Favorite" = $ false, ho pensato che fosse falso per impostazione predefinita. Questo parametro di logica è strano ... – lime