(21)Powershell中的通配符
1. 使用通配符进行文件的模糊查找
Powershell 中的通配符可以实现模糊查找, 也就是说可以对一组项(而不是单个项)进行查找。例如,如果想查找 D:\MyPowerShell 目录中所有扩展名为 .ps1 的文件,可以执行以下命令:
PS C:\test> Get-ChildItem C:\test\*.ps1
目录: C:\test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2024/1/9 15:38 1719 getRunuser.ps1
-a---- 2024/1/9 15:33 1719 getUser.ps1
在以上语句中,星号 (*) 用作通配符,用于指定 .ps1 文件扩展名之前可以存在任意字符。因为命令中包含文件扩展名,所以该命令返回的所有文件都必须带有该扩展名,但不限文件名。
Powershell 中的大多数 cmdlet 的某些参数都接受通配符。每个 cmdlet 的帮助中都说明了哪些参数允许使用通配符,哪些可以使用通配符。对于接受通配符的参数,它们的用法是不区分大小写的。例如,?n 将返回 An、an、In、in、On、和 on。例如:
PS C:\test> Get-Help Get-Process -Parameter Name
-Name <System.String[]>
Specifies one or more processes by process name. You can type multiple process names (separated by commas) and use wildcard characters. The param
eter name (`Name`) is optional.
是否必需? False
位置? 0
默认值 None
是否接受管道输入? True (ByPropertyName)
是否接受通配符? True
从上面的语句参数说明中,可知 Get-Process 的-Name 参数可以接受通配符,所以才可以对进程名进行模糊查找。例如:
PS C:\test> Get-Process *system
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
8221 0 44 128 17,641.59 4 0 System
通配符在单个参数可以混合使用。例如,要查找 D:\MyPowerShell 目录下所以以字母m到q开头的.ps1 文件,则执行以下命令:
PS C:\test> Get-ChildItem C:\test\[a-q]*.ps1
目录: C:\test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2024/1/9 15:38 1719 getRunuser.ps1
-a---- 2024/1/9 15:33 1719 getUser.ps1
以上命令中使用范围通配符 ([m-q]) 来指定文件名应以字母 m 到 q 开头,并以 .ps1 为扩展名的所有文件。
2. 使用通配符对关键字的模糊查找
使用通配符可以对指定的关键字进行模糊查找。例如想查找当前目录(D:\MyPowerShell)中,包含指定关键字 "ERROR" 的所有文本文件(.txt),可以执行以下语句:
PS C:\test> Select-String -Pattern ("service") *.ps1
getRunuser.ps1:15:$uri = "https://dev110798.service-now.com/api/now/table/sys_user?sysparm_query=first_name%3Datcc1&sysparm_fields=first_name%2Cemail
%2Clast_name&sysparm_limit=10"
getRunuser.ps1:38:$uri1 = "https://dev95323.service-now.com/api/now/import/imp_user"
getUser.ps1:15:$uri = "https://dev110798.service-now.com/api/now/table/sys_user?sysparm_query=first_name%3Datcc1&sysparm_fields=first_name%2Cemail%2C
last_name&sysparm_limit=10"
getUser.ps1:38:$uri1 = "https://dev95323.service-now.com/api/now/import/imp_user"
查询的结果的会显示哪些文件包含指定的关键字,并出现在哪一行.
字符串的模糊搜索和查找在分析log 文件时会非常有用。 而 Select-String 可以使不用打开文件就文件中的关键字进行搜索,尤其是当不确定具体路径是,使用该命令会非常方便。
总结
Powershell 中的通配符可以实现文件以及指定关键字的模糊查找, 通配符只是正则表达式的一部分,所以也可以使用正则表达式进行模式匹配以及模糊查找。