Udostępnij za pośrednictwem


about_Object_Creation

Krótki opis

Objaśnienie sposobu tworzenia obiektów w programie PowerShell.

Długi opis

Obiekty można tworzyć w programie PowerShell i używać obiektów tworzonych w poleceniach i skryptach.

Istnieje wiele sposobów tworzenia obiektów, ta lista nie jest ostateczna:

  • Nowy obiekt: tworzy wystąpienie obiektu .NET Framework lub obiektu COM.
  • Import-Csv/ ConvertFrom-CSV: tworzy obiekty niestandardowe (PSCustomObject) z elementów zdefiniowanych jako wartości rozdzielane przecinkami.
  • ConvertFrom-Json: Tworzy obiekty niestandardowe zdefiniowane w notacji obiektów JavaScript (JSON).
  • ConvertFrom-StringData: tworzy obiekty niestandardowe zdefiniowane jako pary wartości klucza.
  • Add-Type: umożliwia zdefiniowanie klasy w sesji programu PowerShell, którą można utworzyć za pomocą polecenia New-Object.
  • New-Module: Parametr AsCustomObject tworzy obiekt niestandardowy zdefiniowany przy użyciu bloku skryptu.
  • Add-Member: dodaje właściwości do istniejących obiektów. Możesz użyć Add-Member polecenia , aby utworzyć obiekt niestandardowy z prostego typu, na przykład [System.Int32].
  • Select-Object: wybiera właściwości obiektu. Możesz użyć Select-Object polecenia , aby utworzyć właściwości niestandardowe i obliczeniowe dla już utworzonego obiektu.

W tym artykule opisano następujące dodatkowe metody:

  • Wywoływanie konstruktora typu przy użyciu metody statycznej new()
  • Przez typecasting tabele skrótów nazw właściwości i wartości właściwości

Static new(), metoda

Wszystkie typy platformy .NET mają metodę new() , która umożliwia łatwiejsze konstruowanie wystąpień. Można również wyświetlić wszystkie dostępne konstruktory dla danego typu.

Aby wyświetlić konstruktory dla typu, określ new nazwę metody po nazwie typu i naciśnij klawisz <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żesz utworzyć identyfikator System.Uri , określając odpowiedni konstruktor.

[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ć, jakie typy platformy .NET są aktualnie ładowane do utworzenia wystąpienia.

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

Obiekty utworzone przy użyciu new() metody mogą nie mieć tych samych właściwości co obiekty tego samego typu, które są tworzone przez polecenia cmdlet programu PowerShell. Polecenia cmdlet programu PowerShell, dostawcy i system rozszerzonego typu mogą dodawać dodatkowe właściwości do wystąpienia.

Na przykład dostawca systemu plików w programie PowerShell dodaje sześć wartości NoteProperty do obiektu DirectoryInfo zwróconego przez 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

Podczas bezpośredniego tworzenia obiektu DirectoryInfo nie ma tych sześciu wartości NoteProperty .

$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 rozszerzonego typu, zobacz about_Types.ps1xml.

Ta funkcja została dodana w programie PowerShell 5.0

Twórca obiektów z tabel skrótów

Obiekt można utworzyć na podstawie tabeli skrótów właściwości i wartości właściwości.

Składnia wygląda następująco:

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

Ta metoda działa tylko w przypadku klas, które mają konstruktor bez parametrów. Właściwości obiektu muszą być publiczne i ustawiane.

Ta funkcja została dodana w programie PowerShell w wersji 3.0

Twórca obiektów niestandardowych z tabel skrótów

Obiekty niestandardowe są bardzo przydatne i można je łatwo tworzyć przy użyciu metody tabeli skrótów. Klasa PSCustomObject została zaprojektowana specjalnie w tym celu.

Obiekty niestandardowe to doskonały sposób zwracania dostosowanych danych wyjściowych z funkcji lub skryptu. Jest to bardziej przydatne niż zwracanie sformatowanych danych wyjściowych, których nie można sformatować ani przesyłać potokami do innych poleceń.

Polecenia w ustawieniu Test-Object function niektórych wartości zmiennych, a następnie użyj tych wartości do utworzenia obiektu niestandardowego. Ten obiekt można zobaczyć w użyciu w przykładowej sekcji tematu Update-Help pomocy polecenia cmdlet.

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 są domyślnie kolekcją obiektów niestandardowych sformatowanych jako tabela.

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.

(Test-Object).ModuleName
 PSScheduledJob
 PSWorkflow

Twórca obiektów innych niż niestandardowe z tabel skrótów

Tabele skrótów umożliwiają również tworzenie obiektów dla klas innych niż niestandardowe. Podczas tworzenia obiektu dla klasy innej niż niestandardowa wymagana jest nazwa kwalifikowanego typu przestrzeni nazw, chociaż można pominąć dowolny początkowy składnik przestrzeni nazw systemu .

Na przykład następujące polecenie tworzy obiekt opcji sesji.

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

Wymagania funkcji tabeli skrótów, zwłaszcza wymagania konstruktora bez parametrów, eliminują wiele istniejących klas. Jednak większość klas opcji programu PowerShell jest przeznaczona do pracy z tą funkcją, a także innych bardzo przydatnych klas, takich jak klasa ProcessStartInfo .

[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
...

Podczas ustawiania wartości parametrów można również użyć funkcji tabeli skrótów. Na przykład wartość parametru SessionOption elementu New-PSSession. polecenie cmdlet może być tabelą skrótów.

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ólne

W programie PowerShell można również tworzyć obiekty ogólne. Typy ogólne to klasy, struktury, interfejsy i metody, które mają symbole zastępcze (parametry typu) dla co najmniej jednego typu, które przechowują lub używają.

Poniższy przykład tworzy obiekt Słownik .

$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 Ogólne na platformie .NET.

Zobacz też