Sugira algumas pequenas correcções de sintaxe (estas alterações não irão resolver o seu problema, é apenas uma melhor sintaxe):
$mysys = 'c:\windows\*'
Get-ChildItem -path . -Include *.txt -Exclude $mysys -Recurse
De qualquer forma ...
why is it even going under c:\windows when I excluded it
Você está excluindo apenas as coisas em "C: \ windows" dos resultados de Get-ChildItem. O GCI ainda precisa verificar nas pastas que você pediu para verificar se há algo correspondente, o que causa o erro de acesso negado.
Se você quiser evitar completamente as pastas às quais não tem acesso, precisará criar uma lista de pastas que deseja verificar com o GCI, em vez de apenas informar o GCI para verificar tudo no caminho atual.
A única maneira de fazer isso é basicamente o mesmo procedimento: marque todas as pastas e mantenha uma lista daquelas que você não tem acesso negado, então use essa lista com o GCI. No final, você ainda está tentando acessar as pastas (e lançando o erro) de qualquer maneira, então não há basicamente nenhum ganho em fazer isso (espere complexidade adicional).
Se você simplesmente não gostar de ver os erros vermelhos ao executar o comando , poderá usar o -ErrorAction
e informe ao GCI para continuar em silêncio sobre erros. Por exemplo:
Get-ChildItem -path . -Include *.txt -Exclude $mysys -Recurse -ErrorAction SilentlyContinue