主題
    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





目錄