Привет, новый для Powershell, только когда-либо заглушил существующие скрипты или работал с bash раньше.Powershell, работающий с каталогами
Я пытаюсь перечислить все каталоги с одним критерием, а затем выполнить оценку их содержимого.
В основном я хочу рекурсивно искать все dirs, называемые Обработанные, и удалять все предметы в течение 31 дня. То, что я так и для являются команды ниже:
$limit = (Get-Date).AddDays(-31)
$path = "C:\Users\mark.hodgson\Desktop\New folder"
$dirs = Get-ChildItem $path -Recurse -Directory| Where-Object {$_.PSIsContainer -eq $true -and $_.Name -match "Processed"} |select-object Fullname
Когда эхо $ директорий список выглядит хорошо, как показано ниже:
PS C:\Users\mark.hodgson\Desktop\New folder> echo $dirs
FullName
--------
C:\Users\mark.hodgson\Desktop\New folder\Folder1\FolderA\Processed
C:\Users\mark.hodgson\Desktop\New folder\Folder1\FolderB\Processed
C:\Users\mark.hodgson\Desktop\New folder\Folder2\Processed
C:\Users\mark.hodgson\Desktop\New folder\Folder3\Processed
C:\Users\mark.hodgson\Desktop\New folder\Folder4\Processed
C:\Users\mark.hodgson\Desktop\New folder\Folder5\Processed
, но когда я пытаюсь работать с деталями, как ниже, или даже просто сделать ls, он возвращает или удаляет все папки с моего рабочего стола!
$dirs | ForEach-Object { Get-ChildItem -Recurse -Force | Where-Object { !$_.PSIsContainer -eq $_.LastWriteTime -lt $limit } | Remove-Item -Force }
же, если я использую для $ реж в $
каталогия должен получать основы здесь не так! Я могу жестко кодировать пути, но хотел бы сделать правильную работу.
Приветствия,
hodgm
$ _ PsIsContainer -eq $ _ LastWriteTime -lt $ ограничить? Здесь ваше состояние не так. Замените -eq на - и, я думаю. –
'-eq' в линии lat должен быть' -and', я бы добавил '-whatif', пока тестирование на remove-item – LotPings
'! 'Должно быть' -not'; или вы можете заменить '-eq' (равно) на' -ne' (не равно). http://ss64.com/ps/syntax-compare.html – JohnLBevan