медленно, ну потому что медленно :)
Для доступа к правилам оно использует всякие DCOM интерфейсы, что небыстро по определению
Вон как там всё непросто
Для ускорения можно попробовать в обратную сторону
Get-NetFirewallApplicationFilter | Where-Object { $_.Program -eq $exePath } | Get-NetFirewallRule
Причём мой вариант будет правильнее. потому что он на выходе получает не ApplicationFilter, а правило, которое можно проверить. Может оно вообще разрешающее, а не запрещающее и его надо менять/удалять.
А проверка нескольких exe должна делаться не через цикл, как может показаться на первый взгляд, а через массив
$progs = 'exe1.exe', 'exe2.exe'
Get-NetFirewallApplicationFilter | Where-Object { $_.Program -in $progs } | Get-NetFirewallRule
P.S. А вот от такого вообще надо избавляться
| Where-Object { $_ }
Это бессмысленный код в данном контексте