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