[通过Powershell更新AD密码

问题描述 投票:0回答:1

太多了Powershell专家:我需要一些帮助来弄清楚为什么它无法正常工作。我的意思不正确,CSV密码中的帐户会使用随机密码进行更新,并且电子邮件会发送给用户,但是我不知道为什么他们使用相同的密码,并且AD中的每个帐户都得到了解决。查看电子邮件输出:

第一用户电子邮件:

Hello Guest DefaultAccount user1, user2, user3, user4 test John Doe, 
Your AD Account user1, password has been updated to e,wQlsGfBE;J'4  

第二个用户电子邮件

 Hello Guest DefaultAccount user1, user2, user3, user4 test John Doe, 
Your AD Account jdoe, password has been updated to e,wQlsGfBE;J'4  

我要完成的工作如下:

  1. 列表项
  2. 仅用“ samAccountName”导入一列cvs
  3. 使用随机生成的20个字符长的密码重置csv中列出的帐户的密码
  4. 使用新密码通过电子邮件发送与AD帐户关联的电子邮件地址。 (我这样做是因为他们的电子邮件地址与他们的广告帐户不同),因此他们能够接收他们的电子邮件。

Import-Module ActiveDirectory
# Import AD user objects and store in users variables 
$users = Get-ADUser -Filter *  -Properties Name, EmailAddress,SamAccountName | Select SamAccountName,Name,EmailAddress
    
$Name = $users.Name
$SamAccountName = $users.SamAccountName
$EmailAddress = $users.EmailAddress

#Date
$date = (Get-Date -Format F) 

#Generate a random password and store in newpwd 
$newpwd = -join (33..126|%{[char]$_}|Get-Random -Count 20)
$newPassword = ConvertTo-SecureString -AsPlainText "$newpwd" -Force

# Import users from CSV
Import-Csv "C:\Userlist.csv" | ForEach-Object {
$samAccountName= $_."samAccountName"

        #Proceed with password reset
            Set-ADAccountPassword -Identity $samAccountName -NewPassword $newPassword -Reset
            Set-AdUser -Identity $samAccountName -ChangePasswordAtLogon $true

#Server configuration 
$smtpServer =""
$SmtpPort = ""
# sending option
$from = "[email protected]"
$to = $EmailAddress 
$subject  ="AD Password updated - " + $date
$priority = "Normal"
$from = ""

$body = @"
Hello $name, <br> 
Your AD Account $samAccountName, password has been updated to $newpwd
"@
try {
# Send the report email
Send-MailMessage -To $to -Subject $subject -BodyAsHtml -body $body -SmtpServer $smtpServer -Port $SmtpPort -From $From -Priority $priority  
}
catch{
    write-warning "error in sending. $_"
}  # End User Processing
            
    }

帐户密码正在更新,但无法发送emai

powershell active-directory powershell-3.0 change-password
1个回答
0
投票

当您执行$Name = $users.Name时,$Name变量将获得一个数组,该数组包含CSV中的ALL用户名。

删除该行,而是在ForEach-Object循环中设置变量:

# Import users from CSV
$UserList = Import-Csv "C:\Userlist.csv" | ForEach-Object {
    $samAccountName= $_.samAccountName
    $name = $_.Name
    # then the rest of your code
}

注意:

  • SmtpPort采用整数,而不是字符串
  • From不能为空字符串

P.S。尝试执行一些适当的代码缩进,因此更容易查看代码块(例如ForEach-Object)的开始和结束位置)

© www.soinside.com 2019 - 2024. All rights reserved.