Câu trả lời:
Điều này có thể đạt được bằng lệnh DOS / Batch
tên người dùng mạng
Nếu bạn đang ở trên một tên miền, bạn sẽ cần thêm công tắc /Domain
. Trong trường hợp của bạn, chỉ cần chèn tên người dùng.
Điều này sẽ liệt kê các chi tiết quan trọng nhất của tài khoản đó, bao gồm ngày hết hạn của mật khẩu người dùng.
Nếu trước đây bạn đang theo đuổi cùng một vấn đề mà tôi gặp phải, người dùng muốn cảnh báo tốt hơn khi nào mật khẩu của họ sẽ hết hạn, đặc biệt là khi họ rời khỏi một PC thông thường. Sau đây là kịch bản tôi chạy cứ sau 72 giờ (3 ngày) để cảnh báo email.
# © 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)
}
Đặt bốn dòng cấu hình phù hợp cho môi trường của bạn. Sửa đổi các phần khác khi cần thiết.
PS có thể khiếu nại nếu tập lệnh không được ký. Tôi đã ký tên bằng cách sử dụng (Tôi có chứng chỉ ký mã):
Set-AuthenticodeSignature PasswordBot.ps1 @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Sau đó, tôi đã tạo một Tác vụ theo lịch trình đơn giản, kích hoạt cứ sau 72 giờ, hành động là chạy C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
với đối số C:\Path\To\PasswordBot.ps1
.
Lưu ý: Máy tính mà tập lệnh này được chạy phải là thành viên của miền và phải cài đặt mô-đun "Active Director cho Windows PowerShell". Bạn có thể chạy start /wait ocsetup ActiveDirectory-PowerShell
trên bất kỳ máy chủ nào để cài đặt nó hoặc tìm thấy nó trong danh sách Tính năng trong Windows 7 (có thể cần phải có RSAT, tôi không thể nhớ bây giờ).