mayho33
Goto Top

Powershell 5.x Custom-Enum-Parameter mit TAB verfügbar machen

Hi @ All

Bestimmt haben es einige schon erlebt; Da will man das neue (schon wieder alte) PoSe5-Feature >>> Enums <<< verwenden, bastelt sich eines und wundert sich dann, weil es kein Intelisence gibt.

Bekannter Typ:

enum

Custom:

enum  2

Scheint offensichtlich nur bei bekannten Typen zu funktionieren.

Weil mich das aber ziemlich nerft und stundenlange Suche im INet nicht wirklich zum erwünschten Erfolg geführt hat, habe ich angefangen zu spielen und tatsächlich eine Lösung gefunden. Der eine oder andere wird sie schon kennen, aber ich denke es gibt viele Unwissende wie mich, die vielleicht froh sind um diesen Tipp:

Was ist zu tun?

Zuerst ein schönes Enum ausdenken. Ich brauchte eines um eine XML mit 1000en ErrorCodes zu filtern die in Klassen aufgeteilt sind
Damit das Enum mit Tab bzw. Intelisence verfügbar gemacht werden kann muss im Kopf des Script sowas gemacht werden:
if($null -eq $ENUM_ERROR_TYPES) {
    Add-Type -TypeDefinition @'  
    namespace ENUMS
    {
        public enum ERROR_TYPES
        {
            STANDARD = 1,
            ROBOCOPY = 2,
            REG = 4,
            SAP = 8,
            PNPUTIL = 16,
            ORACLE = 32,
            PRINTMGMT = 64,
            LENOVOBIOS = 128
        }
    }
'@ -Language CSharp -ErrorAction SilentlyContinue  
    $ENUM_ERROR_TYPES = [ENUMS.ERROR_TYPES]
}


Anschließend die Function:

Function Get-ErrorTypes() {
    [CmdletBinding()]
    Param 
    (
        [Parameter(Position = 0, Mandatory=$true)] 
            [ENUMS.ERROR_TYPES]$ErrorTypes
    )

    #....
    #....
}

Und zur Laufzeit schaut es dann so aus:

enum  3


Was ist der Benefit eines [Enum] gegenüber eines [ValidateSet()]?

Man muss es nur 1x definieren und kann es so oft wie man will verwenden. Man muss nur die paar Zeilen im Parameter definieren. Kein 100-faches Copy'n'Paste bei Änderungen. Einfach nur 1x das Enum anpassen. Fertig!


Beste Grüße!

Mayho

Content-Key: 634224

Url: https://administrator.de/contentid/634224

Printed on: May 22, 2024 at 13:05 o'clock