Udostępnij za pośrednictwem


Informacje o metodach

Krótki opis

Opisuje sposób używania metod do wykonywania akcji na obiektach w programie PowerShell.

Długi opis

Program PowerShell używa obiektów do reprezentowania elementów w magazynach danych lub stanie komputera. Na przykład obiekty FileInfo reprezentują pliki na dyskach systemu plików i obiekty ProcessInfo reprezentują procesy na komputerze.

Obiekty mają właściwości, które przechowują dane dotyczące obiektu i metody, które umożliwiają zmianę obiektu.

"metoda" to zestaw instrukcji, które określają akcję, którą można wykonać w obiekcie. Na przykład FileInfo obiekt zawiera metodę CopyTo , która kopiuje plik reprezentowany przez FileInfo obiekt.

Aby uzyskać metody dowolnego obiektu, użyj Get-Member polecenia cmdlet . Użyj właściwości MemberType z wartością "Method". Następujące polecenie pobiera metody obiektów przetwarzania.

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

Aby wykonać lub wywołać metodę obiektu, wpisz kropkę (.), nazwę metody i zestaw nawiasów "()". Jeśli metoda ma argumenty, umieść wartości argumentów wewnątrz nawiasów. Nawiasy są wymagane dla każdego wywołania metody, nawet jeśli nie ma argumentów. Jeśli metoda przyjmuje wiele argumentów, powinny być rozdzielone przecinkami.

Na przykład następujące polecenie wywołuje metodę Kill procesów, aby zakończyć proces Notatnika na komputerze.

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

Ten przykład można skrócić, łącząc powyższe instrukcje.

(Get-Process Notepad).Kill()

Get-Process Polecenie jest ujęte w nawiasy, aby upewnić się, że jest ono uruchamiane przed wywołaniem metody Kill. Metoda Kill jest następnie wywoływana na zwróconym Process obiekcie.

Inną bardzo przydatną Replace metodą jest metoda ciągów. Metoda Replace zastępuje tekst w ciągu. W poniższym przykładzie kropka (.) można umieścić bezpośrednio po cudzysłowie końcowym ciągu.

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

Jak pokazano w poprzednich przykładach, można wywołać metodę na obiekcie, który otrzymujesz za pomocą polecenia, obiektu w zmiennej lub dowolnego elementu, które powoduje wystąpienie obiektu (na przykład ciąg w cudzysłowie).

Począwszy od programu PowerShell 4.0, obsługiwane jest wywołanie metody przy użyciu nazw metod dynamicznych.

Nauka o metodach

Aby znaleźć definicje metod obiektu, przejdź do tematu pomocy dla typu obiektu w witrynie MSDN i poszukaj jej strony metody. Na przykład na poniższej stronie opisano metody obiektów przetwarzania System.Diagnostics.Process.

Aby określić argumenty metody, przejrzyj definicję metody, która jest podobna do diagramu składni polecenia cmdlet programu PowerShell.

Definicja metody może mieć co najmniej jedną sygnaturę metody, która jest podobna do zestawów parametrów poleceń cmdlet programu PowerShell. Podpisy pokazują wszystkie prawidłowe formaty poleceń, aby wywołać metodę.

Na przykład CopyTo metoda FileInfo klasy zawiera następujące dwa podpisy metody:

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

Pierwszy podpis metody przyjmuje nazwę pliku docelowego (i ścieżkę). W poniższym przykładzie użyto pierwszej CopyTo metody do skopiowania Final.txt pliku do C:\Bin katalogu.

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

Uwaga

W przeciwieństwie do trybu argumentu programu PowerShell metody obiektów są wykonywane w trybie wyrażeń , który jest przekazywaniem do platformy .NET, na której jest oparty program PowerShell. W trybie wyrażeń argumenty barewordu (niekwestionowane ciągi) są niedozwolone. Można to zobaczyć w ścieżce różnicy jako parametru, a ścieżkę jako argument. Więcej informacji na temat trybów analizowania można uzyskać w about_Parsing

Drugi podpis metody bierze nazwę pliku docelowego i wartość logiczną, która określa, czy plik docelowy powinien zostać zastąpiony, jeśli już istnieje.

W poniższym przykładzie użyto drugiej CopyTo metody do skopiowania Final.txt pliku do C:\Bin katalogu i zastąpienia istniejących plików.

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

Metody obiektów skalarnych i kolekcji

Metody jednego obiektu ("skalarnego") określonego typu często różnią się od metod kolekcji obiektów tego samego typu.

Na przykład każdy proces ma metodę Kill , ale kolekcja procesów nie ma metody Kill.

Począwszy od programu PowerShell 3.0, program PowerShell próbuje zapobiec błędom skryptów, które wynikają z różnych metod obiektów skalarnych i kolekcji.

Jeśli prześlesz kolekcję, ale zażądasz metody, która istnieje tylko w pojedynczych obiektach ("skalarnych"), program PowerShell wywołuje metodę dla każdego obiektu w kolekcji.

Jeśli metoda istnieje w poszczególnych obiektach i w kolekcji, wywoływana jest tylko metoda kolekcji.

Ta funkcja działa również na właściwościach obiektów skalarnych i kolekcji. Aby uzyskać więcej informacji, zobacz about_Properties.

Przykłady

Poniższy przykład uruchamia metodę Kill poszczególnych obiektów procesu w kolekcji obiektów procesu. Ten przykład działa tylko w programie PowerShell 3.0 i nowszych wersjach programu PowerShell.

Pierwsze polecenie uruchamia trzy wystąpienia procesu Notatnika. Drugie polecenie używa polecenia , Get-Process aby pobrać wszystkie trzy wystąpienia procesu Notatnika i zapisać je w zmiennej $p.

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

Trzecie polecenie używa właściwości Count wszystkich kolekcji, aby sprawdzić, czy istnieją trzy procesy w zmiennej $p.

$p.Count
3

Czwarte polecenie uruchamia metodę Kill we wszystkich trzech procesach w zmiennej $p.

To polecenie działa, mimo że kolekcja procesów nie ma Kill metody.

$p.Kill()

Piąte polecenie używa polecenia Get-Process, aby potwierdzić, że Kill polecenie zadziałało.

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

Aby wykonać to samo zadanie w programie PowerShell 2.0, użyj Foreach-Object polecenia cmdlet , aby uruchomić metodę dla każdego obiektu w kolekcji.

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

Metody ForEach i Where

Począwszy od programu PowerShell 4.0, filtrowanie kolekcji przy użyciu składni metody jest obsługiwane. Umożliwia to korzystanie z dwóch nowych metod w przypadku obsługi kolekcji ForEach i Where.

Więcej informacji o tych metodach można przeczytać w about_arrays

Zobacz też

about_Objects

about_Properties

Get-Member