我想通过Powershell删除Windows 10计算机中的本地用户。
我试过命令
Get-WMIObject -class Win32_UserProfile | Where {((!$_.Special) -and ($_.LocalPath -eq "C:\Users\$user") -and ($_.LocalPath -ne "C:\Users\UpdatusUser"))} | Remove-WmiObject
上述命令成功删除本地用户。但它无法删除C:Users$userAppData
是否有任何解决方法/黑客来删除用户/应用程序数据文件夹。
成功删除用户后,我也尝试删除文件夹,但出现错误。
错误:请求中指定的标记与重新分析点中存在的标记不匹配
对于错误参考,我尝试了该错误消息的一些解决方法,但均无效。但是如果我确实转移+删除(手动),它将成功删除。
我用来删除的命令如下
Remove-Item C:User$user -Force -Recurse
我以管理员身份运行PowerShell。
提前谢谢。
编辑:使用cmd。
cmd /c rmdir /s /q c:usersuser
Powershell无法处理目录中的不良链接。 卸载那个可怕的"Office"应用程序。 问题在AppDataLocalPackagesMicrosoft.MicrosoftOfficeHub_8wekyb3d8bbweLocalCache
. 有具有空链接类型和目标属性的目录联结 (?)。
Windows 10在版本1809中存在一个独特的问题,"Office"应用程序在用户配置文件下创建了奇怪的链接文件和目录。 甚至 WMI 也无法删除配置文件,也无法删除 powershell。
哇,什么样的目录联结没有目标或链接类型? 但它有一个 ReparsePoint 属性和一个在链接末尾带有"l"的模式。
get-item c:usersuserAppDataLocalPackagesMicrosoft.MicrosoftOfficeHub_8wekyb3d8bbwelocalcache | fl *
PSPath : Microsoft.PowerShell.CoreFileSystem::C:usersuserAppDataLocalPackagesMicrosoft.MicrosoftOfficeHub_8wekyb3d8bbwelocalcache
PSParentPath : Microsoft.PowerShell.CoreFileSystem::C:usersuserAppDataLocalPackagesMicrosoft.MicrosoftOfficeHub_8wekyb3d8bbwe
PSChildName : localcache
PSDrive : C
PSProvider : Microsoft.PowerShell.CoreFileSystem
PSIsContainer : True
Mode : d----l
BaseName : localcache
Target : {}
LinkType :
Name : localcache
FullName : C:usersuserAppDataLocalPackagesMicrosoft.MicrosoftOfficeHub_8wekyb3d8bbwelocalcache
Parent : Microsoft.MicrosoftOfficeHub_8wekyb3d8bbwe
Exists : True
Root : C:
Extension :
CreationTime : 8/1/2019 3:29:02 PM
CreationTimeUtc : 8/1/2019 7:29:02 PM
LastAccessTime : 8/1/2019 3:29:02 PM
LastAccessTimeUtc : 8/1/2019 7:29:02 PM
LastWriteTime : 8/1/2019 3:29:02 PM
LastWriteTimeUtc : 8/1/2019 7:29:02 PM
Attributes : Directory, ReparsePoint
相关错误报告: https://github.com/powershell/powershell/issues/621 我自己也见过这个。 在文件资源管理器中需要多次尝试才能完全删除配置文件。
编辑:
Win 10 1809:WMI 无法完全删除配置文件(因为 Microsoft.MicrosoftOfficeHub)
假设我以这种方式删除个人资料:
Get-CimInstance win32_userprofile | where localpath -match user$ | Remove-CimInstance
剩下几个文件夹。 他们来了。 删除项说"是 NTFS 交接点。使用 Force 参数删除或修改此对象。 删除项 -force 说"请求中指定的标记与重新分析点中存在的标记不匹配">
C:UsersuserAppDataLocalPackagesMicrosoft.MicrosoftOfficeHub_8wekyb3d8bbweLocalCache
C:UsersuserAppDataLocalPackagesMicrosoft.MicrosoftOfficeHub_8wekyb3d8bbweLocalCacheLocal
C:UsersuserAppDataLocalPackagesMicrosoft.MicrosoftOfficeHub_8wekyb3d8bbweLocalCacheLocalMicrosoft
C:UsersuserAppDataLocalPackagesMicrosoft.MicrosoftOfficeHub_8wekyb3d8bbweLocalCacheLocalMicrosoftCLR_v4.0
C:UsersuserAppDataLocalPackagesMicrosoft.MicrosoftOfficeHub_8wekyb3d8bbweLocalCacheLocalMicrosoftCLR_v4.0UsageLogs
C:UsersuserAppDataLocalPackagesMicrosoft.MicrosoftOfficeHub_8wekyb3d8bbweLocalCacheLocalLow
C:UsersuserAppDataLocalPackagesMicrosoft.MicrosoftOfficeHub_8wekyb3d8bbweLocalCacheLocalLowMicrosoft
C:UsersuserAppDataLocalPackagesMicrosoft.MicrosoftOfficeHub_8wekyb3d8bbweLocalCacheLocalLowMicrosoftCryptnetUrlCache
C:UsersuserAppDataLocalPackagesMicrosoft.MicrosoftOfficeHub_8wekyb3d8bbweLocalCacheLocalLowMicrosoftCryptnetUrlCacheContent
C:UsersuserAppDataLocalPackagesMicrosoft.MicrosoftOfficeHub_8wekyb3d8bbweLocalCacheLocalLowMicrosoftCryptnetUrlCacheMetaData
@( Get-WMIObject -class 'Win32_UserProfile' -ComputerName 'Terminal001.domain.local' )|
Where-Object { <**some filter conditions**> } |
Where-Object { $_.Special -eq $false } |
Where-Object { $_.Loaded -eq $false } |
Where-Object { $_.Status -eq 2 } | # We remove only local copies of Roaming profiles. We assume there is a copy of Roaming profile on a server.
Foreach-Object {
$local:profile = $_;
Write-Host -f "Gray" "Deleting $($_.LocalPath)`t" -noNewLine
try {
$local:profile.Delete()
Write-Host "OK!" -f Green
} catch {
Write-Host -f "Yellow" "Unable to delete $($local:profile.LoalPath) : $($_.Exception.Message)"
}
}
有关Status
请参阅Win32_UserProfile类的文档
请注意,LocalPath
并不总是相等的用户名。例如,如果在创建配置文件时用户名已更改,则LocalPath
不会更改。或者,否则,配置文件文件夹可以命名为不Username
,而是Username.Userdomain
或UserName.UserDomain.nnn
(nnn - 编号)。
更好的方法是比较 SID:
$userSID = (Get-ADUser 'username').SID
Get-WmiObject -Class 'Win32_UserProfile' .... |
Where-Object {$_.SID -eq $userSID} |
...