2015-12-22 4 views
0

У меня сценарий, в котором сценарий powershell должен удалять файлы журнала и папки журнала в пути, скажем, что они находятся под контуром C: \ MLA \ logs.Ошибка Powershell при удалении файлов и папок

Ниже приведен сценарий, который я использую, он завершает удаление файлов, но проблема в том, скрипт не работает для удаления папок, ошибка отображается что-то вроде не удалось найти часть пути

C: \ MLA \ logs \ ART_Daily.

ниже сценарий

$root=C:\MLA\logs 
$limit=(Get-Date).AddDays(-90) 

get-childitem -Path $root -Recurse -force | 
      where-Object {(($_.name -match 'Daily|ART|ABC|IIC') -or ($_.PSIsContainer -match 'Daily|ART|ABC|IIC')) -and ($_.CreationTime -lt $limit)} |Remove-Item -recurse -Force 

В $ имя проверяет файлы (если имена трубопроводных являются частью имени файла для любого файла) в корневом каталоге и $ .PSIsContainer проверить Папки 9 f имена, которые были переданы, являются частью имени папки для любой папки) внутри корневого пути, который параметризирован.

Можете ли вы мне помочь.

ответ

1

Вы должны исправить свой фильтр для стартеров:

$_.name -match 'Daily|ART|ABC|IIC' 

будет соответствовать файлы и папки с таким именем.

$_.PSIsContainer -match 'Daily|ART|ABC|IIC' 

ничего не найдут, потому что PSIsContainer свойство булево (это контейнер или нет: True/False).

+0

$ _. PSIsContainer -match 'Daily | ART | ABC | IIC' -eq $ Истинно, это должно быть что-то вроде этого ??? – Sri

+1

Поиск файлов: '$ _. PSIsContainer -eq $ false' или для папок' $ _. PSIsContainer -eq $ true'. Конечно, вы не можете получить все файлы и папки таким образом: либо/или. – ConanW

+0

В целом вам было бы лучше использовать параметры '-filter',' -include' и '-exclude' Get-ChildItem в любом случае, поскольку они передают фильтрацию поставщику файловой системы, который быстрее. – ConanW

Смежные вопросы