我正在尝试创建一个脚本来查找所有用户配置文件。90 天或更长时间未被访问的配置文件将被删除。我还想从 C:\Users 中删除他们的文件夹以释放硬盘空间。
cd C:\Users\
foreach ($dir in $OlderDays) {
Get-CimInstance -ComputerName $ComputerName -Class Win32_UserProfile -ErrorAction Stop | Where-Object {$_.Special -eq $false}
Get-CimInstance -ComputerName $profile.ComputerName -ClassName Win32_UserProfile -ErrorAction Stop | Where-Object {$_.SID -eq $profile.RegKey.SID -and $_.LocalPath -eq $profile.RegKey.LocalPath} | Remove-CimInstance -ErrorAction Stop
Remove-item -force -Path $dir -recurse
}
我在试图从 C:\Users 中删除的每个文件夹上都被拒绝访问。
我正在使用管理员帐户。到目前为止,我找到的唯一解决方案是删除,但有些工作站有 50 多个帐户需要删除,当右键单击文件夹并单击删除需要 10 秒时,这不是很省时。Takeown 每个帐户大约需要 10 分钟。
remove-item : Access to the path 'C:\Users\test5456\AppData\Local\Application Data' is denied.
At line:59 char:5
+ remove-item -force -Path C:\Users\$dir -recurse
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (C:\Users\test5456:String) [Remove-Item], UnauthorizedAccessExcepti
on
+ FullyQualifiedErrorId : RemoveItemUnauthorizedAccessError,Microsoft.PowerShell.Commands.RemoveItemCommand
即使您以管理员身份运行它,您仍然必须取得该文件夹(及其内容)的所有权才能删除它。
TakeOwn 是出了名的慢,使用 PowerShell 的 Get-ACL 和 Set-ACL 更快。
要将文件夹及其所有内容的所有者设置为内置的管理员组,应该是这样的(未测试):
将它放在 Foreach 循环中,在 Remove-Item 命令之前。
你不需要这样做。Windows 将使用名为的组策略为您完成此操作:
此外,已经提供了一个工具来执行此操作
delprof
,delprof2
如果您想手动执行此操作。它也可以在远程计算机上执行。推荐的解决方案主要对我有用,但是:
对我有用的是
cmd /c "rmdir $dir /s /q"
用作删除命令,因此在您的情况下它将是:这个解决方案要快得多,到目前为止,它已经在一台计算机上删除了一百多个配置文件而没有出现任何故障。凭借 PowerShell 的强大功能,我们不得不求助于调用 cmd 来完成工作,这是一种耻辱,但是......
解决方案在这里找到:https ://forums.ivanti.com/s/article/Folder-delete-actions-fail-when-the-folder-contains-a-Junction-soft-link?language=en_US
正如@Ramhound 评论的那样,如果您要删除旧的用户配置文件,请不要通过删除 C:\Users\username 来完成。首先,从 PC 中删除配置文件并等待几分钟。如果它工作正常,删除配置文件将自动删除文件夹结构。如果配置文件仍然存在,那么尝试像您尝试的那样删除文件夹会引发各种权限错误。
相关内容请见
https://www.business.com/articles/powershell-manage-user-profiles/
https://community.spiceworks.com/how_to/124316-delete-user-profiles-with-powershell
Power Shell 脚本将用户配置文件从 Windows Server 2008 r2 删除到本地计算机(Windows 7)