Чтобы исключить определенные папки из поиска в PowerShell, можно использовать комбинацию Get-ChildItem для получения элементов и Where-Object для фильтрации путей, которые не должны учитываться.
Проблема с параметром `-Exclude` заключается в том, что он применяется ко всем элементам в результате, не только к папкам. Также он смотрит только на имена, без учета пути, и трудно предсказать его поведение в сочетании с `-Recurse`.
Вот пример скрипта PowerShell, который рекурсивно ищет файлы с расширением .exe, исключая папки `Windows` и `123`:
```powershell
$excludedFolders = @('C:\Windows', 'C:\123') # задаем папки для исключения
# Получаем все файлы .exe, за исключением тех, что лежат в исключенных папках
Get-ChildItem -Path C:\ -Recurse -Force -File -Filter *.exe |
Where-Object {
# Проверяем, что полный путь (FullName) файла не начинается с одного из путей исключенных папок
$fullPath = $_.FullName
-not ($excludedFolders | Where-Object { $fullPath -like "$_*" })
} |
Out-File -FilePath C:\123\poisk.txt
```
В этом примере используется `Where-Object` для фильтрации файлов, путь которых не начинается с путей, указанных в `$excludedFolders`. Стоит обратить особое внимание на правильность составления путей в `$excludedFolders`, так как они должны быть точными и соответствовать тем папкам, которые вам нужно исключить.
Этот метод хорошо работает, если у вас есть конкретный список папок для исключения. Если же названия исключаемых папок могут встречаться в разных местах в структуре каталогов и вы хотите исключить их все, то скрипт надо немного усложнить:
```powershell
Get-ChildItem -Path C:\ -Recurse -Force -File -Filter *.exe |
Where-Object {
# Проверяем, что ни один из родительских путей не содержит исключенных имен папок
$parent = $_.Directory
while ($parent -ne $null) {
if ($parent.Name -eq 'Windows' -or $parent.Name -eq '123') {
return $false
}
$parent = $parent.Parent
}
return $true
} |
Out-File -FilePath C:\123\poisk.txt
```
Этот второй пример включает проверку каждой папки в иерархии пути файла с целью исключения всех файлов, родительская директория которых содержит имя 'Windows' или '123'.