Powershell帮助Active Directory清理

我刚开始签订合同,为大公司清理Active Directory系统。 有人告诉我这是一件繁忙的工作,但经过审查制度,看到这个制度是多么混乱和混乱,我意识到我将无法完全履行我的职责。 从本质上讲,这家公司有太多不活跃的帐户,但目前还不能删除。 我想为某些帐户执行“尖叫testing”并稍后删除。 如果这只是几千个不活跃的账户,那么这将是一个故事,但不幸的是,它是几千(我还没有确切的数字,但它已超过20,000)。 我很好奇,如果有人知道用自动化的方式来分类这些信息的方法,而不是用鬣狗来获取报告,然后一个接一个地去查看。

我会假设你的问题在于find不活动的账户。

我使用JoeWare的Oldcmp工具。 http://www.joeware.net/freetools/tools/oldcmp/index.htm仍然是这些年。

它可以通过查看密码年龄并且特别是LLTS = lastLogonTimestampfind不活动的AD帐户

这很简单,至less可以让你开始比PowerShell更容易。 然后禁用这些帐户,并使用ADUC为已禁用的帐户创build自定义查询窗口。 这样,您不必移动任何可能需要稍后重新启用的任何内容。

但是……我同意Hopeless和Mfinni的看法,并且会说你在执行任何事情之前,最好清楚地说明你计划在pipe理方面做什么。

我使用Powershell来调用lastlogondate属性。

在这里,我返回所有最后logindate超过30天(从今天起)的samaccountname

 $datenow = Get-date $treshold=$datenow.AddDays(-30) $users=Get-ADuser -Filter * -properties samaccountname,lastlogondate foreach($user in $users) { $lastlogon = $user.lastlogondate if($lastlogon -lt $treshold) { echo $user.samaccountname echo $user.lastlogondate echo "------------------------------------------------" } } 

从这里,你可以:

  • 根据您的需要调整date阈值
  • 禁用AD帐户( 禁用ADAccount )
  • 无论你想要什么(至less,大部分的事情)

上面的好build议是:改变控制和logging权限。 我会尝试这样的方法

build立包含lastLogonTimestamppwdLastSet等属性的帐户清单, whencreatedwhenchanged 。 您可以使用Powershell和get-ADUser来获取所有这些信息。 我确定networking上存在很多脚本 – TechNet脚本库是一个很好的开始

使用广告资源查找目标帐户。

在更改为AD之前,请考虑在testing环境中testing所有内容。 存储库中有一些脚本可以将AD(OU,Users&groups)复制到您的testing环境中。

几年前,我做了一个类似的任务,虽然规模比你所面对的要小得多。 我们做的第一件事是实施ManageEngine的AD审计产品,以便处理帐户。 我们可能会让它运行几个星期,以便在我们做进一步处理之前生成度量标准。 从那里,我们能够追踪login帐户的来源,我们能够以受控的方式处理它们。

AD审计是一个相当低成本的产品,Excel的报告相当不错,所以我们对我们的决定感到非常高兴。

以下是一些解决scheme。 不太确定,如果这是你在找什么。

示例1:这将使用指定的datesearch域domain.local中的OU 用户 。 你可以在下面改变它们,并输出如下的UsernameLastLogonTimestamp

用户1

13/2/2014

用户2

12/12/2013

 Import-Module Active Directory $lastdate = "09 April 2014 23:59:59" $users = Get-ADUser -Filter * -SearchBase "ou=users,dc=domain,dc=local" -ResultPageSize 0 -Prop CN,lastLogonTimestamp | Select CN,@{N='lastlogontimestamp'; E={[DateTime]::FromFileTime($_.lastlogontimestamp)}} foreach ($user in $users) { if ($user.lastlogontimestamp -lt $lastdate) { echo $user.CN echo $user.lastlogontimestamp.tostring('d/M/yyyy') } } 

示例2:这将search域domain.local中的OU 用户 。 然后将其导出为CSV,然后您可以看到您的数据更好一点。

 Import-Module ActiveDirectory Get-ADUser -Filter * -SearchBase "ou=users,dc=domain,dc=local" -ResultPageSize 0 -Prop CN,lastLogonTimestamp | Select CN,@{N='lastLogonTimestamp'; E={[DateTime]::FromFileTime($_.lastLogonTimestamp)}} | Export- CSV -NoType .\last.csv 

使用示例2,您可以绘制一个您要在CSV / Excel中删除/禁用的用户列表,然后使用这些列表转到pipe理。

希望这可以帮助!

正如许多其他人在做出任何更改之前提到的那样,特别是在AD中编写脚本或进行生产更改时。

我将查看来自Quest的免费Active Directory模块(它实际上是一个pipe理单元)

Quest cmdlet Get-QADUser包含各种与acacount-inactivity无关的辅助程序,如-Inactive-InactiveFor-ExpiredFor-NotLoggedOnFor-PasswordNotChangedFor ,使您可以根据提供给这些参数的值轻松报告非活动帐户。 我build议下载模块并使用Get-Help Get-QADUser -Full | more Get-Help Get-QADUser -Full | more或者如果您安装了ISE,我更喜欢Get-Help Get-QADUser -Show在单独的窗口中Get-Help Get-QADUser -Show所有细节。

一个例子可能是:

 Get-QADUser -ExpiredFor 30 -NotLoggedOnFor 30 -PasswordNotChangedFor 90 | Select-Object Name,SamAccountName,PasswordLastSet,PasswordIsExpired,LastLogonTimestamp,AccountIsExpired | Sort-Object Name | Export-CSV C:\InactiveADUsers.csv -NoTypeInformation -Force 

使用本地AD模块,可以获得非常相似的输出,并使用更多的手肘润滑脂。