{"id":115,"title":"Active Directory'de \u015fifre s\u00fcreleri dolmadan kullan\u0131c\u0131lar\u0131 otomatik olarak uyaran PowerShell scripti","content":"Active Directory'de \u015fifre s\u00fcreleri dolmadan kullan\u0131c\u0131lar\u0131 otomatik olarak uyaran bir PowerShell script Bu script \u015funlar\u0131 yapar: <ol> <li>Active Directory'den \u015fifresi dolmak \u00fczere olan kullan\u0131c\u0131lar\u0131 tespit eder<\/li> <li>\u015eifresi belirli g\u00fcn aral\u0131klar\u0131nda (14, 7, 3, 1 g\u00fcn) dolacak kullan\u0131c\u0131lara \u00f6zelle\u015ftirilmi\u015f e-posta g\u00f6nderir<\/li> <li>T\u00fcm i\u015flemleri g\u00fcnl\u00fck dosyas\u0131na (log) kaydeder<\/li> <li>HTML format\u0131nda profesyonel bir e-posta \u015fablonu kullan\u0131r<\/li> <\/ol> Kullanmadan \u00f6nce a\u015fa\u011f\u0131daki de\u011fi\u015fkenleri kendi ortam\u0131n\u0131za g\u00f6re ayarlaman\u0131z gerekir: <ul> <li><code>$smtpServer<\/code> - SMTP sunucu adresiniz<\/li> <li><code>$smtpPort<\/code> - SMTP port numaras\u0131<\/li> <li><code>$smtpFrom<\/code> - G\u00f6nderen e-posta adresi<\/li> <li><code>$domain<\/code> - \u015eirket domain ad\u0131n\u0131z<\/li> <li>\u015eifre politikas\u0131 bilgilerini g\u00fcncelleyin (HTML i\u00e7indeki listeyi)<\/li> <\/ul> Bu script'i Windows G\u00f6rev Zamanlay\u0131c\u0131'da g\u00fcnl\u00fck olarak \u00e7al\u0131\u015facak \u015fekilde a\u015fa\u011f\u0131daki \u015fekilde ayarlayabilirsiniz: <ol> <li>PowerShell script'i <code>.ps1<\/code> uzant\u0131s\u0131yla kaydedin<\/li> <li>G\u00f6rev Zamanlay\u0131c\u0131'y\u0131 a\u00e7\u0131n ve yeni bir g\u00f6rev olu\u015fturun<\/li> <li>Program\/script olarak <code>powershell.exe<\/code> yaz\u0131n<\/li> <li>Arg\u00fcmanlar b\u00f6l\u00fcm\u00fcne <code>-ExecutionPolicy Bypass -File \"C:\\Scripts\\PasswordNotification\\PasswordExpiryNotification.ps1\"<\/code> yaz\u0131n<\/li> <\/ol> <pre  data-enlighter-language=\"powershell\"># Active Directory \u015eifre Uyar\u0131 Sistemi # Bu script, \u015fifresi yak\u0131n zamanda dolacak kullan\u0131c\u0131lara otomatik e-posta g\u00f6nderir # Gerekli mod\u00fcl\u00fc i\u00e7e aktarma Import-Module ActiveDirectory # G\u00fcnl\u00fck dosyas\u0131 olu\u015fturma $LogFile = \"C:\\Scripts\\PasswordNotification\\PasswordExpiryLog_$(Get-Date -Format 'yyyyMMdd').log\" $ScriptDir = \"C:\\Scripts\\PasswordNotification\" # Script klas\u00f6r\u00fc kontrol\u00fc if (!(Test-Path $ScriptDir)) { New-Item -ItemType Directory -Path $ScriptDir -Force } # Loglama fonksiyonu function Write-Log { param( $Message ) $TimeStamp = Get-Date -Format \"yyyy-MM-dd HH:mm:ss\" \"$TimeStamp - $Message\" | Out-File -FilePath $LogFile -Append } Write-Log \"Script ba\u015flat\u0131ld\u0131.\" # E-posta ayarlar\u0131 - Kendi SMTP sunucunuza g\u00f6re d\u00fczenleyin $smtpServer = \"smtp.sirketiniz.com\" $smtpPort = 25 $smtpFrom = \"it@sirketiniz.com\" $emailSubject = \"\u00d6nemli Bildirim: \u015eifreniz yak\u0131nda sona erecek\" $emailSignature = @\" &lt;p&gt;Sayg\u0131lar\u0131m\u0131zla,&lt;br&gt; IT Departman\u0131&lt;br&gt; &lt;strong&gt;\u015eirketiniz A.\u015e.&lt;\/strong&gt;&lt;br&gt; Tel: +90 212 555 55 55&lt;\/p&gt; \"@ # Domain bilgileri $domain = \"sirketiniz.com\" # \u015eifre politikas\u0131 bilgilerini al $passwordPolicy = Get-ADDefaultDomainPasswordPolicy $maxPasswordAge = $passwordPolicy.MaxPasswordAge.Days # Uyar\u0131 yap\u0131lacak g\u00fcn aral\u0131klar\u0131 $warningDays = @(14, 7, 3, 1) # Bug\u00fcn\u00fcn tarihini al $today = Get-Date Write-Log \"\u015eifre politikas\u0131 bilgisi al\u0131nd\u0131. Maksimum \u015fifre ya\u015f\u0131: $maxPasswordAge g\u00fcn.\" # T\u00fcm etkin kullan\u0131c\u0131lar\u0131 al (devre d\u0131\u015f\u0131 kullan\u0131c\u0131lar hari\u00e7) try { $users = Get-ADUser -Filter {Enabled -eq $true -and PasswordNeverExpires -eq $false} -Properties Name, EmailAddress, PasswordLastSet, PasswordNeverExpires Write-Log \"Active Directory'den $($users.Count) aktif kullan\u0131c\u0131 al\u0131nd\u0131.\" } catch { Write-Log \"Hata: Active Directory'den kullan\u0131c\u0131lar al\u0131namad\u0131: $_\" exit } # Her bir kullan\u0131c\u0131 i\u00e7in kontrol et foreach ($user in $users) { # Kullan\u0131c\u0131n\u0131n e-posta adresi yoksa atla if (::IsNullOrEmpty($user.EmailAddress)) { Write-Log \"Kullan\u0131c\u0131 $($user.Name) i\u00e7in e-posta adresi bulunamad\u0131, atlan\u0131yor.\" continue } # \u015eifre son de\u011fi\u015ftirilme tarihi yoksa atla if (-not $user.PasswordLastSet) { Write-Log \"Kullan\u0131c\u0131 $($user.Name) i\u00e7in \u015fifre de\u011fi\u015fiklik tarihi bulunamad\u0131, atlan\u0131yor.\" continue } # \u015eifre son de\u011fi\u015fikli\u011finden bu yana ge\u00e7en s\u00fcreyi hesapla $passwordSetDate = $user.PasswordLastSet $expireDate = $passwordSetDate.AddDays($maxPasswordAge) $daysToExpire = (New-TimeSpan -Start $today -End $expireDate).Days # Belirlenen uyar\u0131 g\u00fcnlerinden birinde ise e-posta g\u00f6nder if ($warningDays -contains $daysToExpire) { Write-Log \"Kullan\u0131c\u0131 $($user.Name) i\u00e7in \u015fifre $daysToExpire g\u00fcn i\u00e7inde dolacak, bildirim g\u00f6nderiliyor.\" $emailBody = @\" &lt;html&gt; &lt;head&gt; &lt;style&gt; body { font-family: Arial, sans-serif; } .header { background-color: #0056b3; color: white; padding: 10px; } .content { padding: 20px; } .footer { font-size: 12px; color: #666; border-top: 1px solid #eee; padding-top: 10px; } .highlight { color: red; font-weight: bold; } &lt;\/style&gt; &lt;\/head&gt; &lt;body&gt; &lt;div &gt; &lt;h2&gt;\u015eifre De\u011fi\u015ftirme Hat\u0131rlatmas\u0131&lt;\/h2&gt; &lt;\/div&gt; &lt;div &gt; &lt;p&gt;Say\u0131n $($user.Name),&lt;\/p&gt; &lt;p&gt;Bu e-posta, \u015firket hesab\u0131n\u0131z\u0131n \u015fifresinin &lt;span &gt;$daysToExpire g\u00fcn i\u00e7inde&lt;\/span&gt; sona erece\u011fini bildirmek i\u00e7in g\u00f6nderilmi\u015ftir.&lt;\/p&gt; &lt;p&gt;L\u00fctfen, eri\u015fim kesintisi ya\u015famamak i\u00e7in \u015fifrenizi en k\u0131sa s\u00fcrede de\u011fi\u015ftirin.&lt;\/p&gt; &lt;h3&gt;\u015eifre De\u011fi\u015ftirme \u0130\u015flemi:&lt;\/h3&gt; &lt;ol&gt; &lt;li&gt;Windows bilgisayar\u0131n\u0131zda &lt;strong&gt;CTRL+ALT+DEL&lt;\/strong&gt; tu\u015f kombinasyonunu kullan\u0131n&lt;\/li&gt; &lt;li&gt;\"\u015eifre De\u011fi\u015ftir\" se\u00e7ene\u011fini t\u0131klay\u0131n&lt;\/li&gt; &lt;li&gt;Mevcut \u015fifrenizi ve yeni \u015fifrenizi girin&lt;\/li&gt; &lt;\/ol&gt; &lt;p&gt;&lt;strong&gt;\u015eifre Politikas\u0131 Hat\u0131rlatmas\u0131:&lt;\/strong&gt;&lt;\/p&gt; &lt;ul&gt; &lt;li&gt;En az 8 karakter uzunlu\u011funda olmal\u0131&lt;\/li&gt; &lt;li&gt;B\u00fcy\u00fck harf, k\u00fc\u00e7\u00fck harf, rakam ve \u00f6zel karakter i\u00e7ermeli&lt;\/li&gt; &lt;li&gt;Son 5 \u015fifrenizden farkl\u0131 olmal\u0131&lt;\/li&gt; &lt;\/ul&gt; &lt;p&gt;Herhangi bir sorunuz veya yard\u0131ma ihtiyac\u0131n\u0131z olursa, l\u00fctfen IT Yard\u0131m Masas\u0131 ile ileti\u015fime ge\u00e7in.&lt;\/p&gt; &lt;\/div&gt; &lt;div &gt; $emailSignature &lt;\/div&gt; &lt;\/body&gt; &lt;\/html&gt; \"@ try { # E-posta g\u00f6nderme $smtp = New-Object Net.Mail.SmtpClient($smtpServer, $smtpPort) $msg = New-Object Net.Mail.MailMessage $msg.From = $smtpFrom $msg.To.Add($user.EmailAddress) $msg.Subject = $emailSubject $msg.Body = $emailBody $msg.IsBodyHtml = $true $smtp.Send($msg) Write-Log \"E-posta ba\u015far\u0131yla g\u00f6nderildi: $($user.EmailAddress)\" } catch { Write-Log \"E-posta g\u00f6nderimi ba\u015far\u0131s\u0131z: $($user.EmailAddress), Hata: $_\" } } } Write-Log \"Script tamamland\u0131.\" # \u00c7\u0131kt\u0131y\u0131 g\u00f6ster Write-Host \"\u015eifre uyar\u0131 g\u00f6nderimi tamamland\u0131. L\u00fctfen loglar\u0131 kontrol edin: $LogFile\" -ForegroundColor Green<\/pre> &nbsp;","excerpt":"Active Directory'de \u015fifre s\u00fcreleri dolmadan kullan\u0131c\u0131lar\u0131 otomatik olarak uyaran bir PowerShell script Bu script \u015funlar\u0131 yapar: Active...","created_at":"2025-04-14 21:28:32","updated_at":"2026-09-08 03:28:14","category_id":6,"view_count":865,"reading_time":5,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-04-14 21:28:32","featured_image":"resimyok.jpg","slug":"active-directoryde-sifre-sureleri-dolmadan-kullanicilari-otomatik-olarak-uyaran-powershell-scripti","category_name":"Sistem","category_slug":"sistem"}