Sdílet prostřednictvím


O metodách

Krátký popis

Popisuje, jak pomocí metod provádět akce s objekty v PowerShellu.

Dlouhý popis

PowerShell používá objekty k reprezentaci položek v úložištích dat nebo stavu počítače. Například FileInfo objekty představují soubory v jednotkách systému souborů a ProcessInfo objekty představují procesy v počítači.

Objekty mají vlastnosti, které ukládají data o objektu a metody, které umožňují změnit objekt.

"metoda" je sada instrukcí, které určují akci, kterou můžete u objektu provést. Například objekt FileInfo obsahuje CopyTo metodu, která zkopíruje soubor, který FileInfo objekt představuje.

K získání metod libovolného objektu použijte rutinu Get-Member. Použijte jeho MemberType vlastnost s hodnotou "Method". Následující příkaz získá metody procesních objektů.

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...

Pokud chcete provést nebo vyvolat metodu objektu, zadejte tečku (.), název metody a sadu závorek "()". Pokud metoda obsahuje argumenty, umístěte hodnoty argumentů do závorek. Závorky jsou vyžadovány pro každé volání metody, i když neexistují žádné argumenty. Pokud metoda přebírá více argumentů, měly by být odděleny čárkami.

Například následující příkaz vyvolá metodu Kill procesů, která ukončí proces Poznámkového bloku v počítači.

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

Tento příklad lze zkrátit kombinací výše uvedených příkazů.

(Get-Process Notepad).Kill()

Příkaz Get-Process je uzavřený v závorkách, aby se zajistilo, že se spustí před vyvolání metody Kill. Metoda Kill se pak vyvolá na vrácený Process objektu.

Další velmi užitečnou metodou je Replace metoda řetězců. Metoda Replace nahrazuje text v řetězci. V následujícím příkladu lze tečku (.) umístit hned za koncovou uvozovku řetězce.

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

Jak je znázorněno v předchozích příkladech, můžete vyvolat metodu u objektu, který získáte pomocí příkazu, objektu v proměnné nebo čehokoli, co má za následek objekt (například řetězec v uvozovkách).

Počínaje PowerShellem 4.0 se podporuje vyvolání metody pomocí názvů dynamických metod.

Seznámení s metodami

Chcete-li najít definice metod objektu, přejděte do tématu nápovědy pro typ objektu na webu MSDN a vyhledejte stránku s jeho metodami. Například následující stránka popisuje metody procesních objektů System.Diagnostics.Process.

Pokud chcete určit argumenty metody, zkontrolujte definici metody, která se podobá diagramu syntaxe rutiny PowerShellu.

Definice metody může obsahovat jeden nebo více podpisů metody, které jsou podobné sadám parametrů rutin PowerShellu. Podpisy zobrazují všechny platné formáty příkazů pro vyvolání metody.

Například CopyTo metoda třídy FileInfo obsahuje následující dva podpisy metody:

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

První podpis metody přebírá název cílového souboru (a cestu). Následující příklad používá první metodu CopyTo ke zkopírování souboru Final.txt do C:\Bin adresáře.

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

Poznámka:

Na rozdíl od argumentu PowerShellu režimu se metody objektů spouští v režimu výrazu, což je průchozí přístup k rozhraní .NET Framework, na kterém je PowerShell založený. V výrazu režim holé slovo argumenty (necitované řetězce) nejsou povoleny. To můžete vidět v rozdílové cestě jako parametru, nikoli v cestě jako argumentu. Další informace o režimech analýzy najdete v about_Parsing

Signatura druhé metody přebírá název cílového souboru a booleovskou hodnotu, která určuje, zda má být cílový soubor přepsán, pokud již existuje.

Následující příklad používá druhou metodu CopyTo ke zkopírování Final.txt souboru do C:\Bin adresáře a k přepsání existujících souborů.

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

Metody skalárních objektů a kolekcí

Metody jednoho ("skalárního") objektu určitého typu se často liší od metod kolekce objektů stejného typu.

Například každý proces má metodu Kill , ale kolekce procesů nemá metodu Kill.

Počínaje PowerShellem 3.0 se PowerShell snaží zabránit chybám skriptování, které jsou výsledkem různých metod skalárních objektů a kolekcí.

Pokud odešlete kolekci, ale požadujete metodu, která existuje pouze na jednotlivých ("skalárních") objektech, PowerShell vyvolá metodu na každém objektu v kolekci.

Pokud metoda existuje na jednotlivých objektech a v kolekci, je vyvolána pouze metoda kolekce.

Tato funkce funguje také na vlastnostech skalárních objektů a kolekcí. Další informace naleznete v části about_Properties.

Příklady

Následující příklad spustí metodu Kill jednotlivých objektů procesu na kolekci objektů procesu. Tento příklad funguje pouze v PowerShellu 3.0 a novějších verzích PowerShellu.

První příkaz spustí tři instance procesu Poznámkového bloku. Druhý příkaz používá Get-Process příkaz k získání všech tří instancí procesu Poznámkového bloku a jejich uložení do proměnné $p.

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

Třetí příkaz používá vlastnost Count všech kolekcí k ověření, zda $p proměnná obsahuje tři procesy.

$p.Count
3

Čtvrtý příkaz spustí metodu Kill na všech třech procesech v proměnné $p.

Tento příkaz funguje, i když kolekce procesů nemá metodu Kill.

$p.Kill()

Pátý příkaz pomocí příkazu Get-Process potvrdí, že Kill příkaz fungoval.

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

Chcete-li provést stejnou úlohu v prostředí PowerShell 2.0, spusťte metodu na každém objektu v kolekci pomocí rutiny Foreach-Object .

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

Metody ForEach a Where

Počínaje PowerShellem 4.0 je podporováno filtrování kolekcí pomocí syntaxe metody. To umožňuje použití dvou nových metod při práci s kolekcemi ForEach a Where.

Další informace o těchto metodách najdete v about_arrays

Viz také

about_Objects

o_vlastnostech

get-member