Sdílet prostřednictvím


O metodách

Stručný popis

Popisuje, jak používat metody k provádění akcí 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 na 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í objekt změnit.

"Metoda" je sada instrukcí, které určují akci, kterou můžete s objektem provést. Například objekt obsahuje metoduCopyTo, FileInfo 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 vlastnost MemberType 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...

Chcete-li 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řijímá více argumentů, měly by být odděleny čárkami.

Například následující příkaz vyvolá metodu Kill procesů pro ukončení procesu 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 je poté vyvolána u vráceného Process objektu.

Další velmi užitečnou metodou Replace je metoda řetězců. Metoda Replace nahrazuje text v řetězci. V následujícím příkladu je možné 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 pro objekt, 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).

Od PowerShellu 4.0 se podporuje vyvolání metody pomocí názvů dynamických metod.

Seznámení s metodami

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

Pokud chcete zjistit argumenty metody, projděte si definici metody, která se podobá diagramu syntaxe rutiny PowerShellu.

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

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

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

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

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

Poznámka

Na rozdíl od režimu argumentů PowerShellu se objektové metody spouštějí v režimu výrazu , což je předávání do rozhraní .NET, na kterém je PowerShell postavený. V režimu výrazu nejsou povoleny argumenty typu bareword (řetězce bez citací). Můžete to vidět v cestě rozdílu jako parametru a v cestě jako argumentu. Další informace o režimech analýzy najdete v about_Parsing

Druhý podpis metody přebírá název cílového souboru a logickou 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 CopyTo metodu 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 důsledkem odlišných metod skalárních objektů a kolekcí.

Pokud odešlete kolekci, ale požádáte o metodu, která existuje pouze u jednoho ("skalárního") objektu, PowerShell vyvolá metodu pro každý objekt v kolekci.

Pokud metoda existuje pro jednotlivé objekty a v kolekci, je vyvolána pouze metoda kolekce.

Tato funkce funguje také u vlastností skalárních objektů a kolekcí. Další informace najdete v tématu about_Properties.

Příklady

Následující příklad spustí metodu Kill jednotlivých objektů procesu na kolekci objektů procesu. Tento příklad funguje jenom 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 pomocí příkazu Get-Process získá všechny tři instance procesu Poznámkového bloku a uloží je 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í, že proměnná $p obsahuje tři procesy.

$p.Count
3

Čtvrtý příkaz spustí metodu Kill pro všechny tři procesy v proměnné $p.

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

$p.Kill()

Pátý příkaz používá příkaz Get-Process k potvrzení, ž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

Pokud chcete provést stejnou úlohu v PowerShellu Foreach-Object 2.0, pomocí rutiny spusťte metodu pro každý objekt v kolekci.

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

Metody ForEach a Where

Počínaje PowerShellem 4.0 se podporuje 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

about_Properties

Get-Member