В дополнение к полезный ответ FoxDeploy :
С коллекциями, которые уже находятся в памяти или легко помещаются , вы можете использовать перечисление членов для более удобного синтаксиса, который также приводит к гораздо более быстрому выполнению:
@($array.Name) -like $string # returns sub-array of matching elements
-like
, когда дан массив в качестве LHS, действуетв качестве фильтра : возвращаются только те элементы массива, которые соответствуют шаблонному выражению в RHS (также в виде массива).
Примечание необходимость в @(...)
, чтобы гарантировать, что$array.Name
- это массив , потому что массив с одним элементом приведет к тому, что свойство .Name
будет возвращено как scalar (одна строка),в этом случае -like
будет возвращать логическое ($true
или $false
), а не действовать как фильтр .
Также обратите внимание, что много командлетов PowerShell напрямую поддерживают подстановочные выражения в качестве значений параметров :
Принимая Get-Service
Например, его (подразумеваемый) параметр -Name
поддерживает подстановочные знаки:
Get-Service *router* # returns all services whose Name contains "router"
К определяет поддержку подстановочного знака данного параметра командлета :
PS> Get-Help Get-Service -Parameter Name
-Name <String[]>
Specifies the service names of services to be retrieved. Wildcards are permitted. By default, this cmdlet gets all of the services on the computer.
Required? false
Position? 1
Default value None
Accept pipeline input? True (ByPropertyName, ByValue)
Accept wildcard characters? false
Это должно быть значением Accept wildcard characters?
, равным true
, которое указывает на поддержку выражений с подстановочными знаками, однако, к сожалению, не надежно , поэтому также проверьте параметр description ;здесь дескрипторная часть Wildcards are permitted
предоставляет информацию.
Эта проблема GitHub описывает проблему и просит обеспечить надежное программное обнаружение поддержки подстановочных знаков.