Полезный ответ Wiktor Stribiżew решает вашу проблему, предоставляя необходимое регулярное выражение, которое включает в себя отрицательное утверждение ((?!...)
).
Этот ответ показывает вам альтернативу, которая позволяет избежать сложности требуемого регулярного выражения.
PowerShell имеет много гибких командлетов и строковых операторов, и хотя их объединение в конвейер может оказаться не самым быстрым вариантом, оно допускает концептуально простые решения:
$invoke.name -split '::' -like 'puppet_*' |
Sort-Object -Unique |
Where { $_ -notin 'puppet_enterprise', 'puppet_metrics_collector', 'puppet_agent'}
Примечание. Вышеприведенное предполагает, что в любой данной строке ::
-разделенные токены, начинающиеся с puppet_
, встречаются только как первый токен в этой строке, если таковой имеется; если это предположение не выполняется, требуется дополнительная работа.