Share via


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