about_Methods
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. Az objektum például tartalmazza azt a CopyTo
metódust, FileInfo
amely átmásolja az FileInfo
objektum által képviselt fájlt.
Bármely objektum 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.
Az alábbi parancs például meghívja a folyamatok Kill metódusát a Jegyzettömb folyamat 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 zárva, 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 Replace
sztringek 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.
Tanulás a metódusokról
Egy objektum metódusainak definícióinak megkereséséhez keresse meg az objektumtípus súgótémakörét, és keresse meg annak metóduslapjá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 osztály metódusa FileInfo
például CopyTo
a következő két metódus-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
módszerrel másolja a fájlt a Final.txt
C:\Bin
könyvtárba.
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")
Feljegyzés
A PowerShell argumentummódjával ellentétben az objektummetódusok kifejezés módban futnak, ami a PowerShell által létrehozott .NET-keretrendszer átadása. A kifejezésmódban az egyszerű argumentumok (nem kvtált sztringek) nem engedélyezettek. Ez a különbség akkor jelenik meg, ha az elérési utat paraméterként használja, szemben az elérési út argumentumként való használatával. 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 használ, amely meghatározza, hogy felülírja-e a célfájlt, ha már létezik.
Az alábbi példa a második CopyTo
módszerrel másolja a fájlt a Final.txt
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)
Taghozzáférés számbavétele
A PowerShell 3.0-tól kezdve, amikor a tagelérési operátorral (.
) olyan metódushoz fér hozzá, amely nem létezik egy listagyűjteményben, a PowerShell automatikusan számba fogja venni a gyűjtemény elemeit, és meghívja a metódust az egyes elemeken. További információ: about_Member-Access_Enumeration.
Példák
Az alábbi példa az egyes folyamatobjektumok Kill metódusát futtatja egy objektumgyűjteményben.
Az első parancs a Jegyzettömb folyamat három példányát indítja el. Get-Process
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
$p.Count
3
A következő 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 metódussal Kill
.
$p.Kill()
Get-Process Notepad
A Get-Process
parancs megerősíti, hogy a Kill
metódus működött.
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
Ez a példa funkcionálisan egyenértékű azzal, ha a Foreach-Object
parancsmaggal futtatja 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 kezdve a gyűjteményszűrés metódusszintaxissal támogatott. Ez lehetővé teszi két új módszer használatát a gyűjtemények ForEach
és Where
a .
Ezekről a módszerekről a about_arrays
Adott metódus meghívása több túlterhelés esetén
A .NET-metódusok meghívásakor vegye figyelembe a következő forgatókönyvet. Ha egy metódus egy objektumot vesz igénybe, de egy speciális típust használó felületen keresztül túlterheli magát, a PowerShell az objektumot elfogadó metódust választja, kivéve, ha ön explicit módon az adott felületre öntötte.
Add-Type -TypeDefinition @'
// Interface
public interface IFoo {
string Bar(int p);
}
// Type that implements the interface
public class Foo : IFoo {
// Direct member method named 'Bar'
public string Bar(object p) { return $"object: {p}"; }
// *Explicit* implementation of IFoo's 'Bar' method().
string IFoo.Bar(int p) {
return $"int: {p}";
}
}
'@
Ebben a példában a Bar metódus kevésbé specifikus object
túlterhelését választottuk.
[Foo]::new().Bar(1)
object: 1
Ebben a példában a metódust az IFoo felületre öntöttük, hogy kiválassza a Bar metódus pontosabb túlterhelését.
([IFoo] [Foo]::new()).Bar(1)
int: 1
Fájlrendszer-elérési utakat használó .NET-metódusok használata
A PowerShell folyamatonként több futtatóteret támogat. Minden runspace saját aktuális könyvtárral rendelkezik. Ez nem ugyanaz, mint az aktuális folyamat munkakönyvtára: [System.Environment]::CurrentDirectory
.
A .NET-metódusok a folyamat munkakönyvtárát használják. A PowerShell-parancsmagok a Runspace helyét használják. A .NET-metódusok emellett csak natív fájlrendszer-elérési utakkal működnek, PowerShell-elérésiút-objektumokkal nem. Ha a PowerShell-elérési utakat .NET-metódusokkal szeretné használni, meg kell oldania a fájlrendszer natív elérési útját, mielőtt átadja azt a .NET-metódusnak.
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: