【问题标题】:Powershell, find users that were disabled in the past 14 days onlyPowershell,仅查找过去 14 天内禁用的用户
【发布时间】:2021-02-21 09:21:21
【问题描述】:

我有一个 powershell 脚本,他的输出显示了过去 14 天内禁用的所有内容。 我正在寻找的是改变这个脚本将从特定的 OU 而不是整个 DC 运行。 我希望他仅向我显示过去 14 天来自特定 OU 的禁用用户。

脚本:

$date = (Get-Date).AddDays(-14)

$disabledUsers = Get-ADObject -Filter 'ObjectClass -eq "User" -and whenChanged -ge $sixMonthsAgo -and UserAccountControl -band 2'

$server = Get-ADDomainController

foreach ($disabledUser in $disabledUsers)
{
    Get-ADReplicationAttributeMetadata $disabledUser -Server $server -Properties UserAccountControl |
    Where-Object { $_.AttributeName -eq 'UserAccountControl' } | Select Object, LastOriginatingChangeTime |
    Where-Object { $_.LastOriginatingChangeTime -gt $date }
}

【问题讨论】:

  • [1] 更改您的 -Filter 以将双引号放在过滤器字符串的外侧。否则您的 $Vars 将被视为文字字符串,而不是其中的值。 ///// [2] 你没有设置$sixMonthsAgo
  • 同上,还有,为什么在你想要用户的地方使用Get-ADObject? (改用Get-ADUser

标签: powershell scripting active-directory windows-scripting


【解决方案1】:

您应该知道,您当前的脚本实际上只有在对象被禁用后没有被修改时才有效。 但据我所知,这是唯一不专门记录 userAccountControl 属性修改的方法(而且这仍然不能记录 100% 的情况,因为一旦禁用,对象可以在不启用它的情况下看到他的 userAccountControl 被修改)。

基于“用户被禁用后永远不会被修改”:

Search-ADAccount -SearchBase "OU=myOU,DC=mydom,DC=adds" -AccountDisabled -UsersOnly | Get-ADUser -Properties whenChanged | Where whenChanged -gt (Get-Date).AddDays(-14)

【讨论】:

  • 很好,尽管我会将 whenChanged 日期与(Get-Date).AddDays(-14).Date 进行比较,以使其不取决于脚本运行的实际时间。 +1
【解决方案2】:

使用过滤器将使其快速运行 $date = (Get-Date).AddDays(-14) get-aduser -filter {Enabled -eq $false -and Modified -ge $date } -Properties Modified |选择samaccountname,修改

【讨论】:

  • 太棒了,这基本上就是我所需要的。现在我尝试在最后添加这个“Modified, @{n='Manager';e={(Get-ADUser $_.manager).name}}”,这样我就可以看到每个用户管理器的名称,但我看到了一个经理部分的空行。知道为什么吗?我对第二个脚本的最终目标是让所有今天被禁用的用户,并向他们的经理发送一封电子邮件,其中包含他们团队中的用户“X”已被禁用的消息。
  • 是的,请确保将管理器添加到属性 $date = (Get-Date).AddDays(-14) get-aduser -filter {Enabled -eq $false -and Modified -ge $date } -属性修改,经理 | select samaccountname,Modified,manager
  • 是的很棒的作品 "select samaccountname,Modified,@{n='Manager';e={(Get-ADUser $_.manager).name}}" 现在你知道怎么做了吗我为每个经理添加了关于他们被禁用的用户的发送电子邮件?
  • 您将需要使用 foreach 循环来遍历所有经理,因为您正在调用 get-aduser 再次调用它以获取电子邮件地址 @{n='ManagerEmail';e={(Get- ADUser $_.manager -properties mail ).mail}}"
猜你喜欢
  • 2020-08-25
  • 2020-08-15
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 2012-04-16
  • 1970-01-01
相关资源
最近更新 更多