Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Krátký popis
Vysvětluje, jak vytvářet objekty v PowerShellu.
Dlouhý popis
V PowerShellu můžete vytvářet objekty a používat objekty, které vytvoříte v příkazech a skriptech.
Existuje mnoho způsobů, jak vytvořit objekty, tento seznam není konečný:
- new-object: Vytvoří instanci objektu rozhraní .NET Framework nebo objektu COM.
- Import-Csv/ConvertFrom-Csv: Vytvoří vlastní objekty (PSCustomObject) z položek definovaných jako hodnoty oddělené znakem.
- convertFrom-Json: Vytvoří vlastní objekty definované v javascriptové notaci objektu (JSON).
- ConvertFrom-StringData: Vytvoří vlastní objekty definované jako páry klíč-hodnota.
-
doplňku: Umožňuje definovat třídu v relaci PowerShellu, kterou můžete vytvořit instanci pomocí
New-Object. - New-Module: Parametr AsCustomObject vytvoří vlastní objekt, který definujete pomocí scriptblock.
-
doplňku: Přidá vlastnosti do existujících objektů. Pomocí
Add-Membermůžete vytvořit vlastní objekt z jednoduchého typu, například[System.Int32]. -
Select-Object: Vybere vlastnosti objektu. Pomocí
Select-Objectmůžete vytvořit vlastní a počítané vlastnosti u již vytvořeného objektu.
V tomto článku jsou popsané následující další metody:
- Voláním konstruktoru typu pomocí statické metody
new() - Zadáním hash tabulek názvů vlastností a hodnot vlastností
Static new() – metoda
Všechny typy .NET mají metodu new(), která umožňuje snadněji vytvářet instance. Můžete také zobrazit všechny dostupné konstruktory pro daný typ.
Chcete-li zobrazit konstruktory pro typ, zadejte název metody new za název typu a stiskněte <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)
Teď můžete vytvořit System.Uri zadáním příslušného konstruktoru.
[System.Uri]::new("https://www.bing.com")
AbsolutePath : /
AbsoluteUri : https://www.bing.com/
LocalPath : /
Authority : www.bing.com
...
Pomocí následující ukázky můžete určit, jaké typy .NET jsou aktuálně načteny, abyste mohli vytvořit instanci.
[AppDomain]::CurrentDomain.GetAssemblies() |
ForEach-Object {
$_.GetExportedTypes() |
ForEach-Object { $_.FullName }
}
Objekty vytvořené pomocí metody new() nemusí mít stejné vlastnosti jako objekty stejného typu, které jsou vytvořeny rutinami PowerShellu. Rutiny, poskytovatelé a rozšířený systém typů PowerShellu můžou do instance přidat další vlastnosti.
Například zprostředkovatel FileSystem v PowerShellu přidá šest NoteProperty hodnoty do objektu DirectoryInfo vrácený 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
Když vytvoříte objekt DirectoryInfo přímo, nemá tyto šest hodnot 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
Další informace o rozšířeném systému typů naleznete v tématu about_Types.ps1xml.
Tato funkce byla přidána v PowerShellu 5.0.
Vytváření objektů z tabulek hash
Objekt můžete vytvořit z tabulky hash vlastností a hodnot vlastností.
Syntaxe je následující:
[<class-name>]@{
<property-name>=<property-value>
<property-name>=<property-value>
}
Tato metoda funguje pouze pro třídy, které mají konstruktor bez parametrů. Vlastnosti objektu musí být veřejné a nastavené.
Tato funkce byla přidána v PowerShellu verze 3.0.
Vytváření vlastních objektů z tabulek hash
Vlastní objekty jsou velmi užitečné a snadno se vytvářejí pomocí metody hash tabulky. PSCustomObject třída je navržena speciálně pro tento účel.
Vlastní objekty představují skvělý způsob, jak vrátit přizpůsobený výstup z funkce nebo skriptu. To je užitečnější než vrácení formátovaného výstupu, který nelze přeformátovat ani přeformátovat do jiných příkazů.
Příkazy v Test-Object function nastavují některé hodnoty proměnných a pak tyto hodnoty používají k vytvoření vlastního objektu. Tento objekt se používá v ukázkové části tématu nápovědy k rutině 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
}
}
Test-Object
Výstupem této funkce je kolekce vlastních objektů formátovaných jako tabulka ve výchozím nastavení.
ModuleName UICulture Version
--------- --------- -------
PSScheduledJob en-US 3.1.0.0
PSWorkflow en-US 3.0.0.0
Uživatelé mohou spravovat vlastnosti vlastních objektů stejně jako u standardních objektů.
(Test-Object).ModuleName
PSScheduledJob
PSWorkflow
objekty PSObject typu udržují seznam členů v pořadí, v jakém byly členy přidány do objektu. I když Hashtable objekty nezaručují pořadí párů klíč-hodnota, přetypování literálové hashtable na [pscustomobject] udržuje pořadí.
Hashtable musí být literál. Pokud zabalíte hashovací tabulku do závorek nebo pokud přetypujete proměnnou obsahující hashtable, neexistuje žádná záruka, že pořadí zůstane zachováno.
$hash = @{
Name = "Server30"
System = "Server Core"
PSVersion = "4.0"
}
$Asset = [pscustomobject]$hash
$Asset
System Name PSVersion
------ ---- ---------
Server Core Server30 4.0
Vytváření jiných než vlastních objektů z tabulek hash
K vytváření objektů pro jiné než vlastní třídy můžete použít také tabulky hash. Při vytváření objektu pro třídu, která není vlastní, je požadován název kvalifikovaného typu oboru názvů, i když můžete vynechat všechny počáteční system součást oboru názvů.
Například následující příkaz vytvoří objekt možnosti relace.
[System.Management.Automation.Remoting.PSSessionOption]@{
IdleTimeout=43200000
SkipCnCheck=$true
}
Požadavky funkce hash tabulky, zejména požadavek konstruktoru bez parametrů, eliminují mnoho existujících tříd. Většina možností PowerShellu třídy jsou však navrženy tak, aby fungovaly s touto funkcí, a také další velmi užitečné třídy, jako je ProcessStartInfo třída.
[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
...
Při nastavování hodnot parametrů můžete také použít funkci hashovací tabulky. Například hodnota parametru SessionOptionNew-PSSession.
Rutina může být hashovací tabulka.
New-PSSession -ComputerName Server01 -SessionOption @{
IdleTimeout=43200000
SkipCnCheck=$true
}
Register-ScheduledJob -Name Test -FilePath .\Get-Inventory.ps1 -Trigger @{
Frequency="Daily"
At="15:00"
}
Obecné objekty
V PowerShellu můžete také vytvořit obecné objekty. Obecné typy jsou třídy, struktury, rozhraní a metody, které mají zástupné symboly (parametry typu) pro jeden nebo více typů, které ukládají nebo používají.
Následující příklad vytvoří objekt Dictionary.
$dict = New-Object 'System.Collections.Generic.Dictionary[String,Int]'
$dict.Add("One", 1)
$dict
Key Value
--- -----
One 1
Další informace o obecných formátech najdete v tématu Obecné typy v rozhraní .NET.
Viz také
- about_Methods
- about_Objects
- about_Pipelines
- about_Properties
- about_Types.ps1xml