그동안 파워쉘로 Active Directory 상 User Object를 생성하는 스크립트를 계속 업데이트 해오다보니 단 한줄이었던 스크립트가 어느덧 300줄 정도로 늘어났다.
스크립트가 길어지다보니 기능별로 모듈화된 함수를가진 별도의 파일들로 나눌까도 생각해봤지만 어차피 수정하는 사람은 나뿐이고 실행하는 사람도 나포함 둘뿐이라 굳이 그런 큰 작업을 할 것 같지는 않다.
블로그에 포스팅하고 싶은 기능들도 있었지만 혹여 회사 서버 아키텍트나 하다못해 네이밍 규칙이라도 어떤 실마리라도 보일까 싶어 포스팅하지 않고 있었는데 이번 기능은 별 상관 없을 것 같다. OU 경로와 공유폴더 경로는 classified 처리했다.
아래의 스크립트는 AD 계정을 생성하고나서 생성된 계정들의 정보와 추가작성한 메모를 담은 CSV파일을 특정 공유폴더에 자동저장하는 스크립트이다.
테스트 스크립트로 따로 작성하여 생성된 계정이 아닌 특정 OU에 있는 계정들을 불러와서 CSV파일로 export하도록 작성했는데, 계정생성 스크립트에서 $testUsers 변수에 생성되는 계정들만 담아주면 그대로 사용 가능할 것이다.
$searchOU = CLASSIFIED_OU
$firstUsers = Get-ADUser -SearchBase $searchOU -filter * -Properties SamAccountName, Title, Manager, PasswordNeverExpires
$testUsers = @()
foreach($user in $firstUsers){
$testUsers += $user
}
$today = Get-Date -Format "yyyy-MM-dd"
$thisYear = $today.split("-")[0]
$administratorAccount = (Get-WmiObject -Class Win32_ComputerSystem).UserName.split('\')[1]
$parentPath = "C:\CLASSIFIED PATH\AD_Account_Creation_Log"
$newDirectoryName = $thisYear
$newDirPath = Join-Path -Path $parentPath -ChildPath $newDirectoryName
if(Test-Path -Path $newDirPath -PathType Container){
#이 경우에는 패스.
}else{
New-Item -Path $newDirPath -ItemType Directory
}
$goFlag = $true
$initialPathNFile = "$newDirPath\AD account created $today by $administratorAccount"
$addNum = 1
$initialPathNFile += " - " + $addNum
while($goFlag){
if(Test-Path -Path "$initialPathNFile.csv"){
$initialPathNFile = $initialPathNFile.Substring(0, $initialPathNFile.Length -1)
$addNum += 1
$initialPathNFile += $addNum
}else{
$goFlag = $false
}
}
$addableMemo = Read-Host "Write down memo(optional)"
$addableMemoObject = [PSCustomObject]@{
DistinguishedName = $addableMemo
}
$testUsers += $addableMemoObject
$testUsers | Export-Csv "$initialPathNFile.csv"
주요 기능은 아래와 같다.
- 특정 경로에 스크립트를 실행한 연도의 폴더를 만들고 그 안에 실행일자와 실행관리자의 이름이 붙은 CSV파일을 생성한다.
- 이미 해당 연도의 폴더가 있다면 더 만들지는 않고 그 안에 CSV파일만 생성한다.
- 하루에 여러번 스크립트를 실행할 경우 CSV파일에 숫자가 붙고 하나씩 늘어난다.
- 메모를 넣을건지 물어보는데, 뭔가 기입하면 CSV파일 최하단에 메모가 붙는다. 특이사항이 있을 시 기입할 수 있도록 넣은 기능.
'At actual field' 카테고리의 다른 글
Powershell을 통한 M365 그룹 생성 및 수정 (0) | 2024.05.18 |
---|---|
Powershell로 Active Directory 퇴사자 계정 처리하기 (0) | 2024.05.18 |
Powershell로 로컬 프로필 삭제하기 (0) | 2024.05.02 |
Trouble Shooting error 0xCAA50021 (0) | 2024.01.12 |
Powershell을 통한 Active Directory의 객체 정보 수정 (0) | 2024.01.11 |