about_Object_Creation
Letzte Aktualisierung: August 2012
Betrifft: Windows PowerShell 2.0, Windows PowerShell 3.0
THEMA
about_Object_Creation
KURZE BESCHREIBUNG
Beschreibt das Erstellen von Objekten in Windows PowerShell®.
LANGE BESCHREIBUNG
Sie können in Windows PowerShell Objekte erstellen und diese Objekte in Befehlen und Skripts verwenden.
Objekte können mit verschiedenen Methoden erstellt werden:
– New-Object: Das Cmdlet New-Object erstellt eine Instanz eines .NET Framework- oder COM-Objekts.
– Hashtabellen: Ab Windows PowerShell 3.0 können Sie Objekte aus Hashtabellen mit Eigenschaftsnamen und -werten erstellen.
– Import-Csv: Das Cmdlet Import-Csv erstellt aus den Elementen einer CSV-Datei benutzerdefinierte Objekte (PSCustomObject). Jede Zeile ist eine Objektinstanz und jede Spalte eine Objekteigenschaft.
Diese Methoden werden in diesem Thema besprochen.
NEW-OBJECT
Das Cmdlet New-Object stellt eine solide und einheitliche Methode für die Objekterstellung bereit. Das Cmdlet funktioniert mit nahezu allen Typen und allen unterstützten Versionen von Windows PowerShell.
Zur Erstellung eines neuen Objekts geben Sie entweder den Typ einer .NET Framework-Klasse oder die ProgID eines COM-Objekts an.
Der folgende Befehl erstellt zum Beispiel ein Version-Objekt.
PS C:\>$v = New-Object -TypeName System.Version -ArgumentList 2.0.0.1
PS C:\>$v
Major Minor Build Revision
----- ----- ----- --------
2 0 0 1
PS C:\>$v | Get-Member
TypeName: System.Version
...
Weitere Informationen finden Sie im Hilfethema zum Cmdlet New-Object.
ERSTELLEN VON OBJEKTEN AUS HASHTABELLEN
Ab Windows PowerShell 3.0 können Sie ein Objekt auch aus einer Hashtabelle mit Eigenschaftsnamen und -werten erstellen.
Die Syntax lautet wie folgt:
[<class-name>]@{<property-name>=<property-value>;<property-name>=<property-value>}
Diese Methode funktioniert nur bei Klassen mit einem Null-Konstruktor, d. h. einem Konstruktor, der keine Parameter enthält. Die Objekteigenschaften müssen öffentlich und einstellbar sein.
ERSTELLEN BENUTZERDEFINIERTER OBJEKTE AUS HASHTABELLEN
Benutzerdefinierte Objekte sind sehr nützlich und mithilfe einer Hashtabelle recht einfach zu erstellen. Zur Erstellung eines benutzerdefinierten Objekts verwenden Sie die Klasse PSCustomObject, die speziell für diesen Zweck entwickelt wurde.
Mithilfe benutzerdefinierter Objekte lässt sich aus einer Funktion oder einem Skript hervorragend eine angepasste Ausgabe zurückgeben. Eine Ausgabe mit dieser Methode ist wesentlich praktischer als die Rückgabe einer formatierten Ausgabe, die weder umformatiert noch an andere Befehle weitergeleitet werden kann.
Die Befehle der Funktion Test-Object legen einige Variablenwerte fest und verwenden diese Werte dann zur Erstellung eines benutzerdefinierten Objekts. (Die Verwendung dieses Objekts sehen Sie im Beispielabschnitt des Hilfethemas zum Cmdlet Update-Help.)
function Test-Object
{ $ModuleName = "PSScheduledJob"
$HelpCulture = "en-us"
$HelpVersion = "3.1.0.0"
[PSCustomObject]@{"ModuleName"=$ModuleName; "UICulture"=$HelpCulture; "Version"=$HelpVersion}
$ModuleName = "PSWorkflow"
$HelpCulture = "en-us"
$HelpVersion = "3.0.0.0"
[PSCustomObject]@{"ModuleName"=$ModuleName; "UICulture"=$HelpCulture; "Version"=$HelpVersion}
}
Die Ausgabe dieser Funktion ist eine Dateigruppe aus benutzerdefinierten Objekten, die standardmäßig als Tabelle formatiert ist.
PS C:\>Test-Object
ModuleName UICulture Version
--------- --------- -------
PSScheduledJob en-us 3.1.0.0
PSWorkflow en-us 3.0.0.0
Die Benutzer können die Eigenschaften benutzerdefinierter Objekte genauso wie die Eigenschaften von Standardobjekten verwalten.
PS C:\>(Test-Object).ModuleName
PSScheduledJob
PSWorkflow
ERSTELLEN NICHT BENUTZERDEFINIERTER OBJEKTE AUS HASHTABELLEN
Auch zum Erstellen von Objekten für nicht benutzerdefinierte Klassen können Sie Hashtabellen verwenden. Wenn Sie ein Objekt für eine nicht benutzerdefinierte Klasse erstellen, müssen Sie den vollständigen Namen des Namespace angeben (es sei denn, die Klasse befindet sich im System-Namespace). Verwenden Sie nur die Eigenschaften der Klasse.
Der folgende Befehl erstellt zum Beispiel ein SessionOption-Objekt.
[System.Management.Automation.Remoting.PSSessionOption]@{IdleTimeout=43200000; SkipCnCheck=$True}
Die Anforderungen der Hashtabellen-Funktion, insbesondere die Voraussetzung eines Null Konstruktors, schließt von vornherein zahlreiche der vorhandenen Klassen aus. Jedoch funktionieren die meisten Optionsklassen von Windows PowerShell sowie andere sehr nützliche Klassen (z. B. die Klasse ScheduledJobTrigger) gut mit dieser Funktion.
[Microsoft.PowerShell.ScheduledJob.ScheduledJobTrigger]@{Frequency="Daily";At="15:00"}
Id Frequency Time DaysOfWeek Enabled
-- --------- ---- ---------- -------
0 Daily 6/6/2012 3:00:00 PM True
Die Hashtabellen-Funktion können Sie auch zum Festlegen von Parameterwerten verwenden. So können beispielsweise der Wert des Parameters SessionOption des Cmdlets New-PSSession und der Wert des Parameters JobTrigger des Cmdlets Register-ScheduledJob eine Hashtabelle sein.
New-PSSession -ComputerName Server01 -SessionOption @{IdleTimeout=43200000; SkipCnCheck=$True}
Register-ScheduledJob Name Test -FilePath .\Get-Inventory.ps1 -Trigger @{Frequency="Daily";At="15:00"}
IMPORT-CSV
Benutzerdefinierte Objekte können Sie auch aus den Elementen einer CSV-Datei erstellen. Wenn Sie zum Importieren der CSV-Datei das Cmdlet Import-Csv verwenden, erstellt das Cmdlet für jedes Element der Datei ein benutzerdefiniertes Objekt (PSCustomObject). Die Spaltennamen stellen die Objekteigenschaften dar.
Wenn Sie beispielsweise eine CSV-Datei mit Computerassetdaten importieren, erstellt Import-CSV aus dieser Eingabe eine Datengruppe mit benutzerdefinierten Objekten.
#In Servers.csv
AssetID, Name, OS, Department
003, Server01, Windows Server 2012, IT
103, Server33, Windows 7, Marketing
212, Server35, Windows 8, Finance
PS C:\>$a = Import-Csv Servers.csv
PS C:\>$a
AssetID Name OS Department
------- ---- -- ----------
003 Server01 Windows Server 2012 IT
103 Server33 Windows 7 Marketing
212 Server35 Windows 8 Finance
Mit dem Cmdlet Get-Member können Sie den Objekttyp überprüfen.
PS C:\>$a | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
AssetID NoteProperty System.String AssetID=003
Department NoteProperty System.String Department=IT
Name NoteProperty System.String Name=Server01
OS NoteProperty System.String OS=Windows Server 2012
Benutzerdefinierte Objekte können Sie wie Standardobjekte verwenden.
PS C:\>$a | where {$_.OS -eq "Windows 8"}
AssetID Name OS Department
------- ---- -- ----------
212 Server35 Windows 8 Finance
Weitere Informationen finden Sie im Hilfethema zum Cmdlet Import-Csv.
SIEHE AUCH
about_Objects
about_Methods
about_Properties
about_Pipelines
Get-Member
Import-Csv
New-Object