У меня есть сценарий Powershell, который должен удалять элементы старше X дней. Не работает полностью. Он удаляет некоторые файлы, но не все файлы. Когда я запускаю сценарий без | Remove-Item -Force, отображаются все файлы, соответствующие требованиям. Итак, я знаю, что инструкция where работает.

Почему Remove-Item -Force не удаляет все элементы, которые соответствуют требованиям, установленным в операторе where, и как это можно исправить?

$deleteFiles = Get-Childitem $fullTargetPath -Recurse
| Where {$_.LastWriteTime -lt (Get-Date).AddDays(-10)} | Remove-Item -Force
1
Ben Scotch 17 Дек 2013 в 21:25
Пожалуйста, попробуйте поместить параметр -whatif после remove-item, чем вы увидите, какое действие будет предпринято.
 – 
RayofCommand
17 Дек 2013 в 21:30
What if: Performing operation "Remove File" on Target для всех элементов, но они не удаляются из папки.
 – 
Ben Scotch
17 Дек 2013 в 21:36
У вас возникают ошибки для файлов, которые он пропускает?
 – 
Benjamin Hubbard
17 Дек 2013 в 22:05
Попробуйте Remove-Item -Force прямо на одном из пропускаемых файлов.
 – 
Benjamin Hubbard
17 Дек 2013 в 22:06
Я сделал это прямо с файлами, и это сработало
 – 
Ben Scotch
17 Дек 2013 в 22:23

1 ответ

Лучший ответ

Непосредственно перед «Remove-Item» добавьте «Foreach».

Так например:

$deleteFiles = Get-Childitem $fullTargetPath -Recurse | 
    Where {$_.LastWriteTime -lt (Get-Date).AddDays(-10)} | 
    Foreach { Remove-Item $_.FullName -Force}
1
Norman Skinner 18 Дек 2013 в 05:08
1
Казалось, это сработало! но я все еще не понимаю, почему ваше решение сработало, а мое - нет. WhatIf показал, что действие имеет место, но на самом деле этого не произошло.
 – 
Ben Scotch
18 Дек 2013 в 23:51