Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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