Question [Fonction] Gestion des énumérations .NET

Plus d'informations
il y a 18 ans 2 semaines #1836 par Laurent Dardenne
Au lieu de déclarer des constantes système comme par exemple :
[code:1]Set-Variable ACETYPE_ACCESS_ALLOWED -value 0 -option constant -scope Script[/code:1]
Il est préférable de manipuler directement les énumérations .NET lorsqu'elles existent.

Pour récupérer un nom d'aprés une valeur :
[code:1]Function Get-EnumName
{ #Renvoi le nom d'un membre d'une énumération
# Ex : Get-EnumName ([TYPE][System.Security.AccessControl.AceFlags]) 2
param ([Type]$Type , [byte] $Valeur )
[System.Enum]::GetName($Type,$Valeur)
}[/code:1]
Pour récupérer une valeur d'aprés un nom :
[code:1]Function Get-EnumValue
{ #Renvoi la valeur d'un membre d'une énumération
#Sensible à la casse
# Ex 1 : Get-EnumValue ([TYPE][System.Security.AccessControl.AceFlags]) \"ContainerInherit\"
# Ex 2 :
# Récupère le type de l'énumération
# [Type] $Tf=[System.Security.AccessControl.AceFlags]
# Get-EnumValue $Tf \"ContainerInherit\"
param ([Type]$Type , [String] $Nom )
([System.Enum]::«»Parse($Type,$Nom)).value__
}[/code:1]
[Type] permet de récupérer le type d'une classe .NET, cette information est nécessaire pour utiliser le système de réflexion.

Tutoriels PowerShell

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

Plus d'informations
il y a 18 ans 1 semaine #1872 par Arnaud Petitjean
Très intéressant...

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

Plus d'informations
il y a 18 ans 1 semaine #1876 par Laurent Dardenne
Arnaud écrit:

Très intéressant...

Je suis tombé sur un exemple \"à la PowerShell\", comme la documentation sur ce langage fait qq fois défaut, j'ai creusé le sujet.
Donc uu lieu de calquer sur le C#, voici ce que cela donne :
[code:1]
[int]$TypeAce =[System.Security.AccessControl.AceType]\"AccessDenied\"
$TypeAce
[/code:1]
Renvoi 1
[code:1]
$NomType=\"AccessDenied\"
[int]$TypeAce =[System.Security.AccessControl.AceType]$NomType
$TypeAce
[/code:1]
Renvoi 1
[code:1]
[String]$TypeAce =[System.Security.AccessControl.AceType]1
[/code:1]
Renvoi AccessDenied
[code:1]
$AccessMask = [System.Security.AccessControl.FileSystemRights]\"ReadAndExecute, Synchronize\"
[/code:1]
Renvoi ReadAndExecute, Synchronize
[code:1]
$s=\"ReadAndExecute, Synchronize\"
$AccessMask = [System.Security.AccessControl.FileSystemRights]$s
$AccessMask
[/code:1]
Renvoi ReadAndExecute, Synchronize
[code:1]
[int]$AccessMask = [System.Security.AccessControl.FileSystemRights]$s
\"{0:«»x}\" -f $AccessMask
[/code:1]
Renvoi 1200a9
[code:1]
[String]$AccessMask = [System.Security.AccessControl.FileSystemRights] $AccessMask
$AccessMask
[/code:1]
Renvoi ReadAndExecute, Synchronize
La déclaration du type documente le code mais on peut s'en passer.
En revanche ceci n'est pas possible
[code:1]
[type] $T=[System.Security.AccessControl.AceType]
[int]$TypeAce =$T$nomtypes
[/code:1]
Et ce n'est peut être pas plus mal ;-)
[edit]
Ceci fonctionne :
[code:1][int]$TypeAce =$T::$nomtypes[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 1/12/08 14:48

Tutoriels PowerShell

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

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