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 oddzielone znakami.
- ConvertFrom-Json: tworzy obiekty niestandardowe zdefiniowane w notacji obiektów JavaScript (JSON).
- ConvertFrom-String: zbudowany na bazie flashExtract tworzy
ConvertFrom-String
obiekty niestandardowe na podstawie danych ciągów strukturalnych. W tym temacie przedstawiono i omówiono każdą z tych metod. - ConvertFrom-StringData: tworzy niestandardowe obiekty 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 poza prostym typem, na przykład[System.Int32]
. - Select-Object: wybiera właściwości obiektu. Można użyć
Select-Object
polecenia , aby utworzyć niestandardowe i obliczone właściwości na już utworzonym obiekcie.
W tym artykule omówiono następujące dodatkowe metody:
- Wywołując konstruktor typu przy użyciu metody statycznej
new()
- Przez typecasting skrót tabel 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 typu, określ new
nazwę metody po nazwie typu i naciśnij <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
...
W poniższym przykładzie można 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ć takich samych właściwości jak obiekty tego samego typu, które są tworzone przez polecenia cmdlet programu PowerShell. Polecenia cmdlet, dostawcy i rozszerzony system typów programu PowerShell 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
polecenie .
$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
Tworzenie obiektów na podstawie 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 konfigurowalne.
Ta funkcja została dodana w programie PowerShell w wersji 3.0
Tworzenie obiektów niestandardowych na podstawie 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 ponownie 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
Obiekty typu PSObject utrzymują listę elementów członkowskich w kolejności, w których składowe zostały dodane do obiektu. Mimo że obiekty tabeli skrótu nie gwarantują kolejności par klucz-wartość, rzutowanie tabeli skrótów literału w celu [pscustomobject]
zachowania kolejności.
Tabela skrótów musi być literałem. W przypadku zawijania tabeli skrótu w nawiasach lub rzutowania zmiennej zawierającej tabelę skrótu nie ma gwarancji, że kolejność jest zachowywana.
$hash = @{
Name = "Server30"
System = "Server Core"
PSVersion = "4.0"
}
$Asset = [pscustomobject]$hash
$Asset
PSVersion Name System
--------- ---- ------
4.0 Server30 Server Core
Tworzenie obiektów innych niż niestandardowe na podstawie 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 typu kwalifikowanego 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
...
Funkcję tabeli skrótów można również użyć podczas ustawiania wartości parametrów. Na przykład wartość parametru SessionOption parametru 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
Można również tworzyć obiekty ogólne w programie PowerShell. 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 Generics in .NET (Typy ogólne na platformie .NET).