支持在 Cmdlet 参数中使用通配符

通常,必须设计一个 cmdlet,以便针对一组资源运行,而不是针对单个资源运行。 例如,cmdlet 可能需要找到具有相同名称或扩展名的数据存储中的所有文件。 设计将针对一组资源运行的 cmdlet 时,必须支持通配符。

注释

使用通配符有时称为 通配符

使用通配符的 Windows PowerShell Cmdlet

许多 Windows PowerShell cmdlet 支持其参数值的通配符。 例如,几乎每个具有 NamePath 参数的 cmdlet 都支持这些参数的通配符。 (尽管大多数具有 Path 参数的 cmdlet 也具有不支持通配符的 LiteralPath 参数。以下命令演示如何使用通配符返回当前会话中名称包含 Get 谓词的所有 cmdlet。

Get-Command get-*

支持的通配符

Windows PowerShell 支持以下通配符。

通配符 说明 示例 匹配 不匹配
* 匹配从指定位置开始的零个或多个字符 a* A、ag、Apple
? 匹配位于指定位置的任何字符 ?n An、in、on
【 】 匹配一系列字符 [a-l]ook 书, 做饭, 看 nook, took
【 】 匹配指定的字符 [bn]ook book, nook 煮,看

设计支持通配符的 cmdlet 时,允许通配符的组合。 例如,以下命令使用 Get-ChildItem cmdlet 检索 C:\Techdocs 文件夹中的所有 .txt 文件,以字母“a”开头到“l”。

Get-ChildItem C:\techdocs\[a-l]\*.txt

上一个命令使用范围通配符 [a-l] 指定文件名应以字符“a”到“l”开头,并使用 * 通配符作为文件名首字母和 .txt 扩展名之间的任何字符的占位符。

以下示例使用范围通配符模式,该模式排除字母“d”,但包括从“a”到“f”的所有其他字母。

Get-ChildItem C:\techdocs\[a-cef]\*.txt

处理通配符模式中的文本字符

如果指定的通配符模式包含不应解释为通配符的文本字符,请使用反引号字符(`)作为转义字符。 在 PowerShell API 中指定文本字符时,请使用单个反引号。 在 PowerShell 命令提示符处指定文本字符时,请使用两个反引号。

例如,以下模式包含两个必须按字面取的括号。

在 PowerShell API 中使用时,请使用:

  • “John Smith '[*']”

在 PowerShell 命令提示符中使用时:

  • “John Smith ''[*'']”

此模式与“John Smith [Marketing]”或“John Smith [开发]”匹配。 例如:

PS> "John Smith [Marketing]" -like "John Smith ``[*``]"
True

PS> "John Smith [Development]" -like "John Smith ``[*``]"
True

Cmdlet 输出和通配符

当 cmdlet 参数支持通配符时,该作通常会生成数组输出。 有时,支持数组输出是没有意义的,因为用户可能只使用单个项。 例如,Set-Location cmdlet 不支持数组输出,因为用户仅设置一个位置。 在此实例中,cmdlet 仍支持通配符,但它强制解析为单个位置。

另请参阅

编写 Windows PowerShell Cmdlet

通配符Pattern 类