2014-11-25 18 views
0

我是PowerShell的新手,試圖自我教導自己,以便進一步提升自己的職業生涯。我想出了一個腳本來幫助我的業務(並且給我的老闆留下深刻的印象),它基本上從「C:\ Documents and Settings \ All Users」中獲得了機器上所有配置文件的列表,我希望它能夠識別是否NTUser.dat文件大於90天。如果爲true,則刪除該配置文件文件夾。嘗試識別NTuser.dat的修改日期,並在90天后刪除

我看了一下,試圖用自己在這裏和互聯網上的例子改編自己的腳本。至於我可以告訴它的工作原理,但它沒有檢測到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." 
} 

回答

0

我看到兩個問題均來自這一行來:

$NTuserFolderPath = "C:\Documents and Settings\$Folders.name\NTUser.dat" 
  1. 酒店$Folders.name不會在引用字符串適當擴大而不子表達式有它。
  2. 由於此行不在循環內部,所以變量$NTuserFolderPath總是是相同的。

所以,你的循環應該是這樣的,而不是

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的日期並不是查看用戶帳戶是否在本地計算機上陳舊的最可靠的方法。在註冊表中沒有什麼可以改變,但用戶仍然活躍。所以只需要小心和測試。