我有一个Windows server 2008 vm“hostname1”,在C:\ Users中有3200个目录。对vm的访问由AD组“usrhostname1”控制。是否有powershell或命令提示符方法来检查C:\ users中针对域组“usrhostname1”的用户列表,并输出不在“usrhostname1”中的C:\ Users中的名称列表
我正在尝试清理用户,这将有助于获得无法再访问域组的用户的低成果。我接管了他们离开时没有清理用户的环境。
答案 0 :(得分:0)
我会列举小组成员的SID:
Import-Module ActiveDirectory
$GroupSids = Get-ADGroupMember -Identity usrhostname1 -Recursive | ForEach-Object { $_.SID.Value }
您的域名的SID:
$DomainSids = Get-AdDomain -Identity YourDomain | ForEach-Object { $_.DomainSID.Value }
然后我使用WMI枚举配置文件,过滤那些不在上面的配置文件,然后输出文件夹:
Get-CimInstance -ClassName Win32_UserProfile -Filter "Special = 'False'" |
Where-Object { ($_.SID -notin $GroupSids) -and ($_.SID -match $DomainSids) } |
Select-Object -Property LocalPath
特殊配置文件是所有用户,默认用户,公共等。过滤到与您的域SID匹配的SID将阻止脚本触及本地用户,如本地管理员帐户。
或者,或者,只需删除它们:
Get-CimInstance -ClassName Win32_UserProfile -Filter "Special = 'False'" |
Where-Object { ($_.SID -notin $GroupSids) -and ($_.SID -match $DomainSids) } |
Remove-CimInstance
Remove-CimInstance
对Win32_UserProfile
个对象很好,因为它会从系统的注册表信息和配置文件文件夹中清除配置文件。
显然,要小心。您需要验证自己是否未捕获自己不想保留的个人资料。如果您的系统是域控制器,我也根本不会使用此方法。