PowerShell Betiği: Active Directory'de Yeni Kullanıcıları Keşfedin
Yeni çalışanlar bir şirkete katıldığında BT teknisyenlerinin hesaplarını Active Directory'de oluşturmaları gerekir. Daha sonra BT uzmanı her yeni gelen kişiyi karşılar ve etki alanına giriş yapmalarına yardımcı olur. Bu makalede size bu prosedürü PowerShell betiği yardımıyla nasıl otomatikleştireceğinizi göstereceğim. Bu betiği özel ihtiyaçlarınıza uyacak şekilde düzenlemekten çekinmeyin.
Bu blog yazısı özellikle aşağıdaki üç konuyu kapsamaktadır:
- E-posta şifresini güvenli bir dize olarak okuyun, şifrelenmiş bir dizeye dönüştürün ve normal kullanıcıların okuyamaması için bir metin dosyasına kaydedin. Daha sonra komut dosyası bunu okur ve sonraki e-posta iletisi cmdlet'lerinde kimlik bilgisi olarak kullanılmak üzere güvenli bir dize nesnesine dönüştürür.
- Son 24 saat içinde AD'ye eklenen yeni kullanıcıları tanımlamak için bir komut dosyası oluşturun ve onlara Gmail'in SMTP sunucusunu kullanarak bir hoş geldiniz e-postası gönderin.
- Komut dosyasını PowerShell'in yardımıyla Görev Zamanlayıcı'da her gün saat 12:00'de çalışacak şekilde zamanlayın.
Bu yazıda aşağıdaki cmdlet'leri kullandım; Her cmdlet'in ayrıntıları Technet'in web sitesinde mevcuttur.
- Read-Host (güvenli dizeyi bir komut satırından Gmail kullanıcı şifreleri olarak okumak için)
- Send-MailMessage (SMTP sunucusunu kullanarak e-posta mesajları göndermek için)
- Get-Date (geçerli tarih ve saati almak için)
- Get-Content (bir dosyadan şifrelenmiş bir şifreyi okumak için)
- Get-ADUser (AD'den yeni eklenen kullanıcıları almak için)
- New-ScheduledTaskTrigger (yeni bir zamanlanmış görev tetikleyicisi oluşturmak için)
- Register-ScheduledTask (Görev Zamanlayıcı'da yeni görevi zamanlamak için)
Bu scripti Windows Server 2016 üzerinde çalıştırdım. Ortam ihtiyaçlarınıza göre düzenleyebilirsiniz. Her şeyin işe yaraması için bu üç adımı izleyin.
1. Adım. Gmail Şifrenizi Bir Metin Dosyasına Şifrelenmiş Dize Olarak Kaydedin
PowerShell'i yükseltilmiş ayrıcalıklarla açın ve aşağıdaki cmdlet'i yürütün. Bu, parolayı güvenli dize olarak girmenizi ve bunu metin dosyasına şifrelenmiş dize olarak kaydetmenizi ister.
Read-Host -AsSecureString | ConvertFrom-SecureString | Out-File “C:Userssecurepassword.txt”
2. Adım. Komut Dosyasını .ps1 Uzantılı Bir Dosyaya Kaydedin
Not Defteri'ni açın ve aşağıdaki kodu kopyalayıp yapıştırın. Dosyayı FindOutADUsers.ps1 olarak kaydedin.
##Beginning of functions
Function Send-Email {
Param ($Email, $Credential,$attachment)
$From = "karim.buzdar@gmail.com"
$subject = "Welcome to yourdomain.com"
$SMTPServer = "smtp.gmail.com"
$SMTPPort = "587"
### Beginning of email body
$Body = "Dear User,<br><br>"
$Body += "Welcome to yourdomain.com <br><br>"
$Body += " This email will help you log in to your domain services. Follow these steps to log in to your domain: <br><br>"
$Body += "Step 1. Enter your username <br><br>"
$Body += "Step 2. Enter your password, and press enter <br><br>"
$Body += " Please check the attached screenshot. If you have any problems, please call the help desk at following number: <br><br>"
$Body += "<b>Extension No: 121</b><br><br>"
$Body += "Regards,<br><br>"
$Body += "Yourdomain.com Helpdesk"
### End of email body
Send-MailMessage -from $From -to $Email -Subject $subject -BodyAsHtml $Body -Attachments $attachment -SmtpServer $SMTPServer -Port $SMTPPort -Credential $Credential -UseSsl
}
### End of Functions
##### Beginning of main function
$When = ((Get-Date).AddDays(-1))
$UserName = "karim.buzdar@gmail.com" #Gmail username which is used for sending an email
$Password = Get-Content "C:UsersAdministrator.YOURDOMAINDesktopFindOutADUserssecurepassword.txt" | ConvertTo-SecureString #Reading a secure password from file and reversing it back into a secure string object
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList ($UserName, $Password) #PSCredential for send-mail message cmdlet
$Attachment = "C:UsersAdministrator.YOURDOMAINDesktopFindOutADUsersScreenshot.png" #Image sending as an attachment with email
foreach ($EmailAddress in Get-ADUser -filter {(whencreated -ge $When)} -Properties emailaddress | Select -ExpandProperty emailaddress) #Iterating over each email of users
{
Send-Email -Email $EmailAddress -Credential $Credential -attachment $Attachment
Write-Host "Email sent: $EmailAddress"
}
### End of main function
3. Adım. Görev Zamanlayıcı'yı Kullanarak Komut Dosyasını Zamanlayın
Not Defteri'nde yeni bir dosya oluşturun. Aşağıdaki scripti yapıştırın ve .ps1 uzantısıyla kaydedin.
$Trigger= New-ScheduledTaskTrigger -At 12:00am -Daily #Trigger the task daily at 12 AM
$User= "yourdomainadministrator"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument
"C:UsersAdministrator.YOURDOMAINDesktopFindOutADUsersFindOutADUsers.ps1"
Register-ScheduledTask -TaskName "FindOutADUsers" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest -ForceYukarıdaki betiği PowerShell'de yükseltilmiş ayrıcalıklarla yürütün ve işiniz bitti!
Zamanlanmış bir görev başarıyla çalıştırıldığında, Active Directory'ye yeni eklenen kullanıcılar aşağıdaki e-postayı alacaktır:
Bu yazının sizin için yararlı olacağını umuyorum. Geri bildiriminiz ve yorumlarınız her zaman memnuniyetle karşılanacaktır, özellikle de bu komut dosyasında bir şeyler çalışmıyorsa. İyi şanlar!
