Question [fonction]New-Enum Création d'énumérations
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 14 ans 1 mois #11100
par Laurent Dardenne
Tutoriels PowerShell
[fonction]New-Enum Création d'énumérations a été créé par Laurent Dardenne
Voici une fonction permettant de créer une ou plusieurs énumérations à partir d'une hashtable :
[code:1]
Function New-Enum(
[System.Collections.IDictionary] $Enums,
[switch] $PassThru
) {
#Adapté de thepowershellguy.com/blogs/posh/archive/...-using-add-type.aspx
#Compiling of one or more enums in an assembly.
#The underlying type of the enum is always Int.
#
#example :
# $Enums=@{}
# $Enums.NiveauSeuil=@(\"Normal\",\"Critique\",\"Danger\")
# $Enums.Visibilité=@(\"Visible\",\"Masqué\")
# New-Enum $Enums
# [Visibilité]::Visible
# [NiveauSeuil]::Critique -As [int]
#
if ($Enums -eq $Null -or $Enums.Count -eq 0)
{ Write-Error \"L'énumération ne contient pas d'entrée.\"}
else
{
$Code= New-Object System.Text.StringBuilder
$Enums.GetEnumerator()|
Where {$_.Value.Count -ne 0}|
Foreach {
if ( $DebugPreference -ne \"SilentlyContinue\")
{ Write-debug \"[New-Enum] $($_.Key)\" }
[void]$Code.Append( @\"
`r`n
public enum $($_.Key) : int
{
$($_.value -join \",`r`n`t\")
}
\"@)
} #foreach
if ($Passthru)
{$Code.ToString()}
else
{
#Un seul ajout d'assembly par session,
#peut importe le nombre d'apppel de cette méthode avec une même énumération
Add-Type $Code.ToString()
}
}#else
}#New-Enum[/code:1]
Le code d'origine crée par appel un assembly pour chaque énumération, celle-ci un seul assembly pour une ou + énumérations.
Un exemple créant deux énumérations :
[code:1]
$Enums=@{}
$Enums.NiveauSeuil=@(\"Normal\",\"Critique\",\"Danger\"«»)
$Enums.Visibilité=@(\"Visible\",\"Masqué\"«»)
#renvoi le code généré
New-Enum $Enums -passthru
#Crée un assembly dynamique
New-Enum $Enums
[Visibilité]::Visible
[NiveauSeuil]::Critique -As [int]
[/code:1]
Message édité par: Laurent Dardenne, à: 12/02/12 13:06<br><br>Message édité par: Laurent Dardenne, à: 30/01/13 13:50
[code:1]
Function New-Enum(
[System.Collections.IDictionary] $Enums,
[switch] $PassThru
) {
#Adapté de thepowershellguy.com/blogs/posh/archive/...-using-add-type.aspx
#Compiling of one or more enums in an assembly.
#The underlying type of the enum is always Int.
#
#example :
# $Enums=@{}
# $Enums.NiveauSeuil=@(\"Normal\",\"Critique\",\"Danger\")
# $Enums.Visibilité=@(\"Visible\",\"Masqué\")
# New-Enum $Enums
# [Visibilité]::Visible
# [NiveauSeuil]::Critique -As [int]
#
if ($Enums -eq $Null -or $Enums.Count -eq 0)
{ Write-Error \"L'énumération ne contient pas d'entrée.\"}
else
{
$Code= New-Object System.Text.StringBuilder
$Enums.GetEnumerator()|
Where {$_.Value.Count -ne 0}|
Foreach {
if ( $DebugPreference -ne \"SilentlyContinue\")
{ Write-debug \"[New-Enum] $($_.Key)\" }
[void]$Code.Append( @\"
`r`n
public enum $($_.Key) : int
{
$($_.value -join \",`r`n`t\")
}
\"@)
} #foreach
if ($Passthru)
{$Code.ToString()}
else
{
#Un seul ajout d'assembly par session,
#peut importe le nombre d'apppel de cette méthode avec une même énumération
Add-Type $Code.ToString()
}
}#else
}#New-Enum[/code:1]
Le code d'origine crée par appel un assembly pour chaque énumération, celle-ci un seul assembly pour une ou + énumérations.
Un exemple créant deux énumérations :
[code:1]
$Enums=@{}
$Enums.NiveauSeuil=@(\"Normal\",\"Critique\",\"Danger\"«»)
$Enums.Visibilité=@(\"Visible\",\"Masqué\"«»)
#renvoi le code généré
New-Enum $Enums -passthru
#Crée un assembly dynamique
New-Enum $Enums
[Visibilité]::Visible
[NiveauSeuil]::Critique -As [int]
[/code:1]
Message édité par: Laurent Dardenne, à: 12/02/12 13:06<br><br>Message édité par: Laurent Dardenne, à: 30/01/13 13:50
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.048 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- [fonction]New-Enum Création d'énumérations