Предложите пару небольших исправлений синтаксиса (эти изменения не решат вашу проблему, просто лучше синтаксис):
$mysys = 'c:\windows\*' Get-ChildItem -path . -Include *.txt -Exclude $mysys -Recurse
Так или иначе ...
почему это даже происходит в c: \ windows, когда я его исключил
Вы исключаете только вещи в "C: \ windows" из результатов Get-ChildItem. GCI по-прежнему нужно проверять папки, которые вы указали, чтобы проверить, чтобы убедиться, что что-то совпадает, что вызывает ошибку «Отказано в доступе».
Если вы хотите полностью избежать папок, к которым у вас нет доступа, вам нужно будет создать список папок, которые вы хотите проверить с помощью GCI, вместо того, чтобы просто сказать GCI проверить все по текущему пути.
Единственный способ сделать это - в основном та же самая процедура: проверить каждую папку и сохранить список тех, на которых вы не получаете доступ, затем используйте этот список с GCI. В конце концов, вы все равно пытаетесь получить доступ к папкам (и выкидываете ошибку), так что в принципе это не выгодно (ожидайте дополнительной сложности).
Если вам просто не нравится видеть красные ошибки во время выполнения команды, вы можете использовать -ErrorAction
параметр и сказать GCI, чтобы он продолжал молча при ошибке. Например:
Get-ChildItem -path . -Include *.txt -Exclude $mysys -Recurse -ErrorAction SilentlyContinue