【发布时间】:2017-08-09 15:27:50
【问题描述】:
我正在尝试构建一个脚本,可用于根据上次访问日期删除旧文件。作为脚本的一部分,我想查询每个子文件夹,查找过去 X 天内未访问的文件,在找到的文件的同一文件夹中创建一个日志,并在日志中记录文件详细信息,然后删除这些文件。
我认为我需要的是一个嵌套循环,循环 1 将获取每个子文件夹 (Get-ChildItem -Directory -Recurse),然后对于找到的每个文件夹,第二个循环检查所有文件的最后访问日期,如果超出限制,则将文件详细信息附加到文件夹中的日志文件(供用户参考)以及主日志文件(供 IT 管理员)
循环 1 正在按预期工作并获取子文件夹,但我无法让内部循环通过文件夹中的对象递归,我试图在第一个循环中使用 Get-ChildItem,这是正确的方法吗?
下面的代码示例,我添加了伪来演示逻辑,它确实是我需要帮助的循环:
# Set variables
$FolderPath = "E:TEST_G"
$ArchiveLimit = 7
$ArchiveDate = (Get-Date).AddDays(-$ArchiveLimit)
$MasterLogFile = "C:\Temp\ArchiveLog $(Get-Date -f yyyy-MM-dd).csv"
# Loop 1 - Iterate through each subfolder of $FolderPath
Get-ChildItem -Path $FolderPath -Directory -Recurse | ForEach-Object {
# Loop 2 - Check each file in the Subfolder and if Last Access is past
# $ArchiveDate take Action
Get-ChildItem -Path $_.DirectoryName | where {
$_.LastAccessTime -le $ArchiveDate
} | ForEach-Object {
# Check if FolderLogFile Exists, if not create it
# Append file details to folder Log
# Append File & Folder Details to Master Log
}
}
【问题讨论】:
标签: powershell recursion filesystems data-management