-match
внутренне вызовет Regex.Match()
в фоновом режиме, который, в свою очередь, будет захватывать только первое совпадение.
Либо используйте Select-String
с переключателем -AllMatches
:
($string |Select-String '(?<=\[)[^]]+(?=\])' -AllMatches).Matches.Value
Или вызвать Regex.Matches()
напрямую:
[regex]::Matches($string, '(?<=\[)[^]]+(?=\])').Value