Concordo com o dangph de que o -exclude não funciona como esperado.
Ao usar -notmatch, você pode criar um padrão de regex com um ou |
.
Isso funciona aqui com o $ revisado:
$Include = @('*.zip','*.rar','*.tar','*.7zip')
$exclude = [RegEx]'^C:\Windows|^C:\Program Files'
Get-ChildItem "C:\" -Include $Include -Recurse -Force -EA 0|
Where FullName -notmatch $exclude|
Select-Object -ExpandProperty FullName
EDit Como as pastas excluídas são de primeiro nível, é muito mais rápido não interagir de forma alguma, portanto, uma abordagem em duas etapas é mais eficiente:
$Include = @('*.zip','*.rar','*.tar','*.7zip')
$exclude = [RegEx]'^C:\Windows|^C:\Program Files'
Get-ChildItem "C:\" -Directory |
Where FullName -notmatch $exclude|ForEach {
Get-ChildItem -Path $_.FullName -Include $Include -Recurse -Force -EA 0|
Select-Object -ExpandProperty FullName
}