Question [Fonction] Gestion des énumérations .NET
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 18 ans 2 semaines #1836
par Laurent Dardenne
Tutoriels PowerShell
[Fonction] Gestion des énumérations .NET a été créé 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.
[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.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 18 ans 1 semaine #1872
par Arnaud Petitjean
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 ?
Réponse de Arnaud Petitjean sur le sujet Re:[Fonction] Gestion des énumérations .NET
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.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 18 ans 1 semaine #1876
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[Fonction] Gestion des énumérations .NET
Arnaud écrit:
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
Je suis tombé sur un exemple \"à la PowerShell\", comme la documentation sur ce langage fait qq fois défaut, j'ai creusé le sujet.Très intéressant...
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
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- [Fonction] Gestion des énumérations .NET