Bir ihtiyaç doğrultusunda hazırlamış olduğum bu script ile PowerShell kullanarak Active Directory (AD) kullanıcılarını toplu bir şekilde belirlediğimiz gruplara üye yapabilmekteyiz.
Scripte GitHub üzerinden ulaşabileceğiniz gibi, yazının son kısmından da erişebilirsiniz. Öncelikle, scriptte bulunan satırları inceleyelim.
Active Directory Bulk Group Script İncelemesi
Script, yapılan tüm işlemlerin çıktısını C:\Import.csv
adı altında kaydetmektedir. Bu işlem için “Start-Transcript” parametresi kullanılmıştır.
$csvPath = Read-Host "Enter the path of the CSV file: "
satırı ile kullanıcıdan CSV dosyasının yolu sorulmakta ve belirtilen CSV dosyası$csv = Import-Csv -Path $csvPath
satırı ile import edilmektedir.$groupName = Read-Host "Enter the name of the group: "
satırı ile kullanıcıdan, kullanıcıların ekleneceği grup ismi sorulmakta ve belirtilen grup AD üzerinde kontrol edilmektedir. Eğer ilgili grup AD üzerinde bulunmuyorsaWrite-Error
satırı ile hata mesajı verilmektedir.
Script içerisinde ayrıca Hashtable ve mesaj satırları bulunmaktadır. Bu satırlar, import işlemi sırasında oluşan tüm aksiyonlar için farklı şekillerde komut ekranında bildirim bırakmaktadır.
Active Directory Toplu Kullanıcı Import Etme Scripti
Aşağıdaki script ile Active Directory kullanıcılarını toplu olarak belirli bir gruba ekleyebilirsiniz:
<#
=============================================================================================
Name = Cengiz YILMAZ - Microsoft MVP
Date = 1.03.2023
www.cengizyilmaz.net
www.cozumpark.com/author/cengizyilmaz
============================================================================================
#>
[CmdletBinding(SupportsShouldProcess)]
Param()
Start-Transcript -Path "C:\Import.csv"
# CSV Path
$csvPath = Read-Host "Enter the path of the CSV file: "
# CSV Read
$csv = Import-Csv -Path $csvPath
# Group Name
$groupName = Read-Host "Enter the name of the group: "
# Group Search
try {
$group = Get-ADGroup -Identity $groupName -ErrorAction Stop
}
catch {
Write-Error "$groupname group not found"
return
}
# Group Check
if ($group -eq $null) {
Write-Error "$groupName group not found."
return
}
# Hashtable and Colors
$successMessage = @{
ForegroundColor = "Green"
}
$errorMessage = @{
ForegroundColor = "Red"
}
$alreadyMemberMessage = @{
ForegroundColor = "Cyan"
}
# Transcript
$messages = @()
foreach ($row in $csv) {
# In the CSV file, the user's name will be in the UserPrincipalName column.
$userPrincipalName = $row.UserPrincipalName
# Let's find the user.
$user = Get-ADUser -Filter { UserPrincipalName -eq $userPrincipalName } -Properties MemberOf
# If there is no user, let's print an error message.
if ($user -eq $null) {
$messages += @{
Message = "$userPrincipalName user not found in Active Directory."
Options = $errorMessage
}
continue
}
# If the user is already a member of this group, let's print a message.
if ($user.MemberOf -contains $group.DistinguishedName) {
$messages += @{
Message = "$userPrincipalName user is already a member of $groupName group."
Options = $alreadyMemberMessage
}
continue
}
# Let's add the user to the group.
if ($group -ne $null -and $PSCmdlet.ShouldProcess("$userPrincipalName user", "Add to $groupName group")) {
Add-ADGroupMember -Identity $groupName -Members $user
}
# Let's write a successful message.
$messages += @{
Message = "$userPrincipalName user added to $groupName group."
Options = $successMessage
}
}
# Let's print the messages on the screen.
$messages | ForEach-Object {
Write-Host $_.Message -ForegroundColor $_.Options.ForegroundColor
}
# End
Stop-Transcript