Question [Fonction]Paramètres Switch exlusifs
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 16 ans 4 mois #5523
par Laurent Dardenne
Tutoriels PowerShell
[Fonction]Paramètres Switch exlusifs a été créé 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
[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.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 16 ans 3 mois #5744
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[Fonction]Paramètres Switch exlusifs
Une réécriture en utilisant les possibilités de PowerShell version 2 :
[code:1]
function ParametreSwitchExclusif{
Param (
[Parameter(ParameterSetName=\"Format\"«»)]
[switch] $Format,
[Parameter(ParameterSetName=\"Type\"«»)]
[switch] $Type,
[Parameter(ParameterSetName=\"Assembly\"«»)]
[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.
[code:1]
function ParametreSwitchExclusif{
Param (
[Parameter(ParameterSetName=\"Format\"«»)]
[switch] $Format,
[Parameter(ParameterSetName=\"Type\"«»)]
[switch] $Type,
[Parameter(ParameterSetName=\"Assembly\"«»)]
[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.046 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- [Fonction]Paramètres Switch exlusifs