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


A módszerekről

Rövid leírás

Ismerteti, hogyan hajthat végre műveleteket objektumokon a PowerShellben metódusokkal.

Hosszú leírás

A PowerShell objektumokkal jeleníti meg az adattárak elemeit vagy a számítógép állapotát. A FileInfo-objektumok például a fájlrendszer-meghajtók fájljait, a ProcessInfo-objektumok pedig a számítógépen lévő folyamatokat jelölik.

Az objektumok olyan tulajdonságokkal rendelkeznek, amelyek adatokat tárolnak az objektumról, és olyan módszereket, amelyekkel módosíthatja az objektumot.

A "metódus" olyan utasítások készlete, amelyek megadják az objektumon végrehajtható műveletet. A FileInfo objektum például tartalmazza azt a CopyTo metódust, amely a FileInfo objektum által képviselt fájlt másolja.

Az objektumok metódusainak lekéréséhez használja a Get-Member parancsmagot. Használja a MemberType tulajdonságát a "Method" értékkel. Az alábbi parancs lekéri a folyamatobjektumok metódusait.

Get-Process | Get-Member -MemberType Method
TypeName: System.Diagnostics.Process

Name                      MemberType Definition
----                      ---------- ----------
BeginErrorReadLine        Method     System.Void BeginErrorReadLine()
BeginOutputReadLine       Method     System.Void BeginOutputReadLine()
...
Kill                      Method     System.Void Kill()
Refresh                   Method     System.Void Refresh()
Start                     Method     bool Start()
ToString                  Method     string ToString()
WaitForExit               Method     bool WaitForExit(int milliseconds), ...
WaitForInputIdle          Method     bool WaitForInputIdle(int millisecon...

Egy objektum metódusának végrehajtásához vagy "meghívásához" írjon be egy pont (.), a metódus nevét és egy zárójelkészletet (()). Ha a metódus argumentumokat tartalmaz, helyezze az argumentumértékeket a zárójelekbe. A zárójelek minden metódushíváshoz szükségesek, még akkor is, ha nincsenek argumentumok. Ha a metódus több argumentumot is használ, vesszővel kell elválasztani őket.

A következő parancs például meghívja a folyamatok Kill metódusát a jegyzettömb folyamatának befejezéséhez a számítógépen.

$notepad = Get-Process notepad
$notepad.Kill()

Ez a példa a fenti utasítások kombinálásával lerövidíthető.

(Get-Process Notepad).Kill()

A Get-Process parancs zárójelek közé van állítva, hogy a Kill metódus meghívása előtt fusson. A Kill metódus ezután meghívódik a visszaadott Process objektumon.

Egy másik nagyon hasznos módszer a sztringek Replace metódusa. A Replace metódus egy sztringen belüli szöveget cserél le. Az alábbi példában a pont (.) közvetlenül a sztring záró idézőjele után helyezhető el.

'this is rocket science'.Replace('rocket', 'rock')
this is rock science

Ahogy az előző példákban is látható, meghívhat egy metódust egy olyan objektumon, amelyet parancs, változó objektuma vagy bármilyen objektum (például idézőjelek sztringje) használatával kap.

A PowerShell 4.0-tól kezdve a metódushívás dinamikus metódusnevek használatával támogatott.

Módszerek megismerása

Egy objektum metódusainak definícióit az MSDN objektumtípusának súgótémakörében találja, és keresse meg a metódusok oldalát. Az alábbi oldal például a System.Diagnostics.Process folyamatobjektumok metódusait ismerteti.

A metódus argumentumainak meghatározásához tekintse át a metódusdefiníciót, amely egy PowerShell-parancsmag szintaxisdiagramja.

A metódusdefiníciók egy vagy több metódusa aláírással rendelkezhetnek, amelyek olyanok, mint a PowerShell-parancsmagok paraméterkészletei. Az aláírások az összes érvényes parancsformátumot megjelenítik a metódus meghívásához.

Az CopyTo osztály FileInfo metódusa például a következő két metódusa aláírást tartalmazza:

    CopyTo(String destFileName)
    CopyTo(String destFileName, Boolean overwrite)

Az első metódus aláírása a célfájl nevét (és elérési útját) veszi át. Az alábbi példa az első CopyTo metódust használja a Final.txt fájl C:\Bin könyvtárba való másolásához.

(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")

Megjegyzés:

A PowerShell argumentumától módtól eltérően az objektummetódusok kifejezési módban futnak, amely a PowerShell alapjául szolgáló .NET-keretrendszer átadása. kifejezésben módban egyszerű argumentumok (nem kvótált sztringek) nem engedélyezettek. Ez a különbség elérési útjában paraméterként látható, szemben az elérési úttal argumentumként. Az elemzési módokról a about_Parsing

A második metódus aláírása egy célfájlnevet és egy logikai értéket vesz fel, amely meghatározza, hogy a célfájlt felül kell-e írni, ha már létezik.

Az alábbi példa a második CopyTo módszerrel másolja a Final.txt fájlt a C:\Bin könyvtárba, és felülírja a meglévő fájlokat.

(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)

Skaláris objektumok és gyűjtemények módszerei

Egy adott típusú ("skaláris") objektum metódusai gyakran eltérnek az azonos típusú objektumok gyűjteményének metódusaitól.

Például minden folyamatnak van metódusa Kill , de a folyamatok gyűjteménye nem rendelkezik Kill metódussal.

A PowerShell 3.0-tól kezdődően a PowerShell megpróbálja megakadályozni a skaláris objektumok és gyűjtemények különböző metódusaiból eredő szkripthibákat.

Ha elküld egy gyűjteményt, de olyan metódust kér, amely csak egyetlen ("skaláris") objektumon létezik, a PowerShell a gyűjtemény minden objektumán meghívja a metódust.

Ha a metódus létezik az egyes objektumokon és a gyűjteményen, akkor csak a gyűjtemény metódusát hívja meg a rendszer.

Ez a funkció skaláris objektumok és gyűjtemények tulajdonságain is működik. További információ: about_Properties.

Példák

Az alábbi példa az egyes folyamatobjektumok Kill metódusát futtatja folyamatobjektumok gyűjteményén. Ez a példa csak a PowerShell 3.0-s és újabb verzióiban működik.

Az első parancs a Jegyzettömb folyamat három példányát indítja el. A második parancs a Get-Process paranccsal lekéri a Jegyzettömb folyamat mindhárom példányát, és menti őket a $p változóba.

Notepad; Notepad; Notepad
$p = Get-Process Notepad

A harmadik parancs az összes gyűjtemény Count tulajdonságával ellenőrzi, hogy a $p változóban három folyamat van-e.

$p.Count
3

A negyedik parancs a Kill metódust futtatja a $p változó mindhárom folyamatán.

Ez a parancs akkor is működik, ha egy folyamatgyűjtemény nem rendelkezik Kill metódussal.

$p.Kill()

Az ötödik parancs a Get-Process paranccsal erősíti meg, hogy a Kill parancs működött-e.

Get-Process Notepad
Get-Process : Cannot find a process with the name "notepad". Verify the proc
ess name and call the cmdlet again.
At line:1 char:12
+ Get-Process <<<<  notepad
    + CategoryInfo          : ObjectNotFound: (notepad:String) [Get-Process]
, ProcessCommandException
    + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShel
l.Commands.GetProcessCommand

Ha ugyanazt a feladatot szeretné végrehajtani a PowerShell 2.0-ban, a Foreach-Object parancsmaggal futtassa a metódust a gyűjtemény minden objektumán.

$p | ForEach-Object {$_.Kill()}

ForEach és Where metódusok

A PowerShell 4.0-tól kezdődően a gyűjtemények metódusszintaxissal történő szűrése támogatott. Ez lehetővé teszi két új módszer használatát a gyűjtemények ForEach és Wherekezelésekor.

Ezekről a módszerekről a about_arrays

Lásd még:

about_Objects

Tulajdonságokról

get-member