我被要求使用 提取命令Get-Command,其中動詞是get, setor之一,convertTo名詞以 any of C, Xor開頭V。
這是我到目前為止:
Get-Command | ?{$_ -like "set[-][CXV]*"} #Prints all commands that start with Set
我苦苦搜索多個動詞是要么set,get或ConvertTo。我嘗試了幾種不同的方法,但都無濟于事。
uj5u.com熱心網友回復:
這是我將如何做到的......使用Get-Command內置引數 = -Verb。
代碼做什么...
- 創建要匹配的動詞串列
- 創建一個正則運算式 char-at-start-of-string 串列模式
- 獲取具有所需動詞的命令
- 過濾以所需字符開頭的名詞的命令
- 按
Verbthen對結果命令進行排序Noun
編碼 ...
$VerbList = @(
'get'
'set'
'convertto'
)
$Regex_NounStartsWith = '^[cxv]'
Get-Command -Verb $VerbList |
Where-Object {
$_.Noun -match $Regex_NounStartsWith
} |
Sort-Object -Property Verb, Noun
截斷的結果...
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet ConvertTo-Csv 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet ConvertTo-Xml 3.1.0.0 Microsoft.PowerShell.Utility
Function Get-CallerPreference 5.31.0 PSLog
Function Get-CallerPreference 5.22.0 PSLog
Cmdlet Get-Certificate 1.0.0.0 PKI
Cmdlet Get-CertificateAutoEnrollmentPolicy 1.0.0.0 PKI
Cmdlet Get-CertificateEnrollmentPolicyServer 1.0.0.0 PKI
Cmdlet Get-CertificateNotificationTask 1.0.0.0 PKI
Cmdlet Get-ChildItem 3.1.0.0 Microsoft.PowerShell.Management
[*...snip...*]
uj5u.com熱心網友回復:
但是,您開始正確,-like只允許匹配通配符模式,而-match讓您匹配正則運算式模式,您的正則運算式只需要進行一些調整:
Get-Command | ?{$_ -match "((^set)|(^get)|(^convertto))-[CXV] "}
這可以進一步縮短為:
Get-Command | ?{$_ -match "((^[sg]et)|(^convertto))-[CXV] "}
如果您想要命令的排序輸出:
Get-Command | ?{$_ -match "((^[sg]et)|(^convertto))-[CXV] "} | Sort
參考:關于比較運算子
uj5u.com熱心網友回復:
Get-Command的-Name引數接受通配符運算式,它允許您直接按名詞部分的第一個字符過濾:-Name *-[CXV]*雖然你可以不直接結合
-Name與-Verb被所示引數李戴利的有用的答案,你可以通過執行后過濾,.Verb財產的的[System.Management.Automation.CommandInfo]情況下,即Get-Command輸出:
Get-Command -Name *-[CXV]* | Where-Object Verb -in Get, Set, ConvertTo
另一種選擇,使用單個Where-Object腳本塊完全避免模式匹配($_.Noun[0]回傳名詞部分的第一個字符):
Get-Command |
Where-Object {
$_.Noun[0] -in 'C', 'X', 'V' -and $_.Verb -in 'Get', 'Set', 'ConvertTo'
}
另一種選擇是使用正則運算式,如Suraj 的有用答案所示- 盡管使用上面的通配符/面向物件的解決方案可以避免增加的復雜性。
至于你嘗試了什么:
$_ -like "set[-][CXV]*"
通配符運算式不夠復雜,無法匹配給定的一組子字串中的一個(只能匹配一組單個字符,例如[CXV]在您的嘗試中)。
解決方案是要么匹配僅對*-[CXV]*名詞部分進行過濾,并為動詞部分添加一個額外的比較-and(例如$_.Verb -in 'Get', 'Set', 'ConvertTo',如上所示),要么使用正則運算式代替,如 Suraj 的回答所示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/368902.html
下一篇:將所有檔案重命名為.txt
