搜索并禁用尚未登录x天的用户

时间:2014-05-27 11:16:02

标签: powershell

我试图创建一个似乎对我不起作用的新PowerShell脚本。我想要它做的是找到特定组织单位中的所有用户,然后查看是否有任何用户在最近x天内没有登录。之后我希望每个用户都被禁用。我还没有构建整个脚本,因为我一直在计算用户是否已经登录。

到目前为止我的脚本看起来像这样

    import-module ActiveDirectory

    $numdays = read-host 'provide the number of days user has not logged in'
    $OUN = read-host 'provide the Organizational Unit name'
    $nu = get-date -format dd-MM-yyyy-HH-mm-ss
    $logfile = ".\$nu.txt"
    $recent = @()
    $oud = @()

    $currentdate = [System.DateTime]::Now
    $currentdateUTC = $currentdate.ToUniversalTime()
    $lltstamplimit = $currentdateUTC.AddDays(- $numdays)
    $lltintlimit = $lltstamplimit.ToFileTime()

    $Search = "TOPLEVEL DOMAIN"

    $ou = (Get-ADOrganizationalUnit -Ldapfilter '(name=*)' -searchbase $search -searchscope Onelevel | where { $_.name -like $OUN }).Distinguishedname
    $users = get-aduser -filter * -searchbase "$ou" -properties * | where { $_.enabled -like "True" } | select SamAccountName, LastLogonDate

    $convert = foreach ($i in $users.lastlogondate) { [datetime]::FromFileTime($i).ToString('g') }

    #$array = foreach ( $i in $users ) {
    #if ( $users.Lastlogondate -ge $lltintlimit ) { $recent += $i } else { $oud += $i}

正如您可能猜到脚本在转换部分失败了。之后的一切都是评论,我还没有真正做过任何事情。无论如何,我想将输出转换为正常日期系统,以便我可以计算lastlogondate是否在我之前给出的时间段之前或之后。

您是否知道我如何解决这个问题,或者可以解决这个问题的替代方案?

1 个答案:

答案 0 :(得分:2)

使用LastLogonDate属性过滤AD帐户存在一些限制,主要是所有DC上的LastLogOnDate 始终更新,Technet文章在more detail中解释。

    $inActiveUsers = Search-ADAccount -AccountInactive -TimeSpan "90" -UsersOnly

    $inActiveUsers | foreach { Disable-ADAccount -Identity $_ }

Search-ADAccount的在线帮助可以是found here