Filtering for strings in PowerShell

2019-09-18 05:31发布

问题:

I would like to implement some custom cmdlets that filter some object by name, and I would like to use wild-card enabled search like for common cmdlets (Get-ChildItem and Get-Process).

How can I implement this kind of search? Are there some examples or even some reusable components? Any examples?

回答1:

For the most part, these types of cmdlets leverage the WildcardPattern class.

Here's an example of how to use it directly from the PowerShell prompt:

PS>$w = New-Object System.Management.Automation.WildcardPattern "*foo*"
PS>$w.IsMatch("foobar")
True
PS>$w.IsMatch("barbar")
False


回答2:

You can define your own filter by piping a collection of objects to Where-Object (or the short-form ?).

For example, if you get a collection of file objects by doing gci (alias of Get-ChildItem), you can display only the ones that have the text log in them by doing this: gci | ?{$_.name -match "log"}.