Question [Fonction]Paramètres Switch exlusifs

Plus d'informations
il y a 16 ans 4 mois #5523 par Laurent Dardenne
Voici une fonction de gestion exclusive de switch pour une fonction ou un script.
[code:1]
function Get-ExclusifSwitch([String[]] $SwitchNames, [switch] $LeastOne){
#Gestion de switch exclusif d'une fonction ou d'un script.

#Récupère les variables switch de l'appelant
$Switchs=$SwitchNames|GV -scope 1
$CS=\"Call Stack : $(ParseStack $(Get-CallStack))\"
#Validation
if ($LeastOne)
{
if (($Switchs|% {$_.Value}|Measure-Object -property \"IsPresent\" -sum).Sum -ne 1)
{ Throw \"$CS`r`nLes switchs $([system.string]::Join(',',$SwitchNames)) sont exclusifs. Vous ne pouvez pas en spécifier plusieurs, mais au moins un.\" }
}
elseif (($Switchs|% {$_.Value}|Measure-Object -property \"IsPresent\" -sum).Sum -gt 1)
{ Throw \"$CS`r`nLes switchs $([system.string]::Join(',',$SwitchNames)) sont exclusifs. Vous ne pouvez pas en spécifier plusieurs.\" }
#Retrouve le switch précisé
switch ($Switchs)
{ {$_.Value.IsPresent} {$_.Name} }
}
[/code:1]
Un code de test
[code:1]
function ParametreSwitchExclusif([switch] $Format,
[switch] $Type,
[switch] $Assembly,
[switch] $PasExclusif){
$SwitchNames=\"Format\",\"Type\",\"Assembly\"
#Renvoi le nom du switch activé
Get-ExclusifSwitch $SwitchNames #-LeastOne
}

ParametreSwitchExclusif -format -type -assembly
ParametreSwitchExclusif -type -assembly
ParametreSwitchExclusif -assembly
ParametreSwitchExclusif -format
ParametreSwitchExclusif
#Le switch -PasExclusif n'est pas pris
#en compte si on précise -LeastOne
ParametreSwitchExclusif -PasExclusif
[/code:1]
Le switch $LeastOne permet de préciser qu'au moins un switch de la liste doit être présent lors de l'appel de la fonction.

Pour le code suivant
[code:1]
switch ($Switchs)
{ {$_.Value.IsPresent} {$_.Name} }
[/code:1]
On utilise implicitement un énumérateur sur la collection $Switchs, et pour chaque valeur on exécute un scriptblock, le résultat de son éxécution doit renvoyer un boolean.<br><br>Message édité par: Laurent Dardenne, à: 30/11/09 16:09

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 3 mois #5744 par Laurent Dardenne
Une réécriture en utilisant les possibilités de PowerShell version 2 :
[code:1]
function ParametreSwitchExclusif{
Param (
[Parameter(ParameterSetName=\&quot;Format\&quot;«»)]
[switch] $Format,
[Parameter(ParameterSetName=\&quot;Type\&quot;«»)]
[switch] $Type,
[Parameter(ParameterSetName=\&quot;Assembly\&quot;«»)]
[switch] $Assembly)

Write-Host $PsCmdlet.ParameterSetName
}

ParametreSwitchExclusif
ParametreSwitchExclusif -format -type -assembly
ParametreSwitchExclusif -type -assembly
ParametreSwitchExclusif -assembly
ParametreSwitchExclusif -format
[/code:1]
Notez qu'à partir du moment où on précise au moins deux jeux de paramètres (ParameterSet), le comportement n'est plus identique à celui du code de la version 1.
On doit préciser au moins un des trois switchs et un seul.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.052 secondes
Propulsé par Kunena