共用方式為


關於方法

簡短描述

描述如何使用方法對 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 中物件類型的幫助主題,並查找其方法頁。 例如,下列頁面說明 System.Diagnostics.Process 進程物件的方法。

若要判斷方法的自變數,請檢閱方法定義,就像PowerShell Cmdlet的語法圖表一樣。

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

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

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

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

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

備註

不同於PowerShell 自變數 模式,物件方法會在 表示式 模式中執行,這是PowerShell所建置的 .NET 架構傳遞。 在 表示式 模式中,不允許 裸字 自變數(未加上批註的字串)。 您可以在差異路徑中將其視為參數,而不是將路徑視為參數。 您可以在 about_Parsing 中深入瞭解剖析模式

第二個方法簽名採用目標檔名和布爾值,該值確定是否應覆蓋目標檔(如果目標檔已存在)。

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

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

標量物件和 Collections 的方法

特定類型的一個(“標量”)物件的方法通常與相同類型的物件集合的方法不同。

例如,每個進程都有一個 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 上執行相同的任務,請使用 Foreach-Object cmdlet 對集合中的每個物件運行該方法。

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

ForEach 和 Where 方法

從 PowerShell 4.0 開始,支援使用方法語法進行集合篩選。 這允許在處理集合 ForEachWhere時使用兩個新方法。

您可以在 about_arrays 深入瞭解這些方法

另請參閱

about_Objects

關於屬性

獲取成員