PowerShell eigene Objekte
PowerShell Cmdlets erzeugen sehr oft ein Objekt oder ein Object-Array (mehrere Objekte in einem Array). In diesem Beitrag zeige ich, wie Objekte selbst erstellt und Eigenschaften hinzugefügt werden können.
was ist ein Objekt?
Ein Objekt besitzt bestimmte Eigenschaften und Methoden. Als Beispiel für ein Objekt nehme ich mal einen Server. Die IP Adresse und der Hostname sind Eigenschaften des Servers und somit des Objektes. Mit Methoden kann am Objekt etwas geändert werden. Eine Methode für einen Server könnte zum Beispiel ein Neustart sein.
Erstellen eines Objekts
Ein neues Objekt kann in PowerShell mit folgendem Befehl erstellt werden:
$server = New-Object -TypeName PSObject
Eigenschaften hinzufügen
Eigenschaften können mit dem Befehl "Add-Member" zum Objekt hinzugefügt werden:
$server | Add-Member -Name "IP" -MemberType Noteproperty -Value $ip
$server | Add-Member -Name "FQDN" -MemberType Noteproperty -Value "$((Resolve-DnsName $ip).NameHost)"
Objekt zu einem Array hinzufügen
Um mehrere Server zu verwalten könnten diese in einem Array zusammengefasst werden. Ich nenne das Array mal $servers
, ein einzelnes Server-Objekt: $server
Mit folgenden Befehl kann ein Array für unsere Server-Objekte erstellt werden:
$servers = @()
Um also einen Server zu den Servern hinzuzufügen, kann folgender Befehl verwendet werden:
$servers += $server
Mehrere Objekte in einer Schleife (Loop)
Einfache Schleife um mehrere IP-Adressen aufzurufen:
1..5 | foreach {
$ip="192.168.0.$_"
}
die Variable $_
wird mit den Werten 1-5 also 1,2,3,4,5 befüllt:
Hinzufügen der Objekte:
$servers = @()
1..5 | foreach
{
$ip="192.168.0.$_"
$server = New-Object -TypeName PSObject
$server | Add-Member -Name "IP" -MemberType Noteproperty -Value $ip
$server | Add-Member -Name "FQDN" -MemberType Noteproperty -Value "$((Resolve-DnsName $ip).NameHost)"
$servers += $server
}
Alle Eigenschaften der Objekte anzeigen
befinden sich mehrere Server-Objekte in dem Array, kann z.B. eine Tabelle aller Server und deren Eigenschaften angezeigt werden:
$servers | Out-GridView
Ausnahmen
nur bestimmte Objekte eines Objekt-Array:
$except=@("Einstellungen","Store")
Get-Process | Where-Object {
$except -notcontains $_.MainWindowTitle
}
Objekt umwandeln
Um ein beliebiges Object-Array in ein anderes umzuwandeln, kann die Ausgabe in eine foreach-Schleife geleitet werden und die Objekte und deren Eigenschaften neu gesetzt werden:
$object | foreach {
[PSCustomObject]@{
key1 = $_.name
key2 = $_.name2
}

{{percentage}} % positiv

DANKE für deine Bewertung!
Fragen / Kommentare
(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]
User: Dennis Hi, im Falle von $server=@() wird mit hinzufügen durch $server+= usw leider immer ein neues Object erzeugt. Das ist sehr langsam und auch verschwendung. Die Lösung ist: $server = New-Object System.Collections.ArrayList jetzt kann mit add oder += hinzugefügt werden ohne den lästigen Nachteil...