====== Eigene Klassen ======
class TestKlasse{
[string]$Eigenschaft
[int]$ZweiteEigenschaft
}
Diese Art der Definition kann man jetzt überall in Powershell ((ab Version 5)) 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
[[https://www.heise.de/developer/artikel/Klassendefinition-in-PowerShell-5-0-mit-dem-neuen-Schluesselwort-class-2369638.html|Quelle]]
[[https://www.kaufmann-24.de/index.php?controller=post&action=view&id_post=9|Eigener Blogpost zum Thema]]
{{tag>[Powershell Klasse class]}}