Powershell Enumeration zu unbekannten Typ ermitteln


Wenn man beim Durchstöbern von verschiedenen Daten aus Powershellobjekten auf einmal an einem Enumerationstyp landet, wie z. B. diesen hier:

IsPublic IsSerial Name             BaseType
——– ——– —-             ——–
True     True     ImageHealthState System.Enum

Dann fragt man sich, was könnten die anderen Werte noch sein? Wie kommt an die anderen Werte, wenn Google nichts brauchbares liefert und die Werte scheinbar nirgends offiziell dokumentiert sind?

In so einem Fall hilft die ausführliche Ausgabe mittels Format-List:

PS C:\> $h.ImageHealthState.GetType()| fl *

Module                : Microsoft.Dism.PowerShell.dll
Assembly              : Microsoft.Dism.PowerShell, Version=6.3.0.0,Culture=neutral, PublicKeyToken=null
TypeHandle            : System.RuntimeTypeHandle
DeclaringMethod       :
BaseType              : System.Enum
UnderlyingSystemType  : Microsoft.Dism.Commands.ImageHealthState
FullName              : Microsoft.Dism.Commands.ImageHealthState
AssemblyQualifiedName : Microsoft.Dism.Commands.ImageHealthState,                            Microsoft.Dism.PowerShell, Version=6.3.0.0,                            Culture=neutral, PublicKeyToken=null
Namespace              : Microsoft.Dism.Commands
GUID                   : eea8dbef-fb34-3b75-8b86-c80dcd47dd53
IsEnum                     : True
GenericParameterAttributes :
IsSecurityCritical         : True
IsSecuritySafeCritical     : False
IsSecurityTransparent      : False
IsGenericTypeDefinition    : False
IsGenericParameter         : False
GenericParameterPosition   :
IsGenericType              : False
IsConstructedGenericType   : False
ContainsGenericParameters  : False
StructLayoutAttribute      : System.Runtime.InteropServices.StructLayoutAttribu
                             te
Name                       : ImageHealthState
MemberType                 : TypeInfo
DeclaringType              :
ReflectedType              :
MetadataToken              : 33554456
GenericTypeParameters      : {}
DeclaredConstructors       : {}
DeclaredEvents             : {}
DeclaredFields             : {value__, Healthy, Repairable, NonRepairable}
DeclaredMembers            : {value__, Healthy, Repairable, NonRepairable}
DeclaredMethods            : {}
DeclaredNestedTypes        : {}
DeclaredProperties         : {}
ImplementedInterfaces      : {System.IComparable, System.IFormattable,
                             System.IConvertible}
TypeInitializer            :
IsNested                   : False
Attributes                 : AutoLayout, AnsiClass, Class, Public, Sealed
IsVisible                  : True
IsNotPublic                : False
IsPublic                   : True
IsNestedPublic             : False
IsNestedPrivate            : False
IsNestedFamily             : False
IsNestedAssembly           : False
IsNestedFamANDAssem        : False
IsNestedFamORAssem         : False
IsAutoLayout               : True
IsLayoutSequential         : False
IsExplicitLayout           : False
IsClass                    : False
IsInterface                : False
IsValueType                : True
IsAbstract                 : False
IsSealed                   : True
IsSpecialName              : False
IsImport                   : False
IsSerializable             : True
IsAnsiClass                : True
IsUnicodeClass             : False
IsAutoClass                : False
IsArray                    : False
IsByRef                    : False
IsPointer                  : False
IsPrimitive                : False
IsCOMObject                : False
HasElementType             : False
IsContextful               : False
IsMarshalByRef             : False
GenericTypeArguments       : {}

Bei obiger Auflistung taucht der Fullname auf. Kürzer gehts mit

($h.ImageHealthState.GetType()).Fullname

Diesen Namen kann man verwenden, um die anderen Enumerationsnamen auflisten zu lassen:

PS C:\>
[Microsoft.Dism.Commands.ImageHealthState].GetEnumNames()
Healthy
Repairable
NonRepairable

3 Antworten to “Powershell Enumeration zu unbekannten Typ ermitteln”

  1. Quirel Says:

    und wer zu obigen Namen noch die Werte sehen möchte, der kann

    ([System.Enum]::GetValues([Microsoft.Dism.Commands.ImageHealthState])).value__

    verwenden

  2. Quirel Says:

    aber noch schöner ist diese Ausgabe:

    [System.Enum]::GetValues([Microsoft.Dism.Commands.ImageHealthState]) | select @{N=“Name“;e={„$_“}},value__

    Name value__
    —- ——-
    Healthy 0
    Repairable 1
    NonRepairable 2

  3. Quirel Says:

    Um nur einfach die verfügbaren Werte zu sehen, kann man auch dieses Konstrukt verwenden:

    [Microsoft.Dism.Commands.ImageHealthState].GetEnumNames()
    Healthy
    Repairable
    NonRepairable

    [Microsoft.Dism.Commands.ImageHealthState].GetEnumValues().value__
    0
    1
    2

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s


%d Bloggern gefällt das: