Come indicato da Christian, questo può essere eseguito tramite ParameterSetNames. Date un'occhiata a questo esempio:
function Get-MySPWeb {
[CmdletBinding(DefaultParameterSetName="set1")]
param (
[parameter(ParameterSetName="set1")] $RelativeUrl,
[parameter(ParameterSetName="set2")] $WebUrl,
[parameter(ParameterSetName="set2", Mandatory=$true)] $DisplayName
)
Write-Host ("Parameter set in action: " + $PSCmdlet.ParameterSetName)
Write-Host ("RelativeUrl: " + $RelativeUrl)
Write-Host ("WebUrl: " + $WebUrl)
Write-Host ("DisplayName: " + $DisplayName)
}
Se lo si esegue con -RelativeUrl Foo
si legherà a "SET1". Se chiami questa funzione senza parametri, si collegherà anche a "set1".
(Nota -quando parametri sono forniti in PowerShell v3 (con Win8 Consumer Preview) si legherà a "SET1", tuttavia sarà errore vincolante in PowerShell v2 se non si aggiunge [CmdletBinding(DefaultParameterSetName="set1")]
al blocco param Grazie. @ x0n per il suggerimento DefaultParameterSetName!)
Se si tenta di eseguirlo con un valore di parametro da entrambi i set, si otterrà un errore.
Se lo si esegue con -WebUrl Bar
, verrà richiesto un valore di parametro per DisplayName perché è un parametro obbligatorio.
fonte
2012-05-25 06:02:53
Questo è esattamente ciò di cui avevo bisogno! Grazie! Solo una cosa: quando eseguo questo senza parametri, ottengo un errore (ma lo volevo in questo modo). Una domanda successiva: quando si usano i parametri, si intende utilizzare switch con la variabile $ PSCmdlet.ParameterSetName, giusto? – jumbo
A destra, '$ PSCmdlet.ParameterSetName' è lì, quindi è possibile eseguire l'azione appropriata in base al set di parametri valutato dal processo di associazione dei parametri. A proposito, è interessante che tu abbia ricevuto un errore, sembra che questa sia una differenza di comportamento tra PSv2 e PSv3. –
Il trucco per farlo funzionare come v3 è usare una direttiva predefinita per i parametri. Ho modificato la tua risposta per mostrarlo. – x0n