支持在 Cmdlet 参数中使用通配符
通常,必须设计一个 cmdlet,以便针对一组资源运行,而不是针对单个资源运行。 例如,cmdlet 可能需要找到具有相同名称或扩展名的数据存储中的所有文件。 设计将针对一组资源运行的 cmdlet 时,必须支持通配符。
注释
使用通配符有时称为 通配符。
使用通配符的 Windows PowerShell Cmdlet
许多 Windows PowerShell cmdlet 支持其参数值的通配符。 例如,几乎每个具有 Name
或 Path
参数的 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 仍支持通配符,但它强制解析为单个位置。