มีวิธีใดจากคอนโซลการจัดการคอมพิวเตอร์หรือบรรทัดคำสั่งเพื่อกำหนดว่ารหัสผ่านของผู้ใช้จะหมดอายุหรือไม่
หมายเหตุ: ฉันถามคำถามนี้สำหรับเซิร์ฟเวอร์ที่ไม่ได้เป็นส่วนหนึ่งของโดเมน
มีวิธีใดจากคอนโซลการจัดการคอมพิวเตอร์หรือบรรทัดคำสั่งเพื่อกำหนดว่ารหัสผ่านของผู้ใช้จะหมดอายุหรือไม่
หมายเหตุ: ฉันถามคำถามนี้สำหรับเซิร์ฟเวอร์ที่ไม่ได้เป็นส่วนหนึ่งของโดเมน
คำตอบ:
สิ่งนี้สามารถทำได้โดยคำสั่ง DOS / Batch
ชื่อผู้ใช้สุทธิ
/Domain
หากคุณอยู่บนโดเมนที่คุณจะต้องเพิ่มสวิทช์ ในกรณีของคุณเพียงแค่ใส่ชื่อผู้ใช้
รายการนี้จะแสดงรายละเอียดที่สำคัญที่สุดของบัญชีนั้นรวมถึงวันหมดอายุของรหัสผ่านผู้ใช้
หากคุณกำลังไล่ตามปัญหาเดียวกับที่ฉันเคยมีในอดีตผู้ใช้ต้องการคำเตือนที่ดีขึ้นเมื่อรหัสผ่านของพวกเขากำลังจะหมดอายุโดยเฉพาะเมื่อพวกเขาอยู่ห่างจากพีซีทั่วไป ต่อไปนี้เป็นสคริปต์ที่ฉันเรียกใช้ทุก 72 ชั่วโมง (3 วัน) เพื่อเตือนอีเมล
# © 2011 Chris Stone, Beerware Licensed
# Derived from http://www.jbmurphy.com/2011/09/22/powershell © 2011 Jeffrey B. Murphy
import-module ActiveDirectory
$warningPeriod = 9
$emailAdmin = "admin@example.com"
$emailFrom = "PasswordBot." + $env:COMPUTERNAME + "@example.com"
$smtp = new-object Net.Mail.SmtpClient("mail.example.com")
$maxdays=(Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.TotalDays
$summarybody="Name `t ExpireDate `t DaysToExpire `n"
(Get-ADUser -filter {(Enabled -eq "True") -and (PasswordNeverExpires -eq "False")} -properties *) | Sort-Object pwdLastSet | foreach-object {
$lastset=Get-Date([System.DateTime]::FromFileTimeUtc($_.pwdLastSet))
$expires=$lastset.AddDays($maxdays).ToShortDateString()
$daystoexpire=[math]::round((New-TimeSpan -Start $(Get-Date) -End $expires).TotalDays)
$samname=$_.samaccountname
$firstname=$_.GivenName
if (($daystoexpire -le $warningPeriod) -and ($daystoexpire -gt 0)) {
$ThereAreExpiring=$true
$subject = "$firstname, your password expires in $daystoexpire day(s)"
$body = "$firstname,`n`nYour password expires in $daystoexpire day(s).`nPlease press Ctrl + Alt + Del -> Change password`n`nSincerely,`n`nPassword Robot"
$smtp.Send($emailFrom, $_.EmailAddress, $subject, $body)
$summarybody += "$samname `t $expires `t $daystoexpire `n"
}
}
if ($ThereAreExpiring) {
$subject = "Expiring passwords"
$smtp.Send($emailFrom, $emailAdmin, $subject, $summarybody)
}
ตั้งค่าบรรทัดการกำหนดค่าทั้งสี่ให้เหมาะสมกับสภาพแวดล้อมของคุณ แก้ไขส่วนอื่น ๆ ตามความจำเป็น
PS อาจบ่นหากสคริปต์ไม่ได้ลงนาม ฉันเซ็นชื่อของฉันโดยใช้ (ฉันมีใบรับรองการลงนามรหัส):
Set-AuthenticodeSignature PasswordBot.ps1 @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
แล้วฉันจะสร้างง่ายๆ Scheduled Task เรียกทุก 72 ชั่วโมง, การกระทำคือการทำงานที่มีการโต้แย้งC:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
C:\Path\To\PasswordBot.ps1
หมายเหตุ: คอมพิวเตอร์ที่รันสคริปต์นี้จะต้องเป็นสมาชิกของโดเมนและต้องมี "Active Director module สำหรับ Windows PowerShell" ติดตั้ง คุณสามารถเรียกใช้start /wait ocsetup ActiveDirectory-PowerShell
บนเซิร์ฟเวอร์ใดก็ได้เพื่อติดตั้งหรือค้นหาในรายการคุณสมบัติใน Windows 7 (อาจต้องใช้ RSAT ฉันจำไม่ได้แล้ว)