1 2 3 4 5 6 7 8 9 10 11 12 13 | function Test -Command { param( $Command ) $found = $false $match = [Regex]::Match( $Command , "(?<Verb>[a-z]{3,11})-(?<Noun>[a-z]{3,})" , "IgnoreCase" ) if( $match .Success) { if( Get-Command -Verb $match .Groups[ "Verb" ] -Noun $match .Groups[ "Noun" ]) { $found = $true } } $found } |
Here is a breakdown of the regular expression used.
- The first group in the expression is for the verb, which is 3 to 11 characters long (consult the approved verb list).
- The second group in the expression is for the noun, which can be 3 or more characters long. I limit the acceptable text to only alphabetical characters and by adding the "IgnoreCase" option we can just use "a-z".
So what would an article be without a quick example.
PS C:\> Test-Command -Command Get-Process True PS C:\> Test-Command -Command Get-Proc* False
Finally, if you would like a shortcut which expects an exact match you can try this:
PS C:\> [bool](Get-Command -Name Get-Process -ea 0) True
No comments:
Post a Comment