主题
    about_methods

简短说明
    说明如何在 Windows PowerShell 中使用方法对对象执行操作。
 

详细说明
    Windows PowerShell 使用结构化的信息集合(称为对象)表示数据存储中的项目或计算机的状态。
    例如,在 Windows PowerShell 中访问文件时,并不处理实际文件。而是处理 FileInfo 对象,这
    是一种充当文件代理的对象。


    大多数对象都包含方法。方法是一组说明,它们指定可以用对象执行的特定操作。例如,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()


    该命令也使用与变量关联的字符串对象的 ToUpper 方法,此变量包含 Get-ChildItem 命令返回的
    文件名。


    在某些情况下,方法需要参数来指示该方法的操作。例如,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 会报告以下错误:


        Exception calling "CopyTo" with "1" argument(s): "The file 
        'c:\bin\final.txt' already exists.".


    在第二个方法签名中,将像第一个示例中一样传递目标文件名,但还要传递布尔值,
    以指定是否要覆盖目标位置中的同名现有文件,如下例所示:


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


    传递布尔值时,必须使用 $True 变量,它是由 Windows PowerShell 自动创建的。$True 变量
    包含"true"布尔值。(可以想到,$False 变量包含"false"布尔值。)


另请参阅
    about_Objects
    Get-Member





目录