about_Object_Creation
Rövid leírás
Ismerteti, hogyan hozhat létre objektumokat a PowerShellben.
Hosszú leírás
Létrehozhat objektumokat a PowerShellben, és használhatja a parancsokban és szkriptekben létrehozott objektumokat.
Sokféleképpen hozhat létre objektumokat, ez a lista nem végleges:
- New-Object: Létrehoz egy példányt egy .NET-keretrendszer objektumból vagy COM-objektumból.
- Import-Csv/ConvertFrom-CSV: Egyéni objektumokat (PSCustomObject) hoz létre a karakterekkel elválasztott értékekként definiált elemekből.
- ConvertFrom-Json: A JavaScript Object Notation (JSON) alkalmazásban definiált egyéni objektumokat hoz létre.
- ConvertFrom-StringData: Kulcsértékpárként definiált egyéni objektumokat hoz létre.
- Add-Type: Lehetővé teszi, hogy meghatározzon egy osztályt a PowerShell-munkamenetben, amellyel
New-Object
példányosíthat. - New-Module: Az AsCustomObject paraméter egy szkriptblokk használatával definiált egyéni objektumot hoz létre.
- Tag hozzáadása: Tulajdonságok hozzáadása meglévő objektumokhoz.
Add-Member
Egyéni objektumot egyszerű típusból is létrehozhat, például[System.Int32]
. - Objektum kijelölése: Tulajdonságok kijelölése egy objektumon.
Select-Object
Egyéni és számított tulajdonságokat hozhat létre egy már példányosított objektumon.
A cikk a következő további módszereket ismerteti:
- Típus konstruktorának meghívása statikus
new()
módszerrel - Tulajdonságnevek és tulajdonságértékek kivonattábláinak beírásával
Statikus new() metódus
Minden .NET-típus rendelkezik egy new()
olyan módszerrel, amellyel egyszerűbben hozhat létre példányokat. Egy adott típus összes elérhető konstruktorát is láthatja.
Egy típus konstruktorainak megtekintéséhez adja meg a new
metódus nevét a típusnév után, és nyomja le a billentyűt <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)
Most létrehozhat egy System.Uri-t a megfelelő konstruktor megadásával.
[System.Uri]::new("https://www.bing.com")
AbsolutePath : /
AbsoluteUri : https://www.bing.com/
LocalPath : /
Authority : www.bing.com
...
Az alábbi mintával megállapíthatja, hogy a példányosításhoz jelenleg mely .NET-típusok vannak betöltve.
[AppDomain]::CurrentDomain.GetAssemblies() |
ForEach-Object {
$_.GetExportedTypes() |
ForEach-Object { $_.FullName }
}
Előfordulhat, hogy a new()
metódussal létrehozott objektumok tulajdonságai nem azonosak a PowerShell-parancsmagok által létrehozott azonos típusú objektumokkal. A PowerShell-parancsmagok, a szolgáltatók és a kiterjesztett típusrendszer további tulajdonságokat adhat a példányhoz.
A PowerShell fájlrendszerszolgáltatója például hat NoteProperty-értéket ad hozzá a függvény által visszaadott Get-Item
DirectoryInfo objektumhoz.
$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
Amikor közvetlenül létrehoz egy DirectoryInfo objektumot, az nem rendelkezik azzal a hat NoteProperty értékkel.
$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
További információ a kiterjesztett típusrendszerről: about_Types.ps1xml.
Ez a funkció a PowerShell 5.0-ban lett hozzáadva
Objektumok létrehozása kivonattáblákból
Tulajdonságokat és tulajdonságértékeket tartalmazó kivonattáblából hozhat létre objektumot.
A szintaxis a következő:
[<class-name>]@{
<property-name>=<property-value>
<property-name>=<property-value>
}
Ez a módszer csak paraméter nélküli konstruktorokkal rendelkező osztályok esetében működik. Az objektum tulajdonságainak nyilvánosnak és beállíthatónak kell lenniük.
Ez a funkció a PowerShell 3.0-s verziójában lett hozzáadva
Egyéni objektumok létrehozása kivonattáblákból
Az egyéni objektumok nagyon hasznosak, és könnyen létrehozhatók a kivonattáblázat metódusával. A PSCustomObject osztály kifejezetten erre a célra lett kialakítva.
Az egyéni objektumok kiválóan alkalmasak arra, hogy testre szabott kimenetet adjanak vissza egy függvényből vagy szkriptből. Ez hasznosabb, mint a formázott kimenet visszaadása, amelyet nem lehet más parancsokba újraformálni vagy más parancsokba csövezni.
A beállításban szereplő Test-Object function
parancsok változóértékeket tartalmaznak, majd ezeket az értékeket használva létrehoznak egy egyéni objektumot. Ezt az objektumot a parancsmag súgótémakörének Update-Help
példaszakaszában tekintheti meg.
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
A függvény kimenete alapértelmezés szerint táblázatként formázott egyéni objektumok gyűjteménye.
ModuleName UICulture Version
--------- --------- -------
PSScheduledJob en-us 3.1.0.0
PSWorkflow en-us 3.0.0.0
A felhasználók ugyanúgy kezelhetik az egyéni objektumok tulajdonságait, mint a standard objektumokkal.
(Test-Object).ModuleName
PSScheduledJob
PSWorkflow
A PSObject típusú objektumok abban a sorrendben őrzik meg a tagok listáját, hogy a tagok hozzá lettek adva az objektumhoz. Annak ellenére , hogy a kivonatoló objektumok nem garantálják a kulcs-érték párok sorrendjét, egy literális kivonatolót ad meg a sorrend fenntartásához [pscustomobject]
.
A kivonatolónak literálnak kell lennie. Ha zárójelbe burkolja a kivonatolót, vagy ha egy kivonatolót tartalmazó változót ad meg, nincs garancia arra, hogy a sorrend megmarad.
$hash = @{
Name = "Server30"
System = "Server Core"
PSVersion = "4.0"
}
$Asset = [pscustomobject]$hash
$Asset
System Name PSVersion
------ ---- ---------
Server Core Server30 4.0
Nem egyéni objektumok létrehozása kivonattáblákból
Kivonattáblákkal objektumokat is létrehozhat nem egyéni osztályokhoz. Ha nem egyéni osztályhoz hoz létre objektumot, a névtér által minősített típusnévre van szükség, bár kihagyhatja a rendszernévtér kezdeti összetevőjét.
A következő parancs például létrehoz egy munkamenet-beállításobjektumot.
[System.Management.Automation.Remoting.PSSessionOption]@{
IdleTimeout=43200000
SkipCnCheck=$True
}
A kivonattábla-funkció követelményei, különösen a paraméter nélküli konstruktorkövetelmény számos meglévő osztályt kiküszöbölnek. A Legtöbb PowerShell-beállításosztály azonban úgy van kialakítva, hogy ezzel a funkcióval működjön, valamint más nagyon hasznos osztályokat is, például a ProcessStartInfo osztályt.
[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
...
A kivonattábla funkciót a paraméterértékek beállításakor is használhatja. Például a SessionOption paraméter értéke a New-PSSession
.
a parancsmag lehet kivonattábla.
New-PSSession -ComputerName Server01 -SessionOption @{
IdleTimeout=43200000
SkipCnCheck=$True
}
Register-ScheduledJob Name Test -FilePath .\Get-Inventory.ps1 -Trigger @{
Frequency="Daily"
At="15:00"
}
Általános objektumok
A PowerShellben általános objektumokat is létrehozhat. Az általánosak olyan osztályok, struktúrák, interfészek és metódusok, amelyek helyőrzőkkel (típusparaméterekkel) rendelkeznek az általuk tárolt vagy használt típusok egy vagy több típusához.
Az alábbi példa létrehoz egy szótárobjektumot .
$dict = New-Object 'System.Collections.Generic.Dictionary[String,Int]'
$dict.Add("One", 1)
$dict
Key Value
--- -----
One 1
Az általános szolgáltatásokkal kapcsolatos további információkért lásd: Generics in .NET.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: