Megosztás a következőn keresztül:


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: .NET Framework-objektum vagy COM-objektum egy példányát hozza létre.
  • Import-Csv/ConvertFrom-Csv: Egyéni objektumokat (PSCustomObject) hoz létre a karakterelválasztó é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.
  • bővítménytípusú: Lehetővé teszi egy osztály definiálására a PowerShell-munkamenetben, amelyet a New-Objectpé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. A Add-Member használatával létrehozhat egy egyéni objektumot egy egyszerű típusból, például [System.Int32].
  • Select-Object: Az objektum tulajdonságainak kijelölése. A Select-Object használatával 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:

  • Egy típus konstruktorának statikus new() metódussal történő meghívásával
  • 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() metódussal, 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 <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 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 DirectoryInfoGet-Itemáltal visszaadott 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 hoz létre DirectoryInfo objektumot, nem rendelkezik ezzel 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 Test-Object function parancsai beállítanak néhány változóértéket, majd ezeket az értékeket használva létrehoznak egy egyéni objektumot. Ezt az objektumot a Update-Help parancsmag súgótémakörének 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

PSObject típusú objektumok a tagok listáját abban a sorrendben tartják fenn, amelyben a tagok hozzá lettek adva az objektumhoz. Annak ellenére, hogy kivonatoló objektumok nem garantálják a kulcs-érték párok sorrendjét, a konstans kivonatoló [pscustomobject] megtartja a sorrendet.

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, de kihagyhatja a kezdeti Rendszer névtér összetevő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- osztályt azonban úgy tervezték, hogy ezzel a funkcióval működjön, valamint más nagyon hasznos osztályokat, 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. A SessionOption paraméter értéke például 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ár objektumot.

$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