도메인에서 비활성 사용자 계정 찾기
액티브 디렉터리는 사용자,컴퓨터 및 관련 개체에 대한 정보를 유지 관리하는 디렉터리 서비스입니다. 비활성 사용자 계정을 찾는 방법은 다음과 같습니다.
그것은 유용하고 관련성이 시간이 지남에 따라 유지 보수가 필요 관계형 정보의 데이터베이스입니다. 디렉터리에는 더 이상 사용되지 않는 계정이 있습니다. 활성 디렉토리에 해당 계정을 찾는 것은 언뜻 소리만큼 쉬운 일이 아닙니다. 비활성 사용자 계정을 찾고 제거 자동화를 살펴 보겠습니다.
검색 기준 정의
이 프로세스에 필요한 것을 정의해 보겠습니다. 우리의 목표는 오랜 기간 동안 네트워크에 로그인하지 않은 직원 계정을 찾는 것입니다. 나는 항상 비활성 상태를 쿼리하는 좋은 척도로 90 일 또는 120 일을 사용했지만 그 숫자는 14 일로 낮을 수 있습니다. 당신은 당신의 조직을 위해 맞은 무슨을 결정할 필요가 있다. 90 일은 휴가,가족 비상사태,또는 장시간 의학 잎을 위한 사무실에서 사람들을 허용하기 위하여 충분히 큰 방석을 줍니다. 계정이 비활성 90 일에 도달하면,우리는 그 계정을 사용하지 않도록 설정하고 별도의 운영 체제로 이동하려고합니다.
우리가 먼저 찾고있는 것을 정의하면 따라야 할 간단한 규칙 세트를 만들 수 있습니다. 우리의 규칙 세트는 다음과 같습니다:
- 90 일 동안 로그온 활동이 없는 활성 계정을 찾아 사용하지 않도록 설정합니다.
- 각 비활성화된 계정을 비활성화된 사용자로 이동
- 각 비활성화된 사용자에게 자동화된 프로세스에서 비활성화되었다는 설명을 표시합니다.
계정 비활성 속성 찾기
각 사용자 계정에는 로그인 정보가 포함된 여러 속성이 있습니다. 마지막 로그인 시간을 표시하는 속성을 찾고 싶습니다. 이러한 속성을 찾을 수 있다면 특정 날짜 이후에 로그인하지 않은 계정을 쿼리하는 데 사용할 수 있습니다. 우리는 모든 규칙 집합을 표시하고 작업 할 특성을 선택하는 파워 쉘을 사용할 수 있습니다.
이 문제를 해결하려면 다음 단계를 따르세요. 모든 사용자 속성을 표시하려면 추가해야 합니다. 우리가 밖으로 그 구문을 떠날 경우,우리는 단지 10 속성입니다 기본 속성을 볼 수 있습니다.
Get-ADUser Michael_Kanakos -Properties *
쿼리에서 긴 필드 목록을 반환합니다(150 개 이상!). 와일드 카드를 사용하여 특정 단어를 포함하는 속성을 검색 할 수 있습니다. 이를 통해 작업에 유용 할 수있는 속성을 찾을 수 있습니다. 우리는 로그온 정보를 찾으려면,그래서 단어 로그온을 포함하는 속성을 검색 할 수 있습니다.
일단 우리가 모든 속성을 얻을 수 있는 속성 목록 일치 단어 로그온 속성을 표시 하도록 제한할 수 있다면 도움이 될 것입니다. 선택-개체는 와일드 카드 일치를하고 우리의 결과를 제한 할 수있는 기능을 제공합니다. 문자(“파이프”라고 함)는 왼쪽의 결과를 가져 와서 선택 객체에 전달합니다. 선택-객체는 와일드 카드 매칭을 수행 한 다음 와일드 카드 기준에 따라 결과를 제한합니다.
Get-ADUser username -Properties * | Select-Object *logon*
BadLogonCount : 0
lastLogon : 132181280348543735
LastLogonDate : 11/11/2019 9:08:45 PM
lastLogonTimestamp : 132179981259860013
logonCount : 328
LogonWorkstations :
MNSLogonAccount : False
SmartcardLogonRequired : False
결과는 활성 디렉토리의 도메인 기능 수준에 따라 약간 달라집니다. 내 검색은 8 개의 속성을 반환합니다. 마지막 로그온,마지막 로그온 날짜 및 마지막 로그온 타임 스탬프의 세 가지가 유망 해 보입니다. 활성 디렉토리가 특정 속성에 날짜/시간 정보를 저장하는 방법에 익숙하지 않은 경우 일부 값은 약간 이상하게 보일 수 있습니다. 일부 날짜 정보는 전통적인 날짜-시간 정보이며 일부는”틱”으로 저장됩니다.날짜-시간 값은 0001 년 1 월 1 일 오전 12 시 이후의 틱 수로 날짜를 나타냅니다. 틱은 밀리초 당 10,000 틱이 있다는 것을 의미하는 두 번째의 1,000 분의 1 과 같습니다. 틱을 표준 날짜 형식으로 변환할 수 있습니다.
날짜/시간을 나타내는 실제 눈금을 표시합니다. 당신이 날짜 형식으로 진드기를 변환 편안 경우,당신은 활성 디렉토리 사용자 및 컴퓨터 또는 활성 디렉토리 관리 센터에서 해당 필드를 볼 수 있습니다. 두 앱 모두에서 틱은 시간-날짜 형식으로 표시됩니다.
애디저 로그온 속성
로그온 속성 설명
날짜/시간 로그온 정보를 표시하는 여러 속성을 검색했습니다. 두 속성은 동일한 날짜 및 시간을 가지며 하나는 그렇지 않습니다. 무슨 일이야?
날짜-시간 정보의 분산은 의도적으로 설계되었으며 모든 로그온 정보를 동기화 상태로 유지하려고 시도하는 복제 트래픽으로 인해 전류가 흐트러지지 않도록 보호합니다. 인증할 때마다 마지막 로그온 속성이 업데이트되지만 데이터가 인증된 직류에 저장되고 다른 직류에 복제되지 않습니다.
날짜를 보면 지연된 복제가 쿼리에 어떤 영향을 줄 수 있는지 알 수 있습니다. 이 예제에서는 마지막 로그온 타임 스탬프가 실제로 2 일 뒤에 있음을 알 수 있습니다. 사용자가 대화형으로 로그인하거나 네트워크 파일 공유에 연결하거나 네트워크에서 계정을 인증해야 하는 기타 작업을 수행할 때마다 로그온 정보가 활성 디렉터리에 저장됩니다. 누군가가 네트워크에서 무언가를 만질 때마다 그 데이터를 복제하면 큰 환경에서 직류 데이터가 압도 될 수 있습니다. 결과적으로 일부 로그온 정보는 정확하지만 복제되지 않으며 일부 로그온 정보는 복제되지만 가끔씩 만 복제됩니다.
요구 사항에 대해서는 정확한 로그온 타임 스탬프가 필요하지 않습니다. 오랜 시간(90 일 이상)에 로그온하지 않은 계정만 찾으면 됩니다. 날짜가 며칠 떨어져 있어도 모든 값이 유용 할 수 있습니다. 예를 들어 로그온 날짜를 사용하는 경우 쿼리 시간은 사용하는 값에 따라 11/11 또는 11/13 이 될 수 있습니다. 빨리 감기 3 개월 내가 다시 로그온하지 가정. 한 날짜는 90 일 이상 비활성 상태로 플래그를 지정하고 한 필드는 비활성 상태로 플래그를 지정하지 않습니다. 하지만 매달 실행이 프로세스를 설정 하는 경우 우리가 확인 하는 다음 번에 계정을 잡을 것 이다. 이것이 중요한 부분입니다. 우리는 정기적으로이 작업을 수행하는 경우,우리는 한 우리가 지속적으로 확인으로 두 필드를 사용할 수 있습니다.
두 가지 이유로 마지막 로그 날짜 속성을 사용했습니다. 첫째,그것은 이미 날짜 값이므로 값을 변환하는 것을 처리 할 필요가 없습니다. 둘째,그것은 복제 된 가치이며,그것은 내 인생을 더 쉽게 만듭니다. 내 네트워크의 다른 도메인 컨트롤러에 대해 인증하는 사람에 대한 최신 날짜가 아닙니다. 나는 각 사용자가 최신 타임 스탬프를 얻기 위해 로컬 직류를 쿼리해야 할 것이고,그것은 할 일이 많고 효율적이지 않다.
단일 계정에 대한 정보를 얻으려면 코드가 간단합니다.
get-aduser Michael_Kanakos -properties LastLogonDate | Select-Object Name, LastLogonDate
Name LastLogonDate
---- -------------
mkanakos 11/11/2019 9:08:45 PM
내 모든 사용자에 대해이 작업을 수행하려면 조금 더 많은 코드 만 필요합니다. 필터를 사용하여 모든 사용자 계정을 쿼리해야 합니다.
Get-ADUser -filter * -properties LastLogonDate | Select-Object Name, LastLogonDate
이제 로그온 날짜가 90 일보다 오래된 계정 만 찾아 보겠습니다. 비교 연산자로 사용하려면 저장된 현재 날짜가 필요합니다.
$date = (get-date).AddDays(-90)
Get-ADUser -Filter {LastLogonDate -lt $date} -properties LastLogonDate | Select-Object Name, LastLogonDate
이 코드는 90 일 이상 로그인하지 않은 모든 사용자를 검색합니다. 90 일 전 날짜를 변수에 저장합니다. 우리는 그 날짜보다 적은 로그온을 찾기 위해 광고 필터를 만들 수 있습니다. 다음으로,우리는 활성 계정을 쿼리하는 요구 사항에 추가해야합니다. 이 예제에서는 구문이 매우 길기 때문에 코드를 더 읽기 쉽게 만들기 위해 스플래 팅을 사용하고 있습니다. 따라서 스플래 팅 예제 아래에 긴 형식의 구문 버전도 표시했습니다.
$date = (get-date).AddDays(-90)
$paramhash = @{
Filter = "LastLogonDate -lt $date -and Enabled -eq $true"
Properties = 'LastLogonDate'
}
$SelectProps = 'Name','LastLogonDate','Enabled','DistinguishedName'
$InactiveUsers = Get-Aduser @paramhash | Select-Object $SelectProps
$InactiveUsers = Get-ADUser -Filter {LastLogonDate -lt $date -and Enabled -eq $true} -properties LastLogonDate, DistinguishedName | Select-Object Name, LastLogonDate, Enabled, DistinguishedName
이렇게 하면 활성화된 비활성 사용자가 표시됩니다. 우리는 재사용을 위해 변수에 결과를 저장합니다. 구별된 이름 속성은 나중에 필요합니다. 계정을 비활성화:우리는 사용자를 발견하면,우리는 우리의 다음 단계에서 작업 할 수 있습니다. 우리는 광고 사용자 계정 변경을 할 수 있습니다.
$Today = Get-Date
$DisabledUsers = (
$InactiveUsers | Foreach-object {
Set-User $_.DistinguishedName -Enabled $false -Description "Acct disabled on $Today via Inactive Users script"}
)
사용자 계정이 비활성화되었습니다. 그것은 새로운 오우로 이동하는 시간이다. 이 예제에서는 사용 안 함 사용자라는 이름을 사용합니다. 이 경우 사용자가 대상 객체로 이동할 수 있습니다.
$DisabledUsers | ForEach-Object {
Move-ADObject $_.DistinguishedName -TargetPath "OU=Disabled-Users,DC=Contoso,DC=Com"}
마지막 단계에서는 이동 개체를 사용하여 사용자를 새 위치로 이동했습니다. 이제 우리는 신뢰할 수 있고 반복 가능한 자동화 작업을 수행하는 데 필요한 핵심 코드를 가지고 있습니다. 그래서 다음은 무엇입니까? 그것은 당신의 개인적인 필요조건에 달려 있습니다. 이 코드는 매월 동시에 자동으로 실행되도록 설정할 수 있고 설정해야 합니다. 한 가지 쉬운 방법은 매월 코드를 실행하도록 예약된 작업을 만드는 것입니다.
더 나은 만들기 위해이 코드에 추가 할 수있는 더 많은 것이 있습니다. 오류 검사 및 추가 사용자 정보 필드에 대한 코드는 두 가지 유용한 추가 기능입니다. 이러한 유형의 작업을 실행하는 대부분의 팀은 다른 사람이 검토할 수 있도록 비활성화된 작업에 대한 보고서를 생성하므로 추가 필드가 달라집니다. 보고서를 보다 유용하게 만들기 위해 활성 디렉터리에서 더 많은 필드를 포함할 수 있습니다. 우리는 6 개월 후 그 장애인 사용자를 삭제하는 또 다른 작업을 생성하여이 작업을 한 단계 더 걸릴 수 있습니다.
까다로운 자동화 요청을 해결하는 것은 작업을 관리 가능한 부분으로 나눌 때 훨씬 쉽습니다. 우리는 요구 사항을 시작하고 작은 단계에서 우리의 구문을 구축;다른 변수에 추가하려고하기 전에 각 단계가 작동하는지 확인. 이렇게함으로써,우리는이 작업을 이해하기 쉽고 잘하면 훌륭한 학습 경험을했다.