如何编写Powershell脚本来检查上次将文件添加到文件夹的时间?

如何编写Powershell脚本来检查上次将文件添加到文件夹的时间?,powershell,loops,recursion,foreach,report,Powershell,Loops,Recursion,Foreach,Report,我目前正在编写一个脚本,用于检查目录中的每个文件夹上一次向每个文件夹写入文件的情况。我很难弄清楚如何获取文件最后一次写入文件夹的时间,而不仅仅是检索文件夹的创建日期 我尝试过使用Poweshell的递归方法,但不知道如何正确设置它。现在,脚本成功地将每个文件夹的名称打印到Excel电子表格,并打印每个文件夹的上次写入时间,这是不正确的信息 $row = 2 $column = 1 Get-ChildItem "C:\Users\Sylveon\Desktop\Test"| ForEach-O

我目前正在编写一个脚本,用于检查目录中的每个文件夹上一次向每个文件夹写入文件的情况。我很难弄清楚如何获取文件最后一次写入文件夹的时间,而不仅仅是检索文件夹的创建日期

我尝试过使用Poweshell的递归方法,但不知道如何正确设置它。现在,脚本成功地将每个文件夹的名称打印到Excel电子表格,并打印每个文件夹的上次写入时间,这是不正确的信息

$row = 2

$column = 1

Get-ChildItem "C:\Users\Sylveon\Desktop\Test"| ForEach-Object {     

    #FolderName
    $sheet.Cells.Item($row,$column) = $_.Name
    $column++
    #LastBackup
    $sheet.Cells.Item($row,$column) = $_.LastWriteTime
    $column++
    #Increment to next Row and reset Column
    $row++
    $column = 1
}

脚本的当前状态会将每个文件夹名称打印到报告中,但会给出文件夹的创建日期,而不是文件上次写入该文件夹的日期。

以下内容可用于获取当前目录中任何文件的最新编辑日期

Get-ChildItem | Sort-Object -Property LastWriteTime -Descending | Select-Object -first 1 -ExpandProperty "LastWriteTime"
Get ChildItem
获取目录中的项目

排序对象
-Property LastWriteTime
-Descending
按写入时间排序,最晚的优先

选择对象
-first 1
-ExpandProperty“LastWriteTime”
获取列表中的第一个对象,然后获取其写入时间


我做这个是为了得到你想要的数据。如果目录为空,则最后一行为我们提供一个空字符串,这可能是Excel最安全的方式,但您也可以默认为空字符串以外的内容,例如目录的创建日期:

$ChildDirs = Get-ChildItem | Where-Object { $_ -is [System.IO.DirectoryInfo] }
$EditNames = $ChildDirs | ForEach-Object Name
$EditTimes = $EditNames | ForEach-Object { @( (Get-ChildItem $_ | Sort-Object -Property LastWriteTime -Descending | Select-Object -first 1 LastWriteTime), '' -ne $null)[0] }

for($i=0; $i -lt $ChildDirs.Length; $i++) {
    Write-Output $EditNames[$i]
    Write-Output $EditTimes[$i]
}


要在您正在做的事情中实现这一点,如果我正确理解您的问题,请尝试以下操作:

$ChildDirs = Get-ChildItem | Where-Object { $_ -is [System.IO.DirectoryInfo] }
$EditNames = $ChildDirs | ForEach-Object Name
$EditTimes = $EditNames | ForEach-Object { @( (Get-ChildItem $_ | Sort-Object -Property LastWriteTime -Descending | Select-Object -first 1 LastWriteTime), '' -ne $null)[0] }

for($i=0; $i -lt $ChildDirs.Length; $i++) {
    #FolderName
    $sheet.Cells.Item($row, $column) = $EditNames[$i]
    $column++
    #LastBackup
    $sheet.Cells.Item($row, $column) = $EditTimes[$i]
    $row++
    $column = 1
}

如果只查看每个文件夹中的第一级文件,可以使用嵌套循环:

$row = 2
$column = 1

$folders = Get-ChildItem $directorypath
ForEach ($folder in $folders) { 

    # start off with LastEdited set to the last write time of the folder itself
    $LastEdited = $folder.LastWriteTime
    $folderPath = $directoryPath + '\' + $folder.Name
    # this 'dynamically' sets each folder's path

    $files = Get-Childitem $folderPath
    ForEach ($file in $files) {
        if ((Get-Date $file.LastWriteTime) -gt (Get-Date $LastEdited)) {
            $LastEdited = $file.LastWriteTime
        }
    }

    $sheet.Cells.Item($row,$column) = $folder.Name
    $column++
    $sheet.Cells.Item($row,$column) = $LastEdited
    $row++
    $column = 1
}

您确定项目自创建以来已添加到目录中吗?我有很多文件夹都有很旧的lastwritetime值,因为它们从未被使用。我发布了一个答案,说明如何获取文件夹中项目编辑的最新日期,但我很确定这不是一个完整的答案。完成后,您希望Excel电子表格是什么样的?给定目录中每个目录的日期或者您只是使用电子表格查看脚本返回的内容?我想我理解您的意图,请检查我编辑的答案:)