尝试识别NTuser.dat的修改日期并在90天之前删除

时间:2014-11-25 11:43:53

标签: powershell powershell-v2.0

我是PowerShell的新手,并试图自学它,这样我就可以继续我的职业生涯。我已经提出了一个脚本来帮助我的业务(并给我的老板留下深刻印象!),它基本上可以获得机器上所有配置文件的列表来自" C:\ Documents and Settings \ All Users"我希望它能识别NTUser.dat文件是否超过90天。如果为true,则删除该配置文件文件夹。

我已经环顾四周,并尝试使用根据此处和互联网上的示例改编的位来编写我自己的脚本。据我所知,它可以正常工作,但它没有检测到NTUser.dat在PC上有多大,结果总是一样的。我将它贴在下面。请记住我的代码可能不完美:)

非常感谢任何人给予的任何帮助或建议。

$excludeFolders = @("Administrator","sysmgmt","Default User","All Users")
$FolderPath = "C:\Documents and Settings"
$CurrentDate = Get-Date
$LastModified = $CurrentDate.AddDays(-90)

$Folders = Get-Childitem –path $FolderPath |
Where {$_.psIsContainer} |
Where {$_.LastWriteTime -le "$LastModified"} |
Where {$excludeFolders -notcontains $_.Name}

$NTuserFolderPath = "C:\Documents and Settings\$Folders.name\NTUser.dat"

If ($Folders) {
    foreach ($Folder in $Folders) {

            If ($NTuserFolderPath.LastWriteTime -gt $LastModified) {

                Write-Host "$($Folder.Name) needs removing"
            } Else 
            {
                Write-Host "Skipping $($Folder.Name)"
            }
    }
} Else {
    Write-Host "There are no files to empty."
}

1 个答案:

答案 0 :(得分:0)

我发现这两行都有两个问题:

$NTuserFolderPath = "C:\Documents and Settings\$Folders.name\NTUser.dat"
  1. 属性$Folders.name不会在带引号的字符串中正确展开,而不会在子表达式中显示。
  2. 由于此行不在循环内,变量$NTuserFolderPath 总是是相同的。
  3. 所以你的循环应该是这样的

    foreach ($Folder in $Folders) {
    
            $NTuserFolderPath = "C:\Documents and Settings\$($Folder.name)\NTUser.dat"
            If ((Get-Item $NTuserFolderPath).LastWriteTime -gt $LastModified) {
                Write-Host "$($Folder.Name) needs removing"
            } Else {
                Write-Host "Skipping $($Folder.Name)"
            }
    }
    

    您还应该使用Test-Path来检查文件是否存在。

    虽然我现在无法找到它的参考,但我想提一下,检查ntuser.dat的日期并不是查看本地计算机上用户帐户是否过时的最可靠方法。注册表中没有任何内容可以更改,但用户仍然处于活动状态。所以要小心并测试。