powershell可以针对域组检查主目录并列出差异吗?

时间:2018-01-22 15:52:06

标签: windows powershell cmd

我有一个Windows server 2008 vm“hostname1”,在C:\ Users中有3200个目录。对vm的访问由AD组“usrhostname1”控制。是否有powershell或命令提示符方法来检查C:\ users中针对域组“usrhostname1”的用户列表,并输出不在“usrhostname1”中的C:\ Users中的名称列表

我正在尝试清理用户,这将有助于获得无法再访问域组的用户的低成果。我接管了他们离开时没有清理用户的环境。

1 个答案:

答案 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-CimInstanceWin32_UserProfile个对象很好,因为它会从系统的注册表信息和配置文件文件夹中清除配置文件。

显然,要小心。您需要验证自己是否未捕获自己不想保留的个人资料。如果您的系统是域控制器,我也根本不会使用此方法。