Назад | Перейти на главную страницу

Поиск даты самой последней модификации всех файлов / подпапок во всех каталогах верхнего уровня общего ресурса с помощью PowerShell

У меня есть дерево общих каталогов на файловом сервере Windows 2003, в котором хранится около 100 ГБ данных. Мне нужно найти все каталоги верхнего уровня в этой папке, где указано время последней модификации для каждый файл в каждой подпапке не был изменен синус 1/1/11. По сути, я ищу брошенные акции.

Структура каталогов выглядит примерно так:

-a
--a1
--a2
--a3
----a3_1

-b
--b1
--b2

-c
--c1
----c1_1

etc

Что я хочу сделать, так это узнать, если все это не скрытый файл под a, b или c, имеет дату модификации до или после 01.01.11.

Пока что я могу найти время модификации каждого файла через год:

get-childitem "\\server\h$\shared" -recurse | where-object {$_.mode -notmatch "d"} |
where-object {$_.lastwritetime -lt [datetime]::parse("01/01/2011")}

Я не знаю, как это сделать, так это проверить каждый каталог верхнего уровня по отдельности, чтобы убедиться, что все файлы, содержащиеся в нем, старше года. Любые идеи?

Я думаю, ты просишь посмотреть только на файл время модификации. Не уверен, что вы хотите делать с папками, которые содержат только подпапки, которые не менялись в течение года. Я также не уверен, что "каждый каталог верхнего уровня", ты имеешь в виду a, b, c или a, a1, a2...

Следующее смотрит на все каталоги, и отображать их только в том случае, если они не содержат файлов, написанных за последний год. Сообщите мне, даст ли это результат, который вы ищете:

$shareName = "\\server\share"
$directories = Get-ChildItem -Recurse -Path $path | Where-Object { $_.psIsContainer -eq $true }

ForEach ( $d in $directories ) { 
    # Any children written in the past year?
    $recentWrites = Get-ChildItem $d.FullName | Where-Object { $_.LastWriteTime -gt $(Get-Date).AddYears(-1) } 
    If ( -not $recentWrites ) {
        $d.FullName
    }
}

Отредактируйте согласно вашему комментарию. Если вы хотите получить только каталоги верхнего уровня, которые не содержат файлов, измененных за последний год, попробуйте следующее. Обратите внимание, что на очень глубоких / больших общих ресурсах это может занять некоторое время.

$shareName = "\\server\share"
# Don't -recurse, just grab top-level directories
$directories = Get-ChildItem -Path $shareName | Where-Object { $_.psIsContainer -eq $true }
ForEach ( $d in $directories ) { 
    # Get any non-container children written in the past year
    $recentWrites = Get-ChildItem $d.FullName -recurse | Where-Object { $_.psIsContainer -eq $false -and $_.LastWriteTime -gt $(Get-Date).AddYears(-1) } 
    If ( -not $recentWrites ) {
        $d.FullName
    }
}