Powershell Active Directory Toplu Kullanıcı Oluşturma
Powershell ile Active Directory üzerinde test için resimli gerçekçi toplu kullanıcı oluşturma, Powershell ile Active Directory bulk user oluşturma, Powershell ile RESTfull web service kullanımı, Powershell ile REST API çağırma, Powershell ile Active Directory ve REST API entegrasyonu, Örnek Powershell Script

Powershell Active Directory Toplu Kullanıcı Oluşturma
Powershell ile Active Directory toplu kullanıcı oluşturma makalesinde Powershell dili kullanımının biraz daha ileri seviyeye taşınması, yeteneklerinin daha iyi anlaşılması hedeflenmektedir. Organizasyon gereksinimlerine göre Active Directory ile diğer uygulamaların (örn. SAP, Microsoft Dynamics vb.) entegrasyonunun Powershell ile yapılabileceği anlaşılacaktır. Bu sayede ileride anlatılması planan Powershell Workflow konusunun daha iyi anlaşılması beklenmektedir.
Ebette bu senaryolar ve kullanılan methodlar sonsuz kere çoğaltılabilir. Bu makale özelinde temel seviyede, Powershell ile bir REST API – RESTfull web service üzerinden anlık oluşturulan kullanıcı listesi alınıp, Active Directory üzerinde toplu olarak kullanıcılar oluşturulacaktır. Kullanıcı oluşturulurken bazı kontrollerden de ayrıca geçirilecektir.
Powershell ile Active Directory toplu kullanıcı oluşturma hakkında internet üzerinde yüzlerce makale bulunmaktadır. Sitede bulunan Powershell eğitimlerinin ardından; bir csv kullanıcı listesini import-csv komutu ile alabilir, Pipeline komutu ile ayırabilir, ardından dönen toplu (bulk) veriyi Foreach döngüsüne sokabilirsiniz. Dönen her satır veri için de bir Active Directory kullanıcısı oluşturabilirsiniz diye düşünüyoruz. Bu makalede ki asıl amaç Powershell ile entegrasyon senaryolarına giriş yapabilmektir.
Powershell Active Directory Toplu Kullanıcı Oluşturma İşlemi İçin Gerekli Fonksiyonlarının Oluşturulması
Makalenin bu kısmında örnek Powershell script dosyasının içinde durması gereken ancak çalışmadan önce sizlerin karar vermesi gereken bazı Powershell fonksiyonları bulunmaktadır. (Örneğin; kaç adet kullanıcı oluşturulacak? Kullanıcıların bir e-posta adresi olacak mı? Kullanıcının resmi olsun mu? Hangi milliyetten insanlar oluşturmak istiyorsunuz?)
Tüm bu Powershell fonksiyonları sizlere gerçek hayat senaryolarında da oldukça yarar sağlayacaktır.
Yapınıza göre uzaktan Powershell script çalıştırmak engellenmiş olabilir. Script bu durumlarda hatalar verecektir. Script dosyasının çalıştırıldığı sunucuda ve bağlanılacak olan sunucuda aşağıdaki komutun çalıştırılması sorunları çözebilir.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Powershell ile Rest API – RESTfull Web Service Entegrasyonu
Function Initialize-DemoUser { [CmdletBinding()] Param ( [ Parameter (Mandatory = $true)] [int] $Count, [ Parameter (Mandatory = $false)] [string] $Nationality = "tr", [ Parameter (Mandatory = $false, HelpMessage = "https://randomuser.me/documentation#howto")] [string] $PassSettings = "special,upper,lower,number,8", [ Parameter (Mandatory = $false, HelpMessage = "https://randomuser.me/documentation#howto")] [string] $Include = "gender,name,city,country,postcode,email,login,phone,cell,picture,nat" ) Process { if ($Count -lt 5001) { $URL = "https://randomuser.me/api/?nat=" + $Nationality + "&results=" + $Count + "&password=" + $PassSettings + "&inc=" + $Include $PersonObjects = Invoke-RestMethod -Uri $URL return $PersonObjects }else{ Write-Error -Message "Maximum user count can't be more than 5000." -ErrorAction Continue } } }
Powershell ile Active Directory Sunucuna Bağlanmak
Powershell ile uzaktan Active Directory sunucuna bağlanmak için gerekli Connect-ActiveDirectory fonksiyonu opsiyoneldir. Powershell komutları yada script dosyası Active Directory sunucusu üzerinde de çalıştırılabilir ancak önerilmez. Bu yüzden ayrı bir fonksiyon olarak yazılmıştır.
Function Connect-ActiveDirectory { [CmdletBinding()] Param ( [ Parameter (Mandatory = $true, HelpMessage = "Active Directory FQDN")] [string] $Server, [ Parameter (Mandatory = $true, HelpMessage = "Active Directory Username")] [string] $Username, [ Parameter (Mandatory = $true, HelpMessage = "Active Directory Password")] [string] $Pass ) Process { $Password = $Pass | ConvertTo-SecureString -AsPlainText -Force $Credential = New-Object System.Management.Automation.PSCredential -ArgumentList $Username, $Password $Session = New-PSSession -ComputerName $Server -Credential $Credential Import-Module -PSSession $Session -Name ActiveDirectory -Global Write-Verbose -Message "Successfully imported Active Directory session..." -Verbose return $Session } }
Powershell ile Exchange Server Bağlanmak
Powershell ile uzaktan Exchange Server bağlantısı için gerekli Connect-ExchangeServer fonksiyonu Active Directory fonksiyonunda da olduğu şekilde opsiyoneldir. Diğer tüm operasyonlar için Active Directory yada Exchange server bağlantılarından en az birini yapmak gerekir. Eğer kullanıcıya bir email adresi verilecekse bu bağlantının kullanılması, verilmeyecekse Active Directory bağlantısının yapılması önerilir.
Function Connect-ExchangeServer { [CmdletBinding()] Param ( [ Parameter (Mandatory = $true, HelpMessage = "Exchange Server FQDN")] [string] $Server, [ Parameter (Mandatory = $true, HelpMessage = "Exchange Server Username")] [string] $Username, [ Parameter (Mandatory = $true, HelpMessage = "Exchange Server Password")] [string] $Pass, [Parameter(Mandatory=$false, HelpMessage = "Please choice for using Http or Https")] [Switch] $UseHTTPS = $false, [ Parameter (Mandatory = $false, HelpMessage = "Authentication type for Exchange Server connection")] [string] $AuthenticationType = "Kerberos" ) Process { $Password = $Pass | ConvertTo-SecureString -AsPlainText -Force $Credential = New-Object System.Management.Automation.PSCredential -ArgumentList $Username, $Password $URI = If ($UseHTTPS) {"https://" + $Server + "/PowerShell/"} Else {"http://" + $Server + "/PowerShell/"} $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri $URI -Authentication $AuthenticationType -Credential $Credential Import-PSSession $Session -DisableNameChecking Write-Verbose -Message "Successfully imported Exchange Server session..." -Verbose return $Session } }
Powershell ile Açık Olan Session Bilgilerini Sonlandırmak
Connect-ActiveDirectory yada Connect-ExchangeServer fonksiyonları aracılığı bağlandığımız sunuculardan bağlantının koparılması gerekmektedir. Bu durum özellikle Office365 kullanımında da önemli olmaktadır. Disconnect-Sessions Powershell fonksiyonu açık olan session bilgilerinden istenen bir tanesini id parametresi aracılığı ile sonlandırabilmektedir. Eğer bir parametre verilmezse, tüm session bilgilerini temizlemektedir.
Function Disconnect-Sessions { [CmdletBinding()] Param ( [ Parameter (Mandatory = $false, HelpMessage = "Session ID")] [int] $Id = $null ) if ($Id) { Remove-PSSession -Id $Id Write-Verbose -Message "Successfully removed specified session." -Verbose }else { Get-PSSession | Remove-PSSession Write-Verbose -Message "Successfully removed all sessions." -Verbose } }
Powershell ile Türkçe Karakter Değişimi (Powershell Replace Turkish Characters)
Powershell Replace Turkish Characters işlemi yani Powershell ile Türkçe karakter değişimi işlemi için gerekli olacak olan Convert-TurkishCharacters fonksiyonu yine opsiyoneldir. İsim ve soyisimden username yada email adresi oluşturma işlemleri yapılırken gerekli olabileceği düşünülmüştür.
Function Convert-TurkishCharacters { [CmdletBinding()] Param ( [ Parameter (Mandatory = $true)] [string] $Data ) Begin { Write-Verbose -Message "Replacing Turkish characters..." -Verbose } Process { $Data = $Data.Replace('ü', 'u') $Data = $Data.Replace('ı', 'i') $Data = $Data.Replace('ö', 'o') $Data = $Data.Replace('ş', 's') $Data = $Data.Replace('ğ', 'g') $Data = $Data.Replace('ç', 'c') $Data = $Data.Replace('Ü', 'U') $Data = $Data.Replace('İ', 'I') $Data = $Data.Replace('Ö', 'O') $Data = $Data.Replace('Ş', 'S') $Data = $Data.Replace('Ğ', 'G') $Data = $Data.Replace('Ç', 'C') } End { Write-Verbose -Message "Successfully replaced Turkish characters." -Verbose return $Data } }
Powershell ile Active Directory Kullanıcısının Var Olup Olmadığının Kontrolü
Powershell ile bir Actice Directory kullanıcısının var olup olmadığının kontrolü, varsa şu işlemi gerçekleştir, yoksa şu işlemi yap denilebilecek bir fonksiyon ihtiyacı bulunmaktadır. Aşağıdaki Get-UserIsExist fonksiyonu ile Active Directory kullanıcısı varsa $true, yoksa $false sonucu alınabilir. Fonksiyon oldukça kullanışlıdır ve diğer metodlardan çok daha hızlı yanıt dönebilmektedir.
Function Get-UserIsExist { [CmdletBinding()] Param ( [ Parameter (Mandatory = $true)] [string] $User ) $Result = $true if(([ADSISearcher] "(sAMAccountName=$User)").FindOne()){ $Result = $true } else { $Result = $false } return $Result }
Powershell ile Dosya ve Resim İndirmek
Powershell ile internet üzerinden dosya veya resim indirmek ve indirilen dosya üzerinde yapılabilecek işlemler için aşağıdaki Export-PictureDataFromUrl Powershell fonksiyonu örnek olabilir. Bu Powershell fonksiyonu Rest API üzerinden dönecek olan kullanıcı resimini indirip byte tipinde geri döndürmektedir.
Function Export-PictureDataFromUrl { [CmdletBinding()] Param ( [ Parameter (Mandatory = $true)] [string] $Url ) Begin { $tmpFileName = $Url.Split('/') $FileName = $tmpFileName[6] Invoke-WebRequest $Url -OutFile "$env:TEMP\$FileName" } Process { $PhotoData = [byte[]](Get-Content "$env:TEMP\$FileName" -Encoding byte) Remove-Item -Path "$env:TEMP\$FileName" -Force } End { return $PhotoData } }
Powershell ile Active Directory Kullanıcı Resiminin Değiştirilmesi
Powershell ile Active Directory kullanıcılarının resimleri değiştirilebilir. Aşağıdaki Set-UserPicture fonksiyonu $Username, $Photo ve $DC şeklinde 3 adet parametre almaktadır. Burada dikkat edilmesi gereken konu Photo parametresi Export-PictureDataFromUrl fonksiyonundan dönen bir byte array olarak veri alabilir.
Function Set-UserPicture { [CmdletBinding()] Param ( [ Parameter (Mandatory = $true)] [string] $Username, [ Parameter (Mandatory = $true)] [byte[]] $Photo, [ Parameter (Mandatory = $false)] [string] $DC ) Process { Set-ADUser $Username -Server $DC -Replace @{thumbnailPhoto=$Photo} } }
Powershell Active Directory Toplu Kullanıcı Oluşturma İşlemi İçin Gerekli Komutlar
Yukarıda Active Directory toplu kullanıcı oluşturma işlemi için gerekli tüm örnek Powershell fonksiyonları tanımlanmıştır. Aşağıdaki komutlar ile artık örnek Powershell script dosyası tamamlanabilir ve REST API – RESTfull web service aracılığı ile toplu kullanıcı açma işlemi tamamlanabilir.
# Active Directory sunucusu FQDN adresi $ADServerFQDN = "dc01.aktifdizin.com" # Exchange Server FQDN adresi $ExchangeServerFQDN = "exc01.aktifdizin.com" # Sunucu bağlantısını yapmaya ve kullanıcı açmaya yetkili kullanıcı hesabı $AdminUsername = "Administrator" # Sunucu bağlantısını yapmaya ve kullanıcı açmaya yetkili kullanıcı parolası $AdminPassword = "SuperGizliParolaniz" # Kullanıcıların açılacağı Organizational Unit objesi için Distinguished Name $OU = "OU=Article,OU=Accounts,DC=aktifdizin,DC=com" # Active Directory Domain Suffix $DomainSuffix = "@aktifdizin.com" # Sadece kaç adet kullanıcı istendiğini belirttik. # Fonksiyon parametreleri değiştirilerek daha fazla tipte kullanıcı nesnesi oluşturulabilir. # Fonksiyon JSON objesi döndürür $tmpUsers = Initialize-DemoUser -Count 20 # Kullanıcılara email adreside tanımlanacağı için Exchange Server ile bağlantı kurulacaktır. $session = Connect-ExchangeServer -Server $ExchangeServerFQDN -Username $AdminUsername -Pass $AdminPassword # Foreach döngüsü ile yukarıda alınan kullanıcılar objesinin içinden # her bir döngüde bir kullanıcı çekip üzerinde işlem yapılacaktır. Foreach($employee in $tmpUsers.results){ # Kullanıcı adı oluşturulacaktır. Türkçe karakterler Convert-TurkishCharacters temizlenecek, # Karakterler ToLower() ile küçük harfe dönüştürülecek, # Karakterlerden sonra varsa boşluklar Trim() ile temizlenecektir. $username = ((Convert-TurkishCharacters -Data $employee.name.first).ToLower()).Trim() + ((Convert-TurkishCharacters -Data $employee.name.last).ToLower()).Trim() # Kullanıcı için gerekli Active Directory parolası oluşturulacaktır. # ConvertTo-SecureString fonksiyonu ile clear text olan password verisi securestring tipine çevirilecektir. # Tüm bulk kullanıcılar için statik bir password üretilebilir. Bunun için $employee.login.password yerine "Parola123" # şeklinde yazılması yeterli olacaktır. Bazen webservis düzgün parola üretmemektedir. Bu durumda kullanıcıya yeniden # parola verilmesi ve disable durumdaysa enable edilmesi gerekecektir. $userPassword = $employee.login.password | ConvertTo-SecureString -AsPlainText -Force # Kullanıcı için Active Directory UPN Suffix oluşturulacaktır. $upn = $username + $DomainSuffix # Kullanıcı için Active Directory Display Name oluşturulacaktır. $displayName = $employee.name.first + " " + $employee.name.last # Veri bilinmeyen bir kaynaktan alındığı için var olan bir kullanıcının tekrar gönderilip gönderilmediği # kontrol edilmelidir. Bu örnekte kullanıcı yoksa açılacak ancak varsa herhangi bir işlem yapılmayacaktır. # Gerçek ortam senaryolarında "else" bloğu içinde kullanıcı varsa yapılacak işlemler tanımlanabilir. if ((Get-UserIsExist -User $username) -eq $false) { # Actice Directory kullanıcı oluşturulacaktır. New-ADUser -Name $displayName -GivenName $employee.name.first -Surname $employee.name.last -SamAccountName $username -UserPrincipalName $upn -Path $OU -AccountPassword $userPassword -Enabled $true -MobilePhone $employee.cell -OfficePhone $employee.phone -Server $ADServerFQDN # Export-PictureDataFromUrl ile byte array cinsinden kullanıcı resimi alınır. $photo = Export-PictureDataFromUrl -Url $employee.picture.large # Alınan resim kullanıcıya atanır. Set-UserPicture -Username $username -DC $ADServerFQDN -Photo $photo # Kullanıcıya bir email adresi verilecektir. Enable-Mailbox -Identity $username -DomainController $ADServerFQDN } else { Write-Verbose -Message "This user already exists!" -Verbose } } # Açılan Session silinecektir. Disconnect-Sessions -Id $session.Id
Powershell Active Directory Toplu Kullanıcı Oluşturma
Powershell Script dosyasının son versiyonu aşağıdaki şekilde olmalıdır:
Function Connect-ActiveDirectory { [CmdletBinding()] Param ( [ Parameter (Mandatory = $true, HelpMessage = "Active Directory FQDN")] [string] $Server, [ Parameter (Mandatory = $true, HelpMessage = "Active Directory Username")] [string] $Username, [ Parameter (Mandatory = $true, HelpMessage = "Active Directory Password")] [string] $Pass ) Process { $Password = $Pass | ConvertTo-SecureString -AsPlainText -Force $Credential = New-Object System.Management.Automation.PSCredential -ArgumentList $Username, $Password $Session = New-PSSession -ComputerName $Server -Credential $Credential Import-Module -PSSession $Session -Name ActiveDirectory -Global Write-Verbose -Message "Successfully imported Active Directory session..." -Verbose return $Session } } Function Connect-ExchangeServer { [CmdletBinding()] Param ( [ Parameter (Mandatory = $true, HelpMessage = "Exchange Server FQDN")] [string] $Server, [ Parameter (Mandatory = $true, HelpMessage = "Exchange Server Username")] [string] $Username, [ Parameter (Mandatory = $true, HelpMessage = "Exchange Server Password")] [string] $Pass, [Parameter(Mandatory=$false, HelpMessage = "Please choice for using Http or Https")] [Switch] $UseHTTPS = $false, [ Parameter (Mandatory = $false, HelpMessage = "Authentication type for Exchange Server connection")] [string] $AuthenticationType = "Kerberos" ) Process { $Password = $Pass | ConvertTo-SecureString -AsPlainText -Force $Credential = New-Object System.Management.Automation.PSCredential -ArgumentList $Username, $Password $URI = If ($UseHTTPS) {"https://" + $Server + "/PowerShell/"} Else {"http://" + $Server + "/PowerShell/"} $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri $URI -Authentication $AuthenticationType -Credential $Credential Import-PSSession $Session -DisableNameChecking Write-Verbose -Message "Successfully imported Exchange Server session..." -Verbose return $Session } } Function Disconnect-Sessions { [CmdletBinding()] Param ( [ Parameter (Mandatory = $false, HelpMessage = "Session ID")] [int] $Id = $null ) if ($Id) { Remove-PSSession -Id $Id Write-Verbose -Message "Successfully removed specified session." -Verbose }else { Get-PSSession | Remove-PSSession Write-Verbose -Message "Successfully removed all sessions." -Verbose } } Function Initialize-DemoUser { [CmdletBinding()] Param ( [ Parameter (Mandatory = $true)] [int] $Count, [ Parameter (Mandatory = $false)] [string] $Nationality = "tr", [ Parameter (Mandatory = $false, HelpMessage = "https://randomuser.me/documentation#howto")] [string] $PassSettings = "special,upper,lower,number,8", [ Parameter (Mandatory = $false, HelpMessage = "https://randomuser.me/documentation#howto")] [string] $Include = "gender,name,city,country,postcode,email,login,phone,cell,picture,nat" ) Process { if ($Count -lt 5001) { $URL = "https://randomuser.me/api/?nat=" + $Nationality + "&results=" + $Count + "&password=" + $PassSettings + "&inc=" + $Include $PersonObjects = Invoke-RestMethod -Uri $URL return $PersonObjects }else{ Write-Error -Message "Maximum user count can't be more than 5000." -ErrorAction Continue } } } Function Convert-TurkishCharacters { [CmdletBinding()] Param ( [ Parameter (Mandatory = $true)] [string] $Data ) Begin { Write-Verbose -Message "Replacing Turkish characters..." -Verbose } Process { $Data = $Data.Replace('ü', 'u') $Data = $Data.Replace('ı', 'i') $Data = $Data.Replace('ö', 'o') $Data = $Data.Replace('ş', 's') $Data = $Data.Replace('ğ', 'g') $Data = $Data.Replace('ç', 'c') $Data = $Data.Replace('Ü', 'U') $Data = $Data.Replace('İ', 'I') $Data = $Data.Replace('Ö', 'O') $Data = $Data.Replace('Ş', 'S') $Data = $Data.Replace('Ğ', 'G') $Data = $Data.Replace('Ç', 'C') } End { Write-Verbose -Message "Successfully replaced Turkish characters." -Verbose return $Data } } Function Export-PictureDataFromUrl { [CmdletBinding()] Param ( [ Parameter (Mandatory = $true)] [string] $Url ) Begin { $tmpFileName = $Url.Split('/') $FileName = $tmpFileName[6] Invoke-WebRequest $Url -OutFile "$env:TEMP\$FileName" } Process { $PhotoData = [byte[]](Get-Content "$env:TEMP\$FileName" -Encoding byte) Remove-Item -Path "$env:TEMP\$FileName" -Force } End { return $PhotoData } } Function Get-UserIsExist { [CmdletBinding()] Param ( [ Parameter (Mandatory = $true)] [string] $User ) $Result = $true if(([ADSISearcher] "(sAMAccountName=$User)").FindOne()){ $Result = $true } else { $Result = $false } return $Result } Function Set-UserPicture { [CmdletBinding()] Param ( [ Parameter (Mandatory = $true)] [string] $Username, [ Parameter (Mandatory = $true)] [byte[]] $Photo, [ Parameter (Mandatory = $false)] [string] $DC ) Process { Set-ADUser $Username -Server $DC -Replace @{thumbnailPhoto=$Photo} } } # Active Directory sunucusu FQDN adresi $ADServerFQDN = "dc01.aktifdizin.com" # Exchange Server FQDN adresi $ExchangeServerFQDN = "exc01.aktifdizin.com" # Sunucu bağlantısını yapmaya ve kullanıcı açmaya yetkili kullanıcı hesabı $AdminUsername = "Administrator" # Sunucu bağlantısını yapmaya ve kullanıcı açmaya yetkili kullanıcı parolası $AdminPassword = "SuperGizliParolaniz" # Kullanıcıların açılacağı Organizational Unit objesi için Distinguished Name $OU = "OU=Article,OU=Accounts,DC=aktifdizin,DC=com" # Active Directory Domain Suffix $DomainSuffix = "@aktifdizin.com" # Sadece kaç adet kullanıcı istendiğini belirttik. # Fonksiyon parametreleri değiştirilerek daha fazla tipte kullanıcı nesnesi oluşturulabilir. # Fonksiyon JSON objesi döndürür $tmpUsers = Initialize-DemoUser -Count 20 # Kullanıcılara email adreside tanımlanacağı için Exchange Server ile bağlantı kurulacaktır. $session = Connect-ExchangeServer -Server $ExchangeServerFQDN -Username $AdminUsername -Pass $AdminPassword # Foreach döngüsü ile yukarıda alınan kullanıcılar objesinin içinden # her bir döngüde bir kullanıcı çekip üzerinde işlem yapılacaktır. Foreach($employee in $tmpUsers.results){ # Kullanıcı adı oluşturulacaktır. Türkçe karakterler Convert-TurkishCharacters temizlenecek, # Karakterler ToLower() ile küçük harfe dönüştürülecek, # Karakterlerden sonra varsa boşluklar Trim() ile temizlenecektir. $username = ((Convert-TurkishCharacters -Data $employee.name.first).ToLower()).Trim() + ((Convert-TurkishCharacters -Data $employee.name.last).ToLower()).Trim() # Kullanıcı için gerekli Active Directory parolası oluşturulacaktır. # ConvertTo-SecureString fonksiyonu ile clear text olan password verisi securestring tipine çevirilecektir. # Tüm bulk kullanıcılar için statik bir password üretilebilir. Bunun için $employee.login.password yerine "Parola123" # şeklinde yazılması yeterli olacaktır. Bazen webservis düzgün parola üretmemektedir. Bu durumda kullanıcıya yeniden # parola verilmesi ve disable durumdaysa enable edilmesi gerekecektir. $userPassword = $employee.login.password | ConvertTo-SecureString -AsPlainText -Force # Kullanıcı için Active Directory UPN Suffix oluşturulacaktır. $upn = $username + $DomainSuffix # Kullanıcı için Active Directory Display Name oluşturulacaktır. $displayName = $employee.name.first + " " + $employee.name.last # Veri bilinmeyen bir kaynaktan alındığı için var olan bir kullanıcının tekrar gönderilip gönderilmediği # kontrol edilmelidir. Bu örnekte kullanıcı yoksa açılacak ancak varsa herhangi bir işlem yapılmayacaktır. # Gerçek ortam senaryolarında "else" bloğu içinde kullanıcı varsa yapılacak işlemler tanımlanabilir. if ((Get-UserIsExist -User $username) -eq $false) { # Actice Directory kullanıcı oluşturulacaktır. New-ADUser -Name $displayName -GivenName $employee.name.first -Surname $employee.name.last -SamAccountName $username -UserPrincipalName $upn -Path $OU -AccountPassword $userPassword -Enabled $true -MobilePhone $employee.cell -OfficePhone $employee.phone -Server $ADServerFQDN # Export-PictureDataFromUrl ile byte array cinsinden kullanıcı resimi alınır. $photo = Export-PictureDataFromUrl -Url $employee.picture.large # Alınan resim kullanıcıya atanır. Set-UserPicture -Username $username -DC $ADServerFQDN -Photo $photo # Kullanıcıya bir email adresi verilecektir. Enable-Mailbox -Identity $username -DomainController $ADServerFQDN } else { Write-Verbose -Message "This user already exists!" -Verbose } } # Açılan Session silinecektir. Disconnect-Sessions -Id $session.Id
Eğer herşey olunda gittiyse sizinde Exchange webmail ekranında aşağıdaki şekilde kullanıcıları görebilmeniz gerekir:
Test ortamında yapılan bir geliştirme olduğu için PowerShell Try Catch blokları kullanılmamıştır.
Bonus:
Powershell ile Active Directory kullanıcı resim değiştirme
$fileName = "C:\ahmetelibol.jpg" $photo = [byte[]](Get-Content $fileName -Encoding byte) Set-ADUser $username -Server "dc01.aktifdizin.com" -Replace @{thumbnailPhoto=$photo}
Powershell ile bir Active Directory kullanıcısının herhangi bir alanını değiştirmek (Attribute-Value değiştirme)
Set-ADUser "username" -Server "dc.fqdn" -Replace @{attribute=value} Örnek: Set-ADUser "alibolatli" -Server "dc01.aktifdizin.com" -Replace @{givenName="Ali Veli"}
Powershell Active Directory Toplu Kullanıcı Oluşturma
Vakit ayırdığınız için teşekkür ederiz. Yazılan tüm kod sitemize aittir ve izinsiz başka sitelerde yayınlanamaz ve ticari olarak kullanılamaz. Soru, görüş ve önerilerinizi aşağıdaki formu kullanarak bize iletebilirsiniz.
Harika bir makale olmuş hocam, bir önceki belirtmiş olduğunuz powershell makelelerinizde ki komutları, döngülerin çoğunu harika bir şekilde işlemişsiniz.
Teşekkürler tekrardan,
Gerçek hayattan örnek istemiştiniz. Umarım işinize yarar.
Kolaylıklar diliyorum.
elinize sağlık, neredeyse akademik yayın sayılabilecek bir kaynak olmuş; duamızı aldınız.
İşinize yaradığına sevindim. İyi dilekleriniz için teşekkür ederim.
Elinize, emeğinize sağlık. Çok güzel bir çalışma olmuş.
İşinize yaramasına sevindim. Ben teşekkür ederim.