首页 > 解决方案 > 如何获取powershell日志

问题描述

我有一个 PowerShell 函数,可以删除一段时间内未修改的文件夹。

我想知道如何获取输出/日志.txt.csv文件,以显示哪些文件夹被删除以及何时删除。我已经尝试过Start-Transcript,但它只会显示错误而不是成功。

$daysToKeep = -15
$foldersToKeep = 3
$Location = "C:\Users\Administrator\Desktop\Batch"
$folderList = Get-ChildItem -Path $Location -Recurse -Directory
                                                      
$folderList | Sort-Object CreationTime -Descending | 
Select-Object -Skip $foldersToKeep |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays($DaysToKeep) } | 
Remove-Item -Recurse 

标签: powershell

解决方案


如果将文件放入循环中,则可以创建具有DeleteTime属性的自定义对象:

$LogFile = 'C:\temp\FileDeleteLog.csv'
$daysToKeep = -15
$DateBound = (Get-Date).AddDays($daysToKeep)
$foldersToKeep = 3
$Location = "C:\Users\Administrator\Desktop\Batch"

Get-ChildItem -Path $Location -Recurse -Directory |
Sort-Object CreationTime -Descending |
Select-Object -Skip $foldersToKeep |
Where-Object { $_.LastWriteTime -lt $DateBound } | 
ForEach-Object{
    [PSCustomObject]@{
        FolderPath = $_.FullName
        LastWriteTime = $_.LastWriteTime
        DeleteTime = (Get-Date)
    }

    Remove-Item $_.FullName -Recurse
} |
Export-Csv -Path $LogFile -NoTypeInformation

我可以想象有很多方法可以做到这一点,这只是其中一种。我们本可以Select-Object在现有管道中添加时间戳。但是,如果该过程需要很长时间,您可能会在这些时间戳与实际删除文件夹的时间之间产生不可接受的间隙。现在,我认为上面会更准确。


推荐阅读