기술자료 (KB)/Active Directory (AD)

Active Directory 직함 그룹 설정 방법

이완주 2022. 2. 11. 17:49

문의 내용

직함 그룹을 만들어 사용자를 해당 부서에 넣고 직급에 맞게 권한을 부여하고자 한다.

예를 들어 과장 직급을 가지고 있는 사용자만 접근 가능하게 구성 등

 

1.     직함 그룹을 생성해야 한다.

2.     해당 그룹에 사용자의 직함을 확인하여 직함에 맞게 자동으로 그룹에 추가해야 한다.

3.     조직도 변경 (승진)등의 이유로 해당 직함이 변경되었을 때 자동으로 기존 그룹에 삭제

해당 그룹에 자동으로 넣어야 한다.

) 과장에서 차장으로 승진, 과장 그룹에 멤버 제거 차장 그룹에 멤버 추가

 

1.     직함 그룹 생성

Powershell 명령어로 생성

New-ADGroup -Name "사원" -SamAccountName "사원" -GroupCategory Security -GroupScope Global -DisplayName "사원" -Description "사원" `
-Path "ou=titlegroups,ou=globalsoft,dc=gsoft,dc=local"

 

Csv 파일로 일괄 등록

Titlegroup.csv 파일 정보 한글로 표현되어 있음으로 반드시 UTF-8로 저장  

group,description
대표이사,00 대표이사
전무,01 전무
상무,02 상무
이사,03 이사
부장,04 부장
차장,05 차장
과장,06 과장
대리,07 대리
주임,08 주임
사원,09 사원

 

Powershell 명령어로 csv 파일을 불러와 일괄 등록

Import-Csv -Path C:\Temp\titlegroup.csv | ForEach-Object `
{
    Write-Host "Add Group :" $_.group
    New-ADGroup -Name $_.group -SamAccountName $_.group -GroupCategory Security -GroupScope Global -DisplayName $_.groupe -Description $_.description `
    -Path "ou=titlegroups,ou=globalsoft,dc=gsoft,dc=local"
}

 

실행 결과

 

2.     해당 그룹에 사용자 추가

단 사용자의 직함 정보가 등록되어 있어야 함.

인사정보를 받아 1번 방법으로 csv 파일로 일괄 수정해서 값을 변경 가능

 

구성원 확인 샘플로 3개 계정만 등록되어 있는 상태

#그룹 구성원 확인
Get-ADUser -SearchBase "OU=globalsoft,DC=gsoft,DC=local" -Filter * -Property title, memberof | select name, title, memberof

 

해당 멤버를 직함 그룹에 넣기

# 직급(Title)에 맞는 그룹에 멤버 추가 (직급별 그룹 멤버 추가)
$accountName = Get-ADUser -SearchBase "OU=globalsoft,DC=gsoft,DC=local" -Filter * -Property title | select samaccountname
Write-Host "부서 그룹에 맞게 멤버 추가"
foreach ($user in $accountName.samaccountname)
{
Write-Host "사용자 계정 : " $user
$title = (Get-Aduser $user -Properties title).title
  if($title) { 
Add-ADGroupMember $title -Members $user
}
 
}

 

 

3.     직함 수정할 경우 아래 스크립트 실행하면 직함에 맞지 않는 멤버 자동으로 제거

$groupName = Get-ADGroup -SearchBase "ou=titlegroups, OU=globalsoft,DC=gsoft,DC=local" -Filter * | select samaccountname
Write-Host "부서 그룹에 맞지 않는 멤버 제거"
foreach ($group in $groupName.samaccountname)
{
    Write-Host "Group : " $group
    $members = Get-ADGroupMember -Identity $group
 
    foreach ($user in $members.samaccountname)
    {
        if ($user -ne $null) {
            $usertitle = (Get-ADUser $user -Property title).title
            if($group -ne $usertitle) {
                Write-Host "Remove User : $user"
                Remove-ADGroupMember $group -Members $user
            }
        }
   }
}

 

아래와 같이 다를 경우 삭제 확인 메시지 나오고 예를 눌러 멤버 제거