about_Methods

適用於: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

主題

about_methods

簡短描述

描述如何使用方法對 Windows PowerShell 中的物件執行動作。

詳細描述

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

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

「方法」是一組指示,指定了您可以在物件上執行的動作。例如,FileInfo 物件所包含的 CopyTo 方法即可用於複製此物件所代表的檔案。

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

        PS C:\>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), System.Void WaitForExit()
         WaitForInputIdle          Method     bool WaitForInputIdle(int milliseconds), bool WaitForInputIdle()

若要執行或「叫用」物件的方法,請輸入點 (.)、方法名稱和一組括弧 "()"。如果方法具有引數,請將引數值放入括弧內。即使沒有引數,每一個方法呼叫都仍然需要括弧。

比方說,下列命令會叫用處理序的 Kill 方法來結束電腦上的 [記事本] 處理序。如此一來,[記事本] 的執行個體就會關閉。(Get-Process 命令被放在括弧之中,以確保其在 Kill 方法被叫用之前執行。

        (Get-Process Notepad).Kill()

另一個非常有用的處理序是字串的 Split 方法。Split 方法使用分隔符號字元引數來告訴方法分割字串的地點。

        PS C:\>$a = "Try-Catch-Finally"
        PS C:\>$a.Split("-")
        Try
        Catch
        Finally

如上述範例所示,您可以透過使用命令或變數中的物件,在您取得的物件上叫用方法。

從 Windows PowerShell4.0 開始,支援使用動態方法名稱來叫用方法。

深入了解方法

若要尋找物件方法的定義,請移至 MSDN 中的物件類型主題說明並尋找其方法頁面。例如,下列頁面會描述處理序物件 (System.Diagnostics.Process) 的方法。

         https://msdn.microsoft.com/library/system.diagnostics.process_methods

若要判斷方法的引數,請檢閱方法定義,其類似於 Windows PowerShell Cmdlet 的語法圖表。

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

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

        1. CopyTo(String destFileName)
        2. CopyTo(String destFileName, Boolean overwrite)

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

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

第二個方法簽章會使用目的檔案名稱,以及如果目的檔案名稱已經存在時,會決定是否應該加以覆寫的布林值。

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

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

純量物件和集合的方法

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

比方說,每個處理序都有 Kill 方法,但是處理序的集合並沒有 Kill 方法。

從 Windows PowerShell 3.0 開始,Windows PowerShell 會嘗試避免由於純量物件和集合的不同方法所導致的指令碼錯誤。

從 Windows PowerShell 4.0 開始,支援使用方法語法來篩選集合。

如果您提交一個集合,但要求只存在於單一 (「純量」) 物件的方法時,Windows 會叫用集合中每個物件的方法。

如果方法分別存在個別的物件和集合上,則 Windows PowerShell 不會改變結果。

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

範例

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

第一個命令會啟動 [記事本] 處理序的三個執行個體。第二個命令會使用 Get-Process 命令來取得 [記事本] 處理序的所有三個執行個體並將其儲存在 $p 變數中。

        PS C:\>Notepad; Notepad; Notepad
        PS C:\>$p = Get-Process Notepad
        

第三個命令會使用所有集合的 Count 屬性來驗證在 $p 變數中是否有三個處理序。

        PS C:\>$p.Count
        3

第四個命令會在 $p 變數中所有三個處理序上執行 Kill 方法。

即使處理序的集合沒有 Kill 方法,這個命令依然適用。

        PS C:\>$p.Kill()

第五個命令會使用 Get-Process 命令來確認 Kill 命令有效。

        PS C:\>Get-Process Notepad
        Get-Process : Cannot find a process with the name "notepad". Verify the process name and call the cmdlet again.
        At line:1 char:12
        + get-process <<<<  notepad
            + CategoryInfo          : ObjectNotFound: (notepad:String) [Get-Process], ProcessCommandException
            + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand

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

        PS C:\>$p | Foreach-Object {$_.Kill()}

另請參閱

about_Objects

about_Properties

Get-Member