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