Informacje o tworzeniu obiektówAbout Object Creation

Krótki opisShort description

Wyjaśnia sposób tworzenia obiektów w programie PowerShell.Explains how to create objects in PowerShell.

Długi opisLong description

Możesz tworzyć obiekty w programie PowerShell i używać obiektów tworzonych w poleceniach i skryptach.You can create objects in PowerShell and use the objects that you create in commands and scripts.

Istnieje wiele sposobów tworzenia obiektów, ta lista nie jest ostateczna:There are many ways to create objects, this list is not definitive:

  • New-Object: tworzy wystąpienie obiektu .NET Framework lub obiektu com.New-Object: Creates an instance of a .NET Framework object or COM object.
  • Import-CSV / ConvertFrom-CSV: tworzy obiekty niestandardowe ( parametr PSCustomObject ) z elementów zdefiniowanych jako wartości rozdzielane przecinkami.Import-Csv/ ConvertFrom-CSV: Creates custom objects ( PSCustomObject ) from the items defined as comma separated values.
  • ConvertFrom-JSON: tworzy obiekty niestandardowe zdefiniowane w JavaScript Object Notation (JSON).ConvertFrom-Json: Creates custom objects defined in JavaScript Object Notation (JSON).
  • ConvertFrom-StringData: tworzy obiekty niestandardowe zdefiniowane jako pary klucza wartości.ConvertFrom-StringData: Creates custom objects defined as key value pairs.
  • Dodaj typ: umożliwia zdefiniowanie klasy w sesji programu PowerShell, z którą można utworzyć wystąpienie New-Object .Add-Type: Allows you to define a class in your PowerShell session that you can instantiate with New-Object.
  • New-module: parametr AsCustomObject tworzy niestandardowy obiekt definiowany przy użyciu bloku skryptu.New-Module: The AsCustomObject parameter creates a custom object you define using script block.
  • Add-member: dodaje właściwości do istniejących obiektów.Add-Member: Adds properties to existing objects. Możesz użyć Add-Member , aby utworzyć niestandardowy obiekt spoza typu prostego, takiego jak [System.Int32] .You can use Add-Member to create a custom object out of a simple type, like [System.Int32].
  • Select-Object: wybiera właściwości obiektu.Select-Object: Selects properties on an object. Za pomocą Select-Object programu można tworzyć niestandardowe i obliczeniowe właściwości dla obiektu, który został już utworzony.You can use Select-Object to create custom and calculated properties on an already instantiated object.

W tym artykule omówiono następujące dodatkowe metody:The following additional methods are covered in this article:

  • Wywołując Konstruktor typu za pomocą metody statycznej new()By calling a type's constructor using a static new() method
  • Według typecastingych tablic skrótów nazw właściwości i wartości właściwościBy typecasting hash tables of property names and property values

Static New () — MetodaStatic new() method

Wszystkie typy .NET mają new() metodę, która umożliwia łatwiejsze Konstruowanie wystąpień.All .NET types have a new() method that allows you to construct instances more easily. Można także zobaczyć wszystkie dostępne konstruktory dla danego typu.You can also see all the available constructors for a given type.

Aby wyświetlić konstruktory dla typu, należy określić new nazwę metody po nazwie typu i nacisnąć klawisz <ENTER> .To see the constructors for a type, specify the new method name after the type name and press <ENTER>.

[System.Uri]::new
OverloadDefinitions
-------------------
uri new(string uriString)
uri new(string uriString, bool dontEscape)
uri new(uri baseUri, string relativeUri, bool dontEscape)
uri new(string uriString, System.UriKind uriKind)
uri new(uri baseUri, string relativeUri)
uri new(uri baseUri, uri relativeUri)

Teraz można utworzyć System. URI , określając odpowiedni Konstruktor.Now, you can create a System.Uri by specifying the appropriate constructor.

[System.Uri]::new("https://www.bing.com")
AbsolutePath   : /
AbsoluteUri    : https://www.bing.com/
LocalPath      : /
Authority      : www.bing.com
...

Możesz użyć poniższego przykładu, aby określić, które typy .NET są aktualnie ładowane, aby można było utworzyć wystąpienie.You can use the following sample to determine what .NET types are currently loaded for you to instantiate.

[AppDomain]::CurrentDomain.GetAssemblies() |
  ForEach-Object {
    $_.GetExportedTypes() |
      ForEach-Object { $_.FullName }
  }

Obiekty utworzone za pomocą new() metody mogą nie mieć takich samych właściwości jak obiekty tego samego typu, które są tworzone przez polecenia cmdlet programu PowerShell.Objects created using the new() method may not have the same properties as objects of the same type that are created by PowerShell cmdlets. Polecenia cmdlet programu PowerShell, dostawcy i system typów rozszerzonych mogą dodawać do wystąpienia dodatkowe właściwości.PowerShell cmdlets, providers, and Extended Type System can add extra properties to the instance.

Na przykład dostawca systemu plików w programie PowerShell dodaje sześć wartości NoteProperty do obiektu DirectoryInfo zwróconego przez Get-Item .For example, the FileSystem provider in PowerShell adds six NoteProperty values to the DirectoryInfo object returned by Get-Item.

$PSDirInfo = Get-Item /
$PSDirInfo | Get-Member | Group-Object MemberType | Select-Object Count, Name
Count Name
----- ----
    4 CodeProperty
   13 Property
    6 NoteProperty
    1 ScriptProperty
   18 Method

W przypadku bezpośredniego tworzenia obiektu DirectoryInfo nie ma on sześciu wartości NoteProperty .When you create a DirectoryInfo object directly, it does not have those six NoteProperty values.

$NewDirInfo = [System.IO.DirectoryInfo]::new('/')
$NewDirInfo | Get-Member | Group-Object MemberType | Select-Object Count, Name
Count Name
----- ----
    4 CodeProperty
   13 Property
    1 ScriptProperty
   18 Method

Aby uzyskać więcej informacji na temat systemu typu rozszerzonego, zobacz about_Types.ps1XML.For more information about the Extended Type System, see about_Types.ps1xml.

Ta funkcja została dodana w programie PowerShell 5,0This feature was added in PowerShell 5.0

Tworzenie obiektów na podstawie tablic skrótówCreate objects from hash tables

Można utworzyć obiekt z tabeli skrótów właściwości i wartości właściwości.You can create an object from a hash table of properties and property values.

Składnia wygląda następująco:The syntax is as follows:

[<class-name>]@{
  <property-name>=<property-value>
  <property-name>=<property-value>
}

Ta metoda działa tylko dla klas, które mają konstruktora bez parametrów.This method works only for classes that have a parameterless constructor. Właściwości obiektu muszą być publiczne i settable.The object properties must be public and settable.

Ta funkcja została dodana w programie PowerShell w wersji 3,0This feature was added in PowerShell version 3.0

Tworzenie obiektów niestandardowych na podstawie tabel skrótówCreate custom objects from hash tables

Obiekty niestandardowe są bardzo przydatne i można je łatwo tworzyć przy użyciu metody tablic skrótów.Custom objects are very useful and are easy to create using the hash table method. Klasa parametr PSCustomObject została zaprojektowana specjalnie do tego celu.The PSCustomObject class is designed specifically for this purpose.

Obiekty niestandardowe są doskonałym sposobem zwracania dostosowanych danych wyjściowych z funkcji lub skryptu.Custom objects are an excellent way to return customized output from a function or script. Jest to bardziej przydatne niż zwracanie sformatowanych danych wyjściowych, które nie mogą być ponownie sformatowane lub przekazywane do innych poleceń.This is more useful than returning formatted output that cannot be reformatted or piped to other commands.

Polecenia w Test-Object function ustawić pewne wartości zmiennych, a następnie używają tych wartości do utworzenia niestandardowego obiektu.The commands in the Test-Object function set some variable values and then use those values to create a custom object. Ten obiekt można zobaczyć w sekcji przykład Update-Help tematu pomocy polecenia cmdlet.You can see this object in use in the example section of the Update-Help cmdlet help topic.

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
  }
}
Test-Object

Dane wyjściowe tej funkcji to kolekcja niestandardowych obiektów sformatowana domyślnie jako tabela.The output of this function is a collection of custom objects formatted as a table by default.

ModuleName        UICulture      Version
---------         ---------      -------
PSScheduledJob    en-us          3.1.0.0
PSWorkflow        en-us          3.0.0.0

Użytkownicy mogą zarządzać właściwościami obiektów niestandardowych tak samo jak w przypadku obiektów standardowych.Users can manage the properties of the custom objects just as they do with standard objects.

(Test-Object).ModuleName
 PSScheduledJob
 PSWorkflow

Tworzenie nieniestandardowych obiektów z tabel skrótówCreate non-custom objects from hash tables

Można również użyć tabel skrótów do tworzenia obiektów dla klas nieniestandardowych.You can also use hash tables to create objects for non-custom classes. Podczas tworzenia obiektu dla nieniestandardowej klasy, wymagana jest nazwa typu kwalifikowana przestrzeń nazw, chociaż można pominąć dowolny początkowy składnik przestrzeni nazw systemu .When you create an object for a non-custom class, the namespace-qualified type name is required, although you may omit any initial System namespace component.

Na przykład następujące polecenie tworzy obiekt opcji sesji.For example, the following command creates a session option object.

[System.Management.Automation.Remoting.PSSessionOption]@{
  IdleTimeout=43200000
  SkipCnCheck=$True
}

Wymagania funkcji tabeli skrótów, szczególnie wymagania konstruktora bez parametrów, eliminują wiele istniejących klas.The requirements of the hash table feature, especially the parameterless constructor requirement, eliminate many existing classes. Jednak większość klas opcji programu PowerShell jest przeznaczona do pracy z tą funkcją, a także z innymi bardzo przydatnymi klasami, takimi jak Klasa startowych .However, most PowerShell option classes are designed to work with this feature, as well as other very useful classes, such as the ProcessStartInfo class.

[System.Diagnostics.ProcessStartInfo]@{
  CreateNoWindow="$true"
  Verb="run as"
}
Arguments               :
ArgumentList            : {}
CreateNoWindow          : True
EnvironmentVariables    : {OneDriveConsumer, PROCESSOR_ARCHITECTURE,
                           CommonProgramFiles(x86), APPDATA...}
Environment             : {[OneDriveConsumer, C:\Users\user1\OneDrive],
                           [PROCESSOR_ARCHITECTURE, AMD64],
                           [CommonProgramFiles(x86),
                           C:\Program Files (x86)\Common Files],
                           [APPDATA, C:\Users\user1\AppData\Roaming]...}
RedirectStandardInput   : False
RedirectStandardOutput  : False
RedirectStandardError   : False
...

Można również użyć funkcji tabeli skrótów podczas ustawiania wartości parametrów.You can also use the hash table feature when setting parameter values. Na przykład wartość parametru SessionOption New-PSSession .For example, the value of the SessionOption parameter of the New-PSSession. polecenie cmdlet może być tabelą skrótów.cmdlet can be a hash table.

New-PSSession -ComputerName Server01 -SessionOption @{
  IdleTimeout=43200000
  SkipCnCheck=$True
}
Register-ScheduledJob Name Test -FilePath .\Get-Inventory.ps1 -Trigger @{
  Frequency="Daily"
  At="15:00"
}

Obiekty ogólneGeneric objects

Można również tworzyć obiekty ogólne w programie PowerShell.You can also create generic objects in PowerShell. Typy ogólne to klasy, struktury, interfejsy i metody, które mają symbole zastępcze (parametry typu) dla jednego lub kilku typów, które są przez nie przechowywane lub używane.Generics are classes, structures, interfaces, and methods that have placeholders (type parameters) for one or more of the types that they store or use.

Poniższy przykład tworzy obiekt słownika .The following example creates a Dictionary object.

$dict = New-Object 'System.Collections.Generic.Dictionary[String,Int]'
$dict.Add("One", 1)
$dict
Key Value
--- -----
One     1

Aby uzyskać więcej informacji na temat typów ogólnych, zobacz typy ogólne w programie .NET.For more information on Generics, see Generics in .NET.

Zobacz teżSee also

about_Objectsabout_Objects

about_Methodsabout_Methods

about_Propertiesabout_Properties

about_Pipelinesabout_Pipelines

about_Types.ps1XMLabout_Types.ps1xml