2013-08-02 18 views
6

Lesen Sie sorgfältig, bevor Sie antworten! Ich möchte eine Ganzzahl in einen Enum-Typ umwandeln, wobei der Integer-Wert nicht wirklich in der Enumeration definiert ist. In VB.Net ist es möglich, eine beliebige Ganzzahl direkt in einen Integer-basierten Aufzählungstyp mit DirectCast zu konvertieren. Gibt es eine Möglichkeit, dies nativ in PowerShell zu erreichen?Wie kann ich in PowerShell eine ganze Zahl zu einem Aufzählungstyp zwingen?

ich dies in Powershell in tun müssen, um ein Verfahren auf einem Office-Interop Objekt aufrufen (Access.Application.SysCmd), die nimmt einen Aufzählungswert als erstes Argument (AcSysCmdAction), aber wo der tatsächliche Wert I übergeben müssen (603 für Der undokumentierte Export zu Accde-Aktion) ist nicht in der PIA-Enum-Definition enthalten. Die integrierte Typkonvertierung von PowerShell bewirkt, dass sie entweder eine Zahl oder eine Zeichenfolge in den entsprechenden Aufzählungstyp umwandelt, aber es wird kein int-Wert erzwungen, der nicht in der Aufzählung enthalten ist. Stattdessen wird eine ungültige Konvertierungsausnahme ausgelöst. Im Moment verwende ich ein dynamisch kompiliertes ScriptControl, das SysCmd über VBScript aufruft, aber ich möchte alles in PowerShell behalten, wenn es möglich ist.

+1

42! Oh, warte, lass mich das wirklich LESEN ... – Jiminion

Antwort

6

Sie können rufen Sie die EnumToObject Methode der Klasse:

$day = [Enum]::ToObject([DayOfWeek], 90) 
2

Nun, ich habe gerade einen Weg gefunden. In PowerShell scheint es, dass Enum-Objekte eine Eigenschaft namens "value__" haben, die direkt auf einen beliebigen Wert gesetzt werden kann!

#Create a variable with the desired enum type 
$ops = [System.Text.RegularExpressions.RegexOptions]0 
#Directly set the value__ property 
$ops.value__ = 3450432 
Verwandte Themen