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 

Alternativ kann das Objekt auch gleich mit bestimmten Eigenschaften angelegt werden:

Erstellen eines Objects mit Eigenschaften

$server = [PSCustomObject][Ordered]@{
    "IP" = '192.168.1.2'
    "FQDN" = 'myServer.mydomain.mytld'
    }

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 in eine Hashtable umwandeln

Um ein Objekt in eine Hashtable zu konvertieren, kann eine einfache Foreach-Schleife verwendet werden:

$HashTable = @{}
$server.psobject.properties | %{ $HashTable[$_.Name] = $_.Value }

Eine Hashtable kann wiederum wie folgt zu einem Objekt umgewandelt werden:

Eine Hashtable in ein Objekt konvertieren

New-Object -ArgumentList $server -TypeName psobject

Objekt zu einem Array hinzufügen

Für das Verwalten mehrerer Server können 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 laut dem Beispiel 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
        }
positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!


veröffentlicht am 11.10.2016 von Bernhard
geändert am 10.09.2021 von Bernhard


Top-Artikel in diesem Bereich

Preview PowerShell Loops und Array

PowerShell Loops und Array

geändert: 11.11.2020 von Bernhard (Erstveröffentlichung: 21.03.2013)

Ein Array speichert mehrere Werte, ähnlich einer 2 spaltigen Tabelle. ... weiterlesen

Preview wie erstelle ich ein Windows PowerShell Skript

wie erstelle ich ein Windows PowerShell Skript

geändert: 08.09.2021 von Bernhard (Erstveröffentlichung: 28.11.2012)

Ganz einfach erklärt: Ein PowerShell-Skript ist eine Textdatei mit einer Reihe von PowerShell-Befehlen. Als PowerShell Skript versteht man eine Datei mit der Endung .ps1. Die Skriptdatei kann eine Sammlung von Befehlen, Funktionen oder Cmdlets enthalten. ... weiterlesen

Preview Windows PowerShell Befehle im Überblick

Windows PowerShell Befehle im Überblick

geändert: 12.09.2017 von Bernhard (Erstveröffentlichung: 16.11.2011)

die verfügbaren PowerShell Befehle können mit dem Befehl: ... weiterlesen


Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]

✍anonym
erstellt am 20.11.2017 10:11
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...  

Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Außerdem geben wir Informationen zu Ihrer Nutzung unserer Website an unsere Partner für soziale Medien, Werbung und Analysen weiter. Details anzeigen.