Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

powershell:eigeneklassen

Eigene Klassen

class TestKlasse{
  [string]$Eigenschaft
  [int]$ZweiteEigenschaft
}

Diese Art der Definition kann man jetzt überall in Powershell 1) anwenden und somit seine eigenen Datenkonstrukte erzeugen.

Ein neues Objekt erzeugt man dann so:

$object = New-Object -TypeName TestKlasse

Ein $object | Get-Member zeigt anschließend wie erwartet alle definierten Eigenschaften an:

PS C:\> $object | Get-Member
 
   TypeName: TestKlasse
 
Name              MemberType Definition
----              ---------- ----------
Equals            Method     bool Equals(System.Object obj)
GetHashCode       Method     int GetHashCode()
GetType           Method     type GetType()
ToString          Method     string ToString()
Eigenschaft       Property   string Eigenschaft {get;set;}
ZweiteEigenschaft Property   int ZweiteEigenschaft {get;set;}

Vorteil dieser Methode ist, dass man in selbstgeschriebenen Funktionen nun sicherstellen kann, dass auch komplexe Datentypen angefordert und erkannt werden können:

function Test-Something{
  [CmdletBinding()]
  param(
    [Parameter(Mandatory=$true)]$TestKlasse
  )
  begin{
    if (($TestKlasse | Get-Member).TypeName -ne "TestKlasse"){
      throw "Falscher Datentyp"
    }
  }
  process{
    #do something
  }
  end{}
}

Leider geht es (zumindest im Moment) noch nicht intuitiver:

Doch, genau so geht es - ich vermute, dass die Powershell hier auf Groß-/Kleinschreibung achtet…

  [Parameter(Mandatory=$true)][TestKlasse]$TestKlasse

Quelle

Eigener Blogpost zum Thema

1)
ab Version 5
powershell/eigeneklassen.txt · Zuletzt geändert: 2018/05/03 09:34 von ronny