2014-11-25 3 views
0

현재 특정 그룹의 구성원이 지난 30 일 동안 AD에 로그인하지 않은 것을 확인하려고합니다. 그룹의 모든 사용자를 반환 할 수 있지만이 Foreach - 개체 루프에 파이핑 할 때 문제가 있습니다.ForEach 개체 루프의 중첩 IF 문

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이 ​​모든 구성원을 검색 할 때 결과 집합을 배열에 배치합니까? 그렇다면 마지막 로그온 날짜의 값을 어떻게 검색 할 수 있습니까?

+3

해야 be :'if ($ _. LastLogonDate -lt $ time)' – arco444

+1

또한 .LastLogonDate 속성은 기본적으로 검색되지 않습니다. Get-ADGroupMember에서 반환 된 각 항목을 가져 와서 Get-ADUser를 사용하여 .LastLogonDate 속성을 명시 적으로 가져와야합니다. – EBGreen

+0

@EB 그린 당신이 맞습니다. arco444의 제안을 적용한 이후로 조건문을 평가하지 않은 채 모든 멤버를 반환합니다. 필터를 지정해야 할 때 Get-ADUser로 무엇을 지정합니까? – JLPH

답변

1

이와 비슷한?

Get-ADGroupMember -recursive -identity "Remote Desktop" | 
    Where { $_.objectClass -eq "user" } | 
    Get-ADUser -properties SamAccountName, LastLogonDate | 
    Where { $_.LastLogonDate -lt $time } | 
    select SamAccountName 
  • 필터 밖으로 그룹
  • 난 당신이 중첩 된 모든 회원을 원하는 것 같아요?
  • 부하 LastLogonDate
+0

이미 파이프 라인이 있기 때문에'... | ? {$ _. LastLogonDate -lt $ time} | 중첩 된'if' 문과 함께'ForEach-Object' 루프 대신 -Expand SamAccountName'을 선택하십시오. –

+0

업데이트 됨, 알려 주셔서 감사합니다 – baldpate

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 
    } 
} 
+0

복잡한 파이프 명령을보다 구조화 된 foreach 루프로 변환하면이 방법을 사용할 수 있습니다. 이 방법을 사용하면 어떤 객체로 작업하고 있는지 명확하게 알 수 있습니다. – kevmar