我目前正试图找出特定群组的哪些成员在过去30天内未登录AD。我已设法返回该组的所有用户,但在将此管道传递给Foreach-object循环时遇到问题。
import-module activedirectory
$DaysInactive = 30
$time = (Get-Date).Adddays(-($DaysInactive))
get-adgroupmember -identity "Remote Users" | foreach-object {
if ($_.LastLogonDate -lt $time) {
write-host $_.SamAccountName
}
}
我认为问题在于我在调用LastLogonDate时使用AD用户属性,因此我收到一条错误消息,说明它无法识别。
我想象在循环中我需要一个get-aduser
cmdlet,但我不确定要发送什么作为-filter
的值。
当PowerShell从get-adgroupmember
检索所有成员时,它是否将结果集放在数组中?如果是这样,我如何检索上次登录日期的值?
答案 0 :(得分:1)
这样的东西?
Get-ADGroupMember -recursive -identity "Remote Desktop" |
Where { $_.objectClass -eq "user" } |
Get-ADUser -properties SamAccountName, LastLogonDate |
Where { $_.LastLogonDate -lt $time } |
select SamAccountName
答案 1 :(得分:0)
好吧,我没有时间对它进行全面测试,所以它不在袖口,但这应该让你朝着正确的方向前进:
import-module activedirectory
$DaysInactive = 30
$time = (Get-Date).Adddays(-($DaysInactive))
$users = get-adgroupmember -identity "Remote Users"
foreach($user in $users){
$lastLogin = (Get-ADUser $user -Property LastLogonDate).LastLogonDate
if($lastLogin -lt $time){
Write-Host $user.SamAccountName
}
}