Powershell 从广告中随机选择用户

Powershell 从广告中随机选择用户,powershell,active-directory,Powershell,Active Directory,我们的任务是创建一个流程,每季度检查随机员工的网络流量。我在Powershell中启动了一个脚本,从特定的OU中随机选择10个用户,但我仍然得到一些不需要的数据。我需要帮助进一步筛选列表。该输出为我提供了已禁用并留在OU中的用户以及长时间未登录的PRN员工。我想搜索的广告帐户,有一个电子邮件地址和登录,在过去3个月内修改。下面是我到目前为止所用代码的一个示例 Get-ADUser -SearchBase "ou=ouname,ou=ouname,dc=domainname,dc=suffix"

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

Get-ADUser -SearchBase "ou=ouname,ou=ouname,dc=domainname,dc=suffix" -Filter * | Select-Object -Property Name | Sort-Object{Get-Random} | select -First 10
[编辑:回答的问题]

这是我的最后一个脚本,添加了
$\u.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
试试这个:

$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

更改
-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仅返回启用的用户,并且他们的
LastLogonItemStamp
值已在过去一个半月内更新。这将完成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
这应该通过代码段满足所有OPs检查点:

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

“登录(&a)”
$\已启用-eq$true

“在过去3个月内修改”
$更改时-lt$时间范围


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 }


这里是一个开始。

当更改时
可能不是这里的最佳指标-如果帐户在过去90天内被禁用,它将显示upSure。如果愿意,可以使用whenChanged属性。但仅仅禁用该帐户就被视为一种改变,因此它仍然会出现。如果要排除已禁用的帐户,最好的方法是将其过滤掉。所以现在你的代码看起来像这样(我发布了另一个答案)。或者您可以使用LastLogontimeStamp。如果
LastLogontimeStamp
在给定的时间段内无法准确检索具有登录名的用户,您是否建议查询其他属性?我尝试了此操作,得到了从未登录过的测试帐户。我注意到你把
$\uwhenchange-gt
改为
$\uwhenchagned-lt
是的,这是一个打字错误。OP希望在过去3个月内,而不是之后。我纠正了我在原始帖子中的疏忽。我能够从这个片段中得到我所需要的。我唯一更改的是将属性设置为通配符
-properties*
,添加了
排序对象{Get Random}| Select-First 10
,我将在上面发布我的最终脚本。