共用方式為


關於方法

簡短描述

說明如何使用方法來對 PowerShell 中的物件執行動作。

完整描述

PowerShell 會使用物件來代表資料存放區中的專案或電腦的狀態。 例如,FileInfo 物件代表檔案系統磁碟機中的檔案,ProcessInfo 物件代表電腦上的處理程序。

物件具有屬性,可儲存關於物件的相關資料,以及可讓您變更物件的方法。

「方法」是一組指示,指定可對物件執行的動作。 例如, FileInfo 物件包含複製物件所代表之檔案的 CopyTo 方法 FileInfo

若要取得任何物件的方法,請使用 Get-Member Cmdlet。 請使用其MemberType屬性,其值為 "Method"。 下列命令會取得處理程序物件的方法。

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

若要執行或「叫用」物件的方法,請輸入點 (.)、方法名稱及一組括號 "()"。 如果方法包含引數,請將引數值包含在括號內。 即使沒有引數,每個方法呼叫仍需要括號。 如果方法接受多個引數,則應該以逗號分隔。

例如,下列命令會叫用處理程序的 Kill 方法,以結束電腦上的 [記事本] 處理程序。

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

這個範例可以藉由結合上述語句來縮短。

(Get-Process Notepad).Kill()

Get-Process命令會括在括弧中,以確保它會在叫用 Kill 方法之前執行。 Kill然後會在傳回的物件上叫用方法 Process

另一個非常有用的方法是 Replace 字串的方法。 Replace方法會取代字串中的文字。 在下列範例中,點(.)可以緊接在字串的結尾引號之後。

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

如先前範例所示,您可以使用命令、變數中的物件或任何產生物件的專案(例如以引號括住的字串),在您取得的物件上叫用方法。

從 PowerShell 4.0 開始,支援使用動態方法名稱來叫用方法。

瞭解方法

若要了解物件的方法定義,請移至 MSDN 中物件類型的說明主題,並尋找其方法頁面。 例如,下列頁面描述處理程式物件的方法。

若要判斷方法的引數,請檢查方法定義,這就像是 PowerShell Cmdlet 的語法圖。

方法定義可能會有一或多個方法簽章,類似于 PowerShell Cmdlet 的參數集。 簽章會顯示叫用方法的所有有效命令格式。

例如,類別的 CopyTo 方法 FileInfo 包含下列兩個方法簽章:

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

第一個方法簽章採用目的地檔案名稱 (和路徑)。 下列範例會使用第一個 CopyTo 方法,將檔案複製 Final.txtC:\Bin 目錄。

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

注意

不同于 PowerShell 的引數模式,物件方法會以運算式模式執行,這是 PowerShell 建立所在的 .net framework 傳遞。 在運算式模式中,不允許使用bareword引數(不具引號的字串)。 您可以在 [差異路徑] 中看到這個參數,與作為引數的路徑一樣。 您可以在about_Parsing中閱讀剖析模式的詳細資訊。

第二個方法簽章採用一個目的地檔案名稱,和一個決定是否應覆寫目的地檔案 (如已存在) 的布林值。

下列範例會使用第二個 CopyTo 方法,將檔案複製 Final.txtC:\Bin 目錄,並覆寫現有的檔案。

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

純量物件和集合的方法

特定類型的單一 (「純量」) 物件方法通常不同於同類型物件集合的方法。

例如,每個進程都有一個 Kill 方法,但是進程的集合沒有 Kill 方法。

從 PowerShell 3.0 開始,PowerShell 會嘗試防止因為純量物件和集合的不同方法而產生的腳本錯誤。

如果您提交集合,但要求的方法僅存在於單一(純量)物件上,則 PowerShell 會在集合中的每個物件上叫用方法。

如果方法存在於個別的物件和集合上,則只會叫用集合的方法。

這項功能也適用於純量物件和集合的屬性。 如需詳細資訊,請參閱about_Properties

範例

下列範例會在處理程序物件的集合上執行個別處理程序物件的 Kill 方法。 此範例僅適用于 powershell 3.0 和更新版本的 PowerShell。

第一個命令會啟動「記事本」處理程序的三個執行個體。 第二個命令會使用 Get-Process 命令取得「記事本」進程的全部三個實例,並將它們儲存在 $ p 變數中。

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

第三個命令會使用所有集合的 Count 屬性來確認 p 變數中有三個進程 $ 。

$p.Count
3

第四個命令會在 p 變數中的所有三個進程上執行 Kill 方法 $ 。

即使進程的集合沒有方法,此命令仍可運作 Kill

$p.Kill()

第五個命令會使用 Get-Process 命令來確認 Kill 命令是否正常運作。

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

若要在 PowerShell 2.0 上執行相同的工作,請使用 Cmdlet,在 Foreach-Object 集合中的每個物件上執行方法。

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

ForEach 和 Where 方法

從 PowerShell 4.0 開始,支援使用方法語法進行集合篩選。 這可讓您在處理集合和時使用兩個新的方法 ForEach Where

您可以在 about_arrays 中深入閱讀這些方法

另請參閱

about_Objects

about_Properties

Get-Member