主題 about_methods 簡短描述 說明在 Windows PowerShell 中如何使用方法,在物件上執行動作。 完整描述 Windows PowerShell 使用所謂「物件」的結構化資訊集合,來表示資料存放區中的項 目或是電腦的狀態。例如,當您在 Windows PowerShell 中存取檔案時,並非使用實 際檔案, 而是 FileInfo 物件,這種物件係做為檔案的 Proxy。 大多數的物件都包含方法。方法是一組指令,指定了可透過物件來執行的特定動作。例如, FileInfo 物件所包含的 CopyTo 方法即可用於複製此物件所代表的檔案。 若要檢視與特定物件相關聯之方法和方法定義的清單,您可以使用 Get-Member Cmdlet。 不過,使用 Cmdlet 的前提是物件必須以下列幾種形式存在:以變數來代表的形式、將某個 命令指定為 Get-Member 命令的引數而建立的物件,或是沿管線向下傳遞的物件。例如, 假設您已指定字串值給 $a 變數,即表示該變數與字串物件相關聯。若要檢視此物件的方 法清單,請在 Windows PowerShell 命令提示字元輸入下列命令: Get-Member -inputobject $a -membertype method 如果您想查看沿管線向下傳遞之物件的相關方法與方法定義,請在管線中使用 Get-Member 命令,如以下範例所示: Get-ChildItem c:\final.txt | Get-Member -membertype method 呼叫方法最常用的方式是在物件參照 (例如變數或運算式) 後面指定方法名稱。物件參照 和方法之間必須以句號分隔。此外,方法名稱後面必須加上括號,將您要傳遞給方法的引 數含括在內。 即使方法簽名碼表示不必傳遞任何引數,仍然需要加上左右括號。 例如,下列命令使用 GetType 方法傳回與 $a 字串物件相關聯的資料型別: $a.GetType() GetType 方法將傳回任意物件的資料型別,而變數則始終代表物件。物件的型別取決於 儲存在該變數中的資料型別而定。 Windows PowerShell 中所執行的每個動作都和物件有關,不論是宣告變數乃至於將命 令整併為單一管線都一樣。 因此,方法可運用在各種不同的情況。例如,您可以使用方法對屬性值採取動作,如下列 命令所示: (Get-ChildItem c:\final.txt).name.ToUpper() 在此範例中,所呼叫的 ToUpper 方法其所屬物件是與 name 屬性相關聯的字串物件 (請注 意,Final.txt 檔案必須位於 C: 磁碟機的根目錄,否則此範例將無法運作)。name 屬 性其實是 Get-ChildItem 命令所傳回之 FileInfo 物件的一個屬性。這不僅展露 Windows PowerShell 的物件導向本質,更印證了您可以對任何可存取的物件呼叫其方 法。 若將 Get-ChildItem 命令輸出儲存至變數,也能達到和前述範例相同的結果,如以下範 例所示: $a = (Get-ChildItem c:\final.txt).name $a.ToUpper() 此命令將 Get-ChildItem 命令傳回的檔案名稱儲存至變數,且同樣使用了與該變數相關 聯之字串物件的 ToUpper 方法。 在某些情況下,方法必須經由引數指引以執行其本身的動作。例如,FileInfo 物件所包含的 MoveTo 方法,可將檔案從某位置移到另一位置。此方法必須以引數指定檔案的目標位置。 下列命令示範如何加上這個引數: (Get-ChildItem c:\final.txt).MoveTo("c:\techdocs\final.txt") Get-ChildItem 命令傳回代表 Final.txt 檔案的 FileInfo 物件,然後使用該物件 的 MoveTo 方法啟動動作,並指定檔案的新位置。 如需得知某個方法的相關引數,請查閱對應的方法定義。方法定義包含一個或多個方法簽 章 (在 Microsoft .NET Framework 中也稱為多載)。方法簽章包含方法的名稱,以 及呼叫方法時必須提供的參數 (零個或以上)。在 Get-Member Cmdlet 顯示畫面中,每 個方法簽章與其前一個簽章之間會以逗號分隔。例如,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 方法會失敗,且 Windows PowerShell 將回 報下列錯誤: 以 "1" 引數呼叫 "CopyTo" 時發生例外狀況: 檔案 'c:\bin\final.txt' 已經存在。 使用第二個方法簽章時,除了傳遞如同第一種情況的目的地檔案名稱之外,還必須傳遞布林值 指定是否覆寫目的地位置上存在的同名檔案,如以下範例所示: (Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true) 每次傳遞布林值時都必須使用 $True 變數,此為 Windows PowerShell 自動建立的變 數。$True 變數中包含 "true" 布林值 (如您預期,$False 變數中則包含 "false" 布林值)。 請參閱 about_Objects Get-Member