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"
    }
$server
Result:
IP          FQDN
--          ----
192.168.1.2 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.$_"
}

1..5 | foreach {
$ip="192.168.0.$_"
write-host $ip
}
Result:
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5

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!

Aktualisiert: 10.09.2021 von Bernhard ­čöö


Top-Artikel in diesem Bereich


Windows PowerShell Skript erstellen und ausf├╝hren
Im einfachsten Fall ist ein PowerShell-Skript 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.

Windows PowerShell Befehle: commands im ├ťberblick
die verf├╝gbaren PowerShell Befehle k├Ânnen mit dem Befehl:

PowerShell Loops und Array
Ein Array speichert mehrere Werte, ├Ąhnlich einer 2 spaltigen Tabelle.

Fragen / Kommentare


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

ÔťŹanonym
20.11.2017 10:18
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...