এই প্রবন্ধে আমরা দেখাব কিভাবে PowerShell ব্যবহার করে একটি অ্যাক্টিভ ডিরেক্টরি ব্যবহারকারী অ্যাকাউন্টের পাসওয়ার্ডের মেয়াদ শেষ হয়ে যায়, কীভাবে একটি পাসওয়ার্ড সেট করা যায় যাতে কখনই মেয়াদ শেষ না হয় (PasswordNeverExpires = True
), এবং ব্যবহারকারীদের তাদের পাসওয়ার্ড পরিবর্তন করার জন্য আগাম অবহিত করুন।
যদি একটি ডোমেনে ব্যবহারকারীর পাসওয়ার্ডের মেয়াদ শেষ হয়ে যায়, তবে অ্যাকাউন্টটি লক করা হয় না, তবে ব্যবহারকারী মেয়াদোত্তীর্ণ পাসওয়ার্ডটি নতুন একটিতে পরিবর্তন না করা পর্যন্ত এটি ডোমেন সংস্থানগুলি অ্যাক্সেস করতে ব্যবহার করা যাবে না। প্রায়শই, দূরবর্তী ব্যবহারকারীরা মেয়াদ উত্তীর্ণ পাসওয়ার্ড নিয়ে সমস্যায় পড়েন, কারণ তারা স্ট্যান্ডার্ড টুল ব্যবহার করে তাদের পাসওয়ার্ড পরিবর্তন করতে পারে না।
একটি ডোমেনে ব্যবহারকারীর পাসওয়ার্ডের মেয়াদ শেষ হওয়ার সময়সীমা, কত ঘন ঘন এটি পরিবর্তন করতে হবে (সর্বোচ্চ পাসওয়ার্ড বয়স) এবং জটিলতার প্রয়োজনীয়তা AD ডোমেন পাসওয়ার্ড নীতিতে সেট করা আছে। এই প্যারামিটারগুলি ডিফল্ট ডোমেন নীতি বা ফাইন-গ্রেইনড পাসওয়ার্ড নীতিতে সেট করা আছে৷
আপনি এই PowerShell কমান্ড ব্যবহার করে একটি ডোমেনে বর্তমান পাসওয়ার্ড মেয়াদ শেষ হওয়ার নীতি সেটিংস পেতে পারেন:
Get-ADDefaultDomainPasswordPolicy|select MaxPasswordAge
আমাদের উদাহরণে, ডোমেনে সর্বাধিক ব্যবহারকারীর পাসওয়ার্ডের বয়স হল 60 দিন৷
৷
কিভাবে সক্রিয় ডিরেক্টরিতে একটি ব্যবহারকারীর পাসওয়ার্ডের মেয়াদ শেষ হওয়ার তারিখ পাবেন?
আপনি নেট ব্যবহারকারী ব্যবহার করে কমান্ড প্রম্পটে পাসওয়ার্ডের বয়স এবং শেষবার পরিবর্তন করার তারিখ দেখতে পারেন কমান্ড:
net user jsmith /domain
আপনি এই লাইনগুলিতে আপনার প্রয়োজনীয় তথ্য খুঁজে পেতে পারেন:
- পাসওয়ার্ড শেষ সেট — 9/9/2020 9:23:59 AM
- পাসওয়ার্ডের মেয়াদ শেষ — 1/7/2021 9:23:59 AM
- পাসওয়ার্ড পরিবর্তনযোগ্য — 9/10/2020 9:23:59 AM
AD অ্যাকাউন্টের সেটিংস দেখতে, আমরা অ্যাক্টিভ ডিরেক্টরি মডিউলের জন্য একটি বিশেষ পাওয়ারশেল ব্যবহার করব যা আপনাকে বিভিন্ন AD অবজেক্ট অ্যাট্রিবিউটের মান পেতে দেয় (Windows 10 এবং Windows Server 2012 R2/2016-এ AD PowerShell মডিউল কীভাবে ইনস্টল এবং আমদানি করতে হয় তা দেখুন। )
Get-ADUser cmdlet ব্যবহার করে, আপনি ব্যবহারকারীর পাসওয়ার্ড শেষবার পরিবর্তন করার তারিখ দেখতে পারেন এবং PasswordNeverExpires বিকল্পটি সেট করা আছে কিনা তা পরীক্ষা করতে পারেন:
get-aduser jsmith -properties PasswordLastSet, PasswordNeverExpires, PasswordExpired |ft Name, PasswordLastSet, PasswordNeverExpires,PasswordExpired
- পাসওয়ার্ড লাস্টসেট শেষ পাসওয়ার্ড পরিবর্তনের তারিখ এবং সময়;
- পাসওয়ার্ড কখনোই মেয়াদ শেষ হয় না True ফেরত দেয় যদি একটি ব্যবহারকারীর পাসওয়ার্ড কখনই মেয়াদ শেষ না হয়;
- পাসওয়ার্ডের মেয়াদ শেষ – যদি কোনো ব্যবহারকারীর পাসওয়ার্ড মেয়াদোত্তীর্ণ হয়ে থাকে, তাহলে তা True ফেরত দেয় , পাসওয়ার্ডের মেয়াদ শেষ না হলে, এটি False ফেরত দেয় .
dsa.msc
পাসওয়ার্ড পরিবর্তনের সময় পরীক্ষা করতে পারেন) ) এটি করতে, ব্যবহারকারীর বৈশিষ্ট্যগুলি খুলুন, অ্যাট্রিবিউট এডিটর ট্যাবে যান এবং pwdLastSet-এর মান পরীক্ষা করুন বৈশিষ্ট্য। কিন্তু আপনি দেখতে পাচ্ছেন, MMC স্ন্যাপ-ইন শুধুমাত্র সেই সময় দেখায় যখন পাসওয়ার্ড পরিবর্তন করা হয়েছিল। পাসওয়ার্ডের মেয়াদ কখন শেষ হবে তা স্পষ্ট নয়৷
পাসওয়ার্ডের মেয়াদ শেষ হওয়ার তারিখটি শেষবার পরিবর্তন করার সময় পেতে, একটি বিশেষ নির্মিত AD বৈশিষ্ট্য ব্যবহার করুন:msDS-UserPasswordExpiryTimeComputed . msDS-UserPasswordExpiryTimeComputed মানটি শেষ পাসওয়ার্ড পরিবর্তনের তারিখ এবং ডোমেন পাসওয়ার্ড নীতির উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে গণনা করা হয়।
UserPasswordExpiryTimeComputed প্যারামিটার টাইমস্ট্যাম্প ফর্ম্যাটে তারিখ প্রদান করে, তাই আমি FromFileTime
ব্যবহার করি এটিকে মানুষের পঠনযোগ্য মানতে রূপান্তর করতে ফাংশন:
Get-ADUser -Identity jsmith -Properties msDS-UserPasswordExpiryTimeComputed | select-object @{Name="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed") }}
এইভাবে, আমরা একটি ব্যবহারকারীর পাসওয়ার্ডের মেয়াদ শেষ হওয়ার তারিখ পেয়েছি৷
৷যদি msDS-UserPasswordExpiryTimeComputed-এর মান 0 হয়, তাহলে এর মানে হল pwdLastSet খালি (নাল) বা 0 এর সমান (পাসওয়ার্ড কখনও পরিবর্তন করা হয়নি)।
AD-তে নির্দিষ্ট ধারক (OU) থেকে সমস্ত ব্যবহারকারীর পাসওয়ার্ডের মেয়াদ শেষ হওয়ার তারিখ পেতে, আপনি নিম্নলিখিত PowerShell স্ক্রিপ্টটি ব্যবহার করতে পারেন:
$Users = Get-ADUser -SearchBase 'OU=Users,OU=NewYork,DC=woshub,DC=com' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, CannotChangePassword
$Users | select Name, @{Name="ExpirationDate";Expression= {[datetime]::FromFileTime ($_."msDS-UserPasswordExpiryTimeComputed")}}, PasswordLastSet
এটি সক্রিয় ব্যবহারকারীদের তালিকা, মেয়াদ শেষ হওয়ার তারিখ এবং শেষ পাসওয়ার্ড পরিবর্তনের সময় সহ একটি সারণীতে পরিণত হয়।
আপনি শুধুমাত্র মেয়াদ উত্তীর্ণ পাসওয়ার্ড সহ ব্যবহারকারীদের তালিকা প্রদর্শন করতে পারেন:
$Users = Get-ADUser -SearchBase 'OU=Users,OU=NewYork,DC=woshub,DC=com' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, CannotChangePassword
foreach($user in $Users){
if( [datetime]::FromFileTime($user."msDS-UserPasswordExpiryTimeComputed") -lt (Get-Date)) {
$user.Name
}
}
এডি ব্যবহারকারীর পাসওয়ার্ড কখনই মেয়াদ শেষ না হওয়ার জন্য কীভাবে সেট করবেন?
আপনি যদি একটি অ্যাকাউন্টের জন্য একটি স্থায়ী পাসওয়ার্ড সেট করতে চান তবে পাসওয়ার্ড কখনই মেয়াদ শেষ হয় না চেক করুন AD-তে ব্যবহারকারীর বৈশিষ্ট্যের বিকল্প (এটি UserAccoutControl বৈশিষ্ট্যের একটি বিট মান)।
অথবা আপনি ব্যবহারকারীর বৈশিষ্ট্য সেট করে PowerShell এর সাথে এই বিকল্পটি সক্ষম করতে পারেন:
Get-ADUser jsmith | Set-ADUser -PasswordNeverExpires:$True
আপনি একটি টেক্সট ফাইলের তালিকা থেকে একাধিক ব্যবহারকারীর জন্য একবারে পাসওয়ার্ড নেভার এক্সপায়ার বিকল্প সেট করতে পারেন:
$users=Get-Content "C:\PS\users_password_never_expire.txt"
Foreach ($user in $users) {
Set-ADUser $user -PasswordNeverExpires:$True
}
আপনি অক্ষম নিয়মিত পাসওয়ার্ড পরিবর্তন বিকল্প সহ সমস্ত ব্যবহারকারীর তালিকা প্রদর্শন করতে পারেন:
Get-ADUser -filter * -properties Name, PasswordNeverExpires | where {$_.passwordNeverExpires -eq "true" } | Select-Object DistinguishedName,Name,Enabled |ft
অবজেক্ট নির্বাচন করুন
অ্যাকটিভ ডিরেক্টরি পাসওয়ার্ড মেয়াদোত্তীর্ণ বিজ্ঞপ্তি নীতি
উইন্ডোজের একটি বিশেষ গ্রুপ পলিসি প্যারামিটার রয়েছে যা ব্যবহারকারীদেরকে তাদের পাসওয়ার্ড পরিবর্তন করতে হবে তা জানানোর অনুমতি দেয়।
নীতিটিকে বলা হয় ইন্টারেক্টিভ লগন:মেয়াদ শেষ হওয়ার আগে ব্যবহারকারীকে পাসওয়ার্ড পরিবর্তন করতে অনুরোধ করুন এবং GPO বিভাগের অধীনে অবস্থিত:কম্পিউটার কনফিগারেশন -> নীতি -> উইন্ডোজ সেটিংস -> নিরাপত্তা সেটিংস -> স্থানীয় নীতি -> নিরাপত্তা বিকল্পগুলি৷
ডিফল্টরূপে, স্থানীয় Windows সেটিংসে নীতিটি সক্রিয় থাকে এবং পাসওয়ার্ডের মেয়াদ শেষ হওয়ার 5 দিন আগে বিজ্ঞপ্তিগুলি উপস্থিত হতে শুরু করে৷ ব্যবহারকারীরা কত দিন পাসওয়ার্ড পরিবর্তনের বিজ্ঞপ্তি দেখতে পাবেন আপনি তা পরিবর্তন করতে পারেন।
এই নীতি সক্রিয় করার পরে, ব্যবহারকারীর পাসওয়ার্ডের মেয়াদ শেষ হলে, প্রতিটি ব্যবহারকারী লগ ইন করার সময় একটি পাসওয়ার্ড পরিবর্তন করার জন্য একটি বিজ্ঞপ্তি ট্রেতে উপস্থিত হবে৷
Consider changing your password Your password will expire in xx days.
আপনি একটি সাধারণ PowerShell স্ক্রিপ্টও ব্যবহার করতে পারেন যা 5 দিনের কম সময়ের মধ্যে মেয়াদ শেষ হলে পাসওয়ার্ড পরিবর্তন করার প্রম্পট সহ স্বয়ংক্রিয়ভাবে একটি ডায়ালগ উইন্ডো দেখায়:
Add-Type -AssemblyName PresentationFramework
$curruser= Get-ADUser -Identity $env:username -Properties 'msDS-UserPasswordExpiryTimeComputed','PasswordNeverExpires'
if ( -not $curruser.'PasswordNeverExpires') {
$timediff=(new-timespan -start (get-date) -end ([datetime]::FromFileTime($curruser."msDS-UserPasswordExpiryTimeComputed"))).Days
if ($timediff -lt 5) {
$msgBoxInput = [System.Windows.MessageBox]::Show("Your password expires in "+ $timediff + " days!`nDo you want to change it now?","Important!","YesNo","Warning")
switch ($msgBoxInput) {
'Yes' {
cmd /c "explorer shell:::{2559a1f2-21d7-11d4-bdaf-00c04f60b9f0}"
}
'No' { }
}
}
}
যদি একজন ব্যবহারকারী হ্যাঁ ক্লিক করেন, তাহলে একটি উইন্ডোজ নিরাপত্তা উইন্ডো প্রদর্শিত হবে যা আপনি Ctrl+Alt+Del
চাপার পরে দেখতে পাবেন। অথবা Ctrl+Alt+End
(আরডিপি/আরডিএস সংযোগের ক্ষেত্রে)।
স্ক্রিপ্টটি বোঝায় যে AD মডিউলের জন্য PowerShell ব্যবহারকারীদের কম্পিউটারে ইনস্টল করা আছে। RSAT ইনস্টল না থাকলেও এটি ব্যবহার করা যেতে পারে। "RSAT ইনস্টল না করে AD মডিউল ব্যবহার করা" নিবন্ধটি দেখুন।
PS স্ক্রিপ্টের জন্য স্বয়ংক্রিয় স্টার্টআপ সক্ষম করুন বা এটিকে একটি GPO লগন স্ক্রিপ্ট হিসাবে চালান৷
৷পাওয়ারশেলের মাধ্যমে পাসওয়ার্ড মেয়াদ শেষ হওয়ার ইমেল বিজ্ঞপ্তি
আপনি যদি ব্যবহারকারীদের তাদের পাসওয়ার্ডের মেয়াদ শেষ হওয়ার বিষয়ে ইমেলের মাধ্যমে অবহিত করতে চান, তাহলে আপনি এই PowerShell স্ক্রিপ্টটি ব্যবহার করতে পারেন:
$Sender = "[email protected]"
$Subject = 'Important! Your password expires soon!'
$BodyTxt1 = 'Your password for'
$BodyTxt2 = 'expires in '
$BodyTxt3 = 'days. Remember to change your password in advance. If you have other questions, contact the HelpDesk.'
$smtpserver ="smtp.woshub.com"
$warnDays = (get-date).adddays(7)
$2Day = get-date
$Users = Get-ADUser -SearchBase 'OU=Users,OU=NewYork,DC=woshub,DC=com' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, EmailAddress, Name | select Name, @{Name ="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}, EmailAddress
foreach ($user in $users) {
if (($user.ExpirationDate -lt $warnDays) -and ($2Day -lt $user.ExpirationDate) ) {
$lastdays = ( $user.ExpirationDate -$2Day).days
$EmailBody = $BodyTxt1, $user.name, $BodyTxt2, $lastdays, $BodyTxt3 -join ' '
Send-MailMessage -To $user.EmailAddress -From $Sender -SmtpServer $smtpserver -Subject $Subject -Body $EmailBody
}
}
স্ক্রিপ্টটি সমস্ত সক্রিয় ডোমেন ব্যবহারকারীদের পরীক্ষা করে যাদের পাসওয়ার্ডের মেয়াদ শেষ হতে চলেছে৷ পাসওয়ার্ডের মেয়াদ শেষ হওয়ার 7 দিনের মধ্যে, একজন ব্যবহারকারী AD-তে নির্দিষ্ট ঠিকানায় পাঠানো ইমেলগুলি পেতে শুরু করে। পাসওয়ার্ড পরিবর্তন না হওয়া বা মেয়াদ শেষ না হওয়া পর্যন্ত ইমেল পাঠানো হয়।
একজন প্রশাসক Set-ADAccountPassword cmdlet ব্যবহার করে ব্যবহারকারীর পাসওয়ার্ড পরিবর্তন করতে বাধ্য করতে পারেন।আপনার ডোমেনের যেকোনো কম্পিউটার/সার্ভারে এই PowerShell স্ক্রিপ্টটি নিয়মিত চালান (টাস্ক শিডিউলারের সাথে এটি করা সহজ)। অবশ্যই, আপনাকে আপনার SMTP সার্ভারে অনুমোদিত প্রেরক তালিকায় (প্রমাণিকরণ ছাড়াই ইমেল পাঠাতে পারে) ইমেল পাঠাচ্ছে এমন হোস্টের IP ঠিকানা যোগ করতে হবে।