从广告中随机选择用户

时间:2019-04-19 14:06:20

标签: powershell active-directory

我们的任务是创建一个流程,以每季度检查一次随机员工的网络流量。我已经在Powershell中启动了一个脚本,该脚本从特定的OU中选择10个随机用户,但是我仍然得到一些不需要的数据。我需要进一步过滤列表的帮助。输出为我提供了已被禁用并留在OU中的用户以及长时间未登录的PRN员工。我想搜索具有最近三个月内修改过的电子邮件地址和登录名的AD帐户。这是到目前为止的代码示例。

Get-ADUser -SearchBase "ou=ouname,ou=ouname,dc=domainname,dc=suffix" -Filter * | Select-Object -Property Name | Sort-Object{Get-Random} | select -First 10

[编辑:已回答问题]

这是我的最终脚本,在搜索属性中添加了$_.passwordlastset,因为这会提取最近90天内更改了密码的用户。

$DateFrom = (get-Date).AddDays(-90)

Get-ADUser -Properties * -Filter {enabled -eq $True} -SearchBase "ou=ouname,dc=domainname,dc=suffix" | where { $_.passwordlastset -gt $DateFrom -and $_.mail -ne $null } | Sort-Object {Get-Random} | select name, sAMAccountName -First 10

4 个答案:

答案 0 :(得分:2)

尝试一下:

$timeFrame = (get-Date).AddDays(-90)

get-aduser -SearchBase 'ou=ouname,ou=ouname,dc=domainname,dc=suffix' -Filter * -Properties * | 
    Where-Object {$_.whenChanged -gt $timeFrame -and $_.mail -ne $null} |
    Select-Object -Property Name | Sort-Object{Get-Random} | select -First 10

答案 1 :(得分:2)


Get-ADUser -Properties name, mail, lastlogondate -Filter {enabled -eq $True} -SearchBase "ou=ouname,ou=ouname,dc=domainname,dc=suffix" | select name, mail, lastlogondate | where { $_.lastlogondate -gt (Get-Date).AddDays(-90) -and $_.mail -ne $null }

这是一个开始。

答案 2 :(得分:1)

更改-Filter的值:

# LastLogontimeStamp is not guaranteed to be updated on every login, so 30 days + 14 days margin
$threshold = (Get-Date).AddDays(-44).ToFileTime()
Get-ADUser -Filter {Enabled -eq $true -and LastLogontimeStamp -gt $threshold} -SearchBase "ou=ouname,ou=ouname,dc=domainname,dc=suffix" | Sort-Object {Get-Random} | Select Name -First 10

此过滤器将确保AD仅返回已启用的用户,并且其lastLogontimeStamp的值在过去一个半月内已更新

答案 3 :(得分:1)

这将满足OP规定的所有要求:

$timeFrame = (get-Date).AddDays(-90)
get-aduser -SearchBase 'YourOU,DC=Domain,DC=com' -Filter * -Properties * | 
Where-Object {$_.whenChanged -lt $timeFrame -and $_.mail -ne $null -and $_.Enabled -eq $true} |
Select-Object -Property Name | Sort-Object{Get-Random} | select -First 10

这应该通过代码片段满足所有OP的检查点:

“我要搜索具有电子邮件地址的广告帐户” $_.mail -ne $null

“&登录” $_.Enabled -eq $true

“最近3个月内修改” $_.whenChanged -lt $timeFrame