2012-04-20 2 views
0

Я хотел бы реализовать некоторые пользовательские командлеты, которые фильтруют некоторый объект по имени, и я хотел бы использовать поиск с поддержкой wild-card, например, для обычных командлетов (Get-ChildItem и Get-Process).Фильтрация строк в PowerShell

Как я могу реализовать такой поиск? Есть ли некоторые примеры или даже некоторые повторно используемые компоненты? Любые примеры?

ответ

0

Вы можете определить свой собственный фильтр, соединив коллекцию объектов с Where-Object (или в короткой форме ?).

Например, если вы получаете набор файловых объектов, делая gci (псевдоним Get-ChildItem), вы можете отобразить только те, которые имеют текст log в них, делая это: gci | ?{$_.name -match "log"}.

+0

Спасибо за предложение, но я хотел бы реализовать в рамках командлета, потому что я хотел бы, чтобы фильтровать данные, доступ в базу данных , – fra

+0

Некоторые командлеты имеют фильтры (gci -filter «query»), но фильтры основаны на поставщике (для gci, он будет поставщиком файловой системы) и на самом деле не определены в самих командлетах. – SpellingD

+0

Спасибо, я посмотрю код провайдеров. – fra

1

В большинстве случаев эти типы командлетов используют WildcardPattern class.

Вот пример того, как использовать его непосредственно из командной строки PowerShell:

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