我正在编写一个简单的脚本,用于删除超过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
答案 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 Assume(delprof2
tool的作者)。
但是,有一个包含函数( Remove-UserProfile
)的纯PowerShell脚本,用于删除用户配置文件以及C:\ Users目录的其他内容(如果已指定)在本地计算机上 gallery.technet.microsoft.com
:
Remove-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
}