Я не знаю, почему ваша версия не работает. Он должен работать. Вот более уродливая версия, которая работает.
$p = "subject=([A-Z\.]+),"
select-string -path *.txt -pattern $p | % {$_ -match $p > $null; $matches[1]}
Редактировать. Пояснения к данту:
-match
- оператор сопоставления регулярного выражения:
>"foobar" -match "oo.ar"
True
> $null
просто подавляет запись True на выход. (Попробуйте удалить его.) Существует командлет, который делает то же самое, имя которого я не помню в данный момент.
$matches
- магическая переменная, в которой хранится результат последней операции -match
.