删除旧用户配置文件的简单脚本

时间:2017-04-27 20:25:51

标签: powershell powershell-v4.0

我正在编写一个简单的脚本,用于删除超过90天的用户配置文件。我可以捕捉到我想要的个人资料但是,当涉及到“面包和黄油”时,我感到难过。

我的代码:

$localuserprofiles = Get-WmiObject -Class Win32_UserProfile | Select-Object localPath,@{Expression={$_.ConvertToDateTime($_.LastUseTime)};Label="LastUseTime"}| Where{$_.LocalPath -notlike "*$env:SystemRoot*"} #Captures local user profiles and their last used date
$unusedday = 90 # Sets the unused prifile time threshold
$excludeduserpath = $excludeduser.LocalPath # Excludes the DeltaPC user account
$profilestodelete = $LocalUserProfiles | where-object{$_.lastusetime -le (Get-Date).AddDays(-$unusedday) -and $_.Localpath -notlike "*$excludeduserpath*"} #Captures list of user accounts to be deleted

#Deletes unused Profiles

Foreach($deletedprofile in $profilestodelete)
    {
        $deletedprofile.Delete()
    }

代码返回此错误:

Method invocation failed because [Selected.System.Management.ManagementObject] does not contain a method named 'Delete'. 
At line:3 char:13 
+ $deletedprofile.Delete()} 
+ ~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo : InvalidOperation: (Delete:String) [], RuntimeException 
    + FullyQualifiedErrorId : MethodNotFound

3 个答案:

答案 0 :(得分:0)

自定义对象Delete()上未定义任何$deletedprofile方法。使用

Foreach($deletedprofile in $profilestodelete)
    {
        $aux = Get-Item $deletedprofile.localPath
        $aux.Delete()
    }

或只是

Foreach($deletedprofile in $profilestodelete)
    {
        (Get-Item $deletedprofile.localPath).Delete()
    }

您可能需要指定.Delete($true)

PS C:\Windows\system32> Get-Item  $profilestodelete[0].localPath | Get-Member -Name Delete


   TypeName: System.IO.DirectoryInfo

Name   MemberType Definition
----   ---------- ----------
Delete Method     void Delete(), void Delete(bool recursive)

修改

作为Mark Wragg mentioned,不能建议只删除用户配置文件目录,因为这不会从注册表中删除与配置文件关联的数据。另见Helge Klein撰写的详尽文章Deleting a Local User Profile - Not as easy as one Might Assumedelprof2 tool的作者)。

但是,有一个包含函数( Remove-UserProfile )的纯PowerShell脚本,用于删除用户配置文件以及C:\ Users目录的其他内容(如果已指定)在本地计算机上 gallery.technet.microsoft.comRemove-UserProfile - Remove Local User Profiles and Clean C:\Users Directory

答案 1 :(得分:0)

根据其他答案,WMI提供的用户配置文件没有Delete()方法。虽然您可以删除配置文件目录,但通常不建议这样做,因为您留下了各种其他数据位(例如注册表项),并且如果这些用户随后重新登录到计算机,则会导致这些用户登录问题。 / p>

有一个名为delprof2.exe的免费第三方工具:https://www.sepago.com/blog/2011/05/01/new-free-delprof2-user-profile-deletion-tool

我个人没有亲自使用过,所以请小心使用,但它似乎已经可以选择删除x天无效的个人资料,例如:

Delprof2 /d:90
  

现在,如果您只是删除用户配置文件目录会发生什么   在C:\ Users下面没有修改注册表?下次用户   Windows上的日志显示一个气球提示抱怨Windows无法   加载用户配置文件并且用户已使用临时登录   轮廓。那不好吗?是!临时档案是最后的手段   Windows无法加载用户配置文件。注销后,它们将被删除   所有数据都丢失了。这当然是避免它们的理由。

     

答案 2 :(得分:0)

由于要获取WMI对象,因此可以使用Remove-WMIObject cmdlet。

因此,只需像这样修改删除循环即可正确,完整地删除所需的配置文件:

Foreach($deletedprofile in $profilestodelete)
    {
        Remove-WMIObject $deletedprofile
    }