ฉันจะบอกได้อย่างไรว่ารหัสผ่านของผู้ใช้ที่กำหนดจะหมดอายุเมื่อใด


16

มีวิธีใดจากคอนโซลการจัดการคอมพิวเตอร์หรือบรรทัดคำสั่งเพื่อกำหนดว่ารหัสผ่านของผู้ใช้จะหมดอายุหรือไม่

หมายเหตุ: ฉันถามคำถามนี้สำหรับเซิร์ฟเวอร์ที่ไม่ได้เป็นส่วนหนึ่งของโดเมน


โปรดดูที่ศูนย์ช่วยเหลือ
Michael Hampton

คำตอบ:


22

สิ่งนี้สามารถทำได้โดยคำสั่ง DOS / Batch

ชื่อผู้ใช้สุทธิ

/Domainหากคุณอยู่บนโดเมนที่คุณจะต้องเพิ่มสวิทช์ ในกรณีของคุณเพียงแค่ใส่ชื่อผู้ใช้

รายการนี้จะแสดงรายละเอียดที่สำคัญที่สุดของบัญชีนั้นรวมถึงวันหมดอายุของรหัสผ่านผู้ใช้


ข้อมูลเพิ่มเติมเช่นเดียวกับ: คุณสามารถกำหนดวันหมดอายุผ่านคำสั่งนี้ได้หากคุณต้องการทำเช่นนั้น ดู "ผู้ใช้เน็ต / ความช่วยเหลือ" สำหรับข้อมูลทั้งหมด
LumenAlbum

1
และแฮ็คที่รวดเร็วและสกปรกสำหรับการตัดและวางเพียงใช้: ผู้ใช้สุทธิ% ชื่อผู้ใช้%
รหัสที่

1
ฉันทำชื่อผู้ใช้สุทธิ / โดเมน <ชื่อผู้ใช้> และมันบอกว่า "ไม่พบชื่อผู้ใช้" เป็นเพราะข้อ จำกัด หรือนโยบายความปลอดภัยของโดเมนหรือไม่
atom88

7

หากคุณกำลังไล่ตามปัญหาเดียวกับที่ฉันเคยมีในอดีตผู้ใช้ต้องการคำเตือนที่ดีขึ้นเมื่อรหัสผ่านของพวกเขากำลังจะหมดอายุโดยเฉพาะเมื่อพวกเขาอยู่ห่างจากพีซีทั่วไป ต่อไปนี้เป็นสคริปต์ที่ฉันเรียกใช้ทุก 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.exeC:\Path\To\PasswordBot.ps1

หมายเหตุ: คอมพิวเตอร์ที่รันสคริปต์นี้จะต้องเป็นสมาชิกของโดเมนและต้องมี "Active Director module สำหรับ Windows PowerShell" ติดตั้ง คุณสามารถเรียกใช้start /wait ocsetup ActiveDirectory-PowerShellบนเซิร์ฟเวอร์ใดก็ได้เพื่อติดตั้งหรือค้นหาในรายการคุณสมบัติใน Windows 7 (อาจต้องใช้ RSAT ฉันจำไม่ได้แล้ว)


นี่ดูเหมือนจะเป็นสคริปต์ที่ยอดเยี่ยม แต่เมื่อคุณชี้ให้เห็นว่ามันจะต้องทำงานกับสมาชิกของโดเมน อย่างไรก็ตามหลักฐานของเขาคือเซิร์ฟเวอร์ไม่ได้เป็นส่วนหนึ่งของโดเมน ยังคงเป็นสคริปต์ที่ยอดเยี่ยม
LumenAlbum

สามารถเปลี่ยนสคริปต์นี้ให้ทำงานบนเซิร์ฟเวอร์ที่ไม่ได้เป็นส่วนหนึ่งของโดเมนได้หรือไม่
Aheho
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.