이번 포스팅에서는 ChatGPT를 활용하여 Bulk 작업을 진행 후 진행에 대한 결과를 CSV로 내보낼 수 있는 foreach, try, catch 구문을 다뤄 보겠습니다.
사실 Powershell 영역은 제가 어려워하는 파트 중 하나이며, 되도록 단순하고 이해하기 쉽게 Script를 작성하려고 합니다.
단순한 구조가 누군가에게 전달하여 이해시키기는 쉽지만, 활용 영역이 제한적일 수 밖에 없습니다.
또한 단순하게 작성한 만큼 연계되는 동작은 여러 개의 Script로 만들어야 하기 때문에 매우 번거롭습니다. ChatGPT에게 Sample Script를 학습 시킨 뒤, 원하는 작업을 동일한 구조로 생성을 요청하면 유용한 Script를 제작할 수 있습니다.
I. Import-csv | Foreach-Object 구조로 메일 그룹 생성
아래와 같이 BulkTest 하위에 Group 이라는 OU가 있습니다.
Group OU에 아래의 CSV 파일을 이용하여 메일 그룹 생성에 대한 요청을 받았습니다.
메일 그룹을 생성하는 명령어 구조는 다음과 같습니다.
#메일 그룹 생성
New-DistributionGroup -Name [Name] -PrimarySMTPAddress [Main Email Address] -DisplayName [표시이름] -OrganizationalUnit [OU 위치] -Type [Security or Distribution]
#예시
New-DistributionGroup -Name TestGroup1 -PrimarySMTPAddress TestGroup1@contoso.kr -DisplayName TestGroup1 -OrganizationalUnit 'OU=Group,OU=BulkTest,DC=corp,DC=contoso,DC=kr' -Type Security
기술자료: New-DistributionGroup (ExchangePowerShell) | Microsoft Learn
CSV 파일을 이용하여 Bulk 작업이 필요한 경우 다음과 같이 진행합니다.
Import-Csv -Path C:\csv\Group.csv |ForEach-Object {New-DistributionGroup -Name $_.Name -PrimarySmtpAddress $_.PrimarySMTPAddress -DisplayName $_.Displayname -OrganizationalUnit 'OU=Group,OU=BulkTest,DC=corp,DC=contoso,DC=kr' -Type Security}
진행 결과
대부분의 테스트 환경에서는 깔끔하게 명령어가 오류 없이 진행됩니다.
하지만 실제 운영환경에서 Bulk 작업을 진행하면, 많은 변수가 생길 수 있습니다.
예를 들면 동일한 속성값을 사용하면 개체는 생성되지 않고 오류가 발생합니다.
만약 생성해야 할 개체가 20~30개가 아니라 300~1000개씩 작업할 경우에는 순식간에 진행하는 명령어 속에서 오류를 확인하는 것은 매우 골치 아픈 작업입니다.
아래와 같이 300개의 그룹을 생성하는 명령어를 진행하였고, 1~23까지는 중복 이름이 사용되었기 때문에 오류가 발생합니다.
그러나 Bulk 명령어 구조상 아래와 같이 계속 진행됩니다.
II. foreach, ErrorAction, try, catch를 이용하여 메일 그룹 생성 및 결과 내보내기
이번에는 ChatGPT에게 Import-Csv -Path C:\csv\Group.csv |ForEach-Object {New-DistributionGroup -Name $_.Name -PrimarySmtpAddress $_.PrimarySMTPAddress -DisplayName $_.Displayname -OrganizationalUnit 'OU=Group,OU=BulkTest,DC=corp,DC=contoso,DC=kr' -Type Security} 를 학습시킨 뒤, 진행 결과 및 오류에 대해서 CSV 로 내보내기는 Script 를 작성을 요청하였습니다.
# Import CSV file
$entries = Import-Csv -Path C:\csv\Group.csv
# Empty array to collect results
$results = @()
foreach ($entry in $entries) {
try {
# Create new distribution group
New-DistributionGroup -Name $entry.Name -PrimarySMTPAddress $entry.PrimarySMTPAddress -DisplayName $entry.Displayname -OrganizationalUnit "OU=Group,OU=BulkTest,DC=corp,DC=contoso,DC=kr" -Type Security -ErrorAction Stop
# Add to results array
$results += [PSCustomObject]@{
Name = $entry.Name
PrimarySMTPAddress = $entry.PrimarySMTPAddress
DisplayName = $entry.Displayname
Status = "Success"
}
} catch {
# If there's an error, add it to the results array
$results += [PSCustomObject]@{
Name = $entry.Name
PrimarySMTPAddress = $entry.PrimarySMTPAddress
DisplayName = $entry.Displayname
Status = "Failed - $($_.Exception.Message)"
}
}
}
# Export results to CSV
$results | Export-Csv -Path C:\csv\Output_GroupList.csv -NoTypeInformation -Encoding UTF8
해당 Script를 PS1 파일로 저장합니다.
기존에 생성된 개체를 완전히 제거 후, Exchange Powershell에서 Script를 실행
아래와 같이 결과에 대한 CSV 파일 생성됨 확인
작업 결과에 대한 List를 필터링 및 확인함으로써 누락되는 부분을 줄일 수 있습니다.
Script가 Error 기록을 남기는지 확인하기 위해서 생성된 메일 그룹 중 일부를 삭제
다시 Script를 실행
Output 파일을 확인해보면, 아래와 같이 Success 와 Failed를 확인할 수 있으며, Failed 일 경우에는 사유까지 기록된 다는 것을 알 수 있습니다.
그리고 ChatGPT에게 Script 분석을 요청하면, 동작의 원리를 배우는데 많은 도움이 됩니다.
III. ChatGPT생성된 Script를 학습시킨 뒤, 다른 명령어도 동일한 구조의 Script 생성
기존에 생성한 Script를 새로운 채팅창에 입력합니다.
아래와 같이 분석작업을 진행합니다.
이번에는 M365에서 Hard Match에 필요한 ImmutableID를 Bulk로 입력하는 Script를 생성해 보겠습니다.
채팅창에 아래와 같이 입력합니다.
Import-Csv -Path C:\csv\hardmatch.csv|Foreach-Object {Set-MsolUser -UserPrincipalName $_.UPN -ImmutableId $_.ImmutableID} 명령어도 위와 동일한 구조의 Script로 만들어주세요. |
아래와 같이 Script가 생성됩니다.
# Import CSV file
$entries = Import-Csv -Path C:\csv\hardmatch.csv
# Empty array to collect results
$results = @()
foreach ($entry in $entries) {
try {
# Set ImmutableId for the user
Set-MsolUser -UserPrincipalName $entry.UPN -ImmutableId $entry.ImmutableID -ErrorAction Stop
# Add to results array
$results += [PSCustomObject]@{
UPN = $entry.UPN
ImmutableID = $entry.ImmutableID
Status = "Success"
}
} catch {
# If there's an error, add it to the results array
$results += [PSCustomObject]@{
UPN = $entry.UPN
ImmutableID = $entry.ImmutableID
Status = "Failed - $($_.Exception.Message)"
}
}
}
# Export results to CSV
$results | Export-Csv -Path C:\csv\Output_HardmatchList.csv -NoTypeInformation -Encoding UTF8
아래와 같이 Script 구성이 어떻게 되어 있는지도 설명해줍니다.
위와 같은 방법으로 ChatGPT를 통하여 Bulk 작업에 대해 결과를 확인할 수 있는 Script를 쉽게 제작할 수 있습니다.
'ChatGPT > Powershell Script' 카테고리의 다른 글
ChatGPT. AD 특정 OU의 사용자 개체들의 속성 값 변경 Script (0) | 2023.10.08 |
---|