我试图创建一个似乎对我不起作用的新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是否在我之前给出的时间段之前或之后。
您是否知道我如何解决这个问题,或者可以解决这个问题的替代方案?
答案 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。