ForEach-object循环中的嵌套IF语句

时间:2014-11-25 16:11:05

标签: powershell active-directory

我目前正试图找出特定群组的哪些成员在过去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检索所有成员时,它是否将结果集放在数组中?如果是这样,我如何检索上次登录日期的值?

2 个答案:

答案 0 :(得分:1)

这样的东西?

Get-ADGroupMember -recursive -identity "Remote Desktop" |
    Where { $_.objectClass -eq "user" } |
    Get-ADUser -properties SamAccountName, LastLogonDate |
    Where { $_.LastLogonDate -lt $time } |
    select SamAccountName
  • 过滤出小组
  • 我想你想要所有嵌套成员?
  • 加载LastLogonDate

答案 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
    }
}