背景


AD中部分用户使用Exchange Online邮箱,AD账号原本已经批量创建完成,给的是固定密码,但因为目前针对这批用户暂时修改密码界面的开发工作延迟,需要重新生成符合要求的随机密码,并通知给用户。

实现过程


  • 前期批量创建用户的脚本
 
$lines = Import-Csv D:\user.csv

$passwd = "example.com"
$pwd = ConvertTo-SecureString $passwd -AsPlainText -Force

foreach($line in $lines){
 
New-ADUser -Name $line.name -DisplayName $line.displayname -SamAccountName $line.samaccountname -UserPrincipalName $line.upn -AccountPassword $pwd  -ChangePasswordAtLogon $true -EmailAddress $line.mail -Surname $line.firstname -GivenName $line.lastname -Path "ou=test1,ou=test,dc=example,dc=com" -Enabled $true
} 

csv文件内容: image.png

  • 生成随机密码的脚本 这里使用python,本例需要生成100个随机密码:
#!/usr/bin/env python3
import string
import random

def random_pwd():
    str1 = '!@#$%^&*'
    src = string.ascii_letters + string.digits + str1

    pwd_list = random.choices(src, k=4)
    pwd_list.extend(random.sample(string.ascii_uppercase, 1))
    pwd_list.extend(random.sample(string.ascii_lowercase, 1))
    pwd_list.extend(random.sample(string.digits, 1))
    pwd_list.extend(random.sample(str1, 1))
#    print(pwd_list)
    random.shuffle(pwd_list)
    password = ''.join(pwd_list)
    print(password)

for x in range(100):
    random_pwd()

  • AD用户设置为随机密码 将这批密码更新到csv文件,增加password属性列。 image.png
 
$lines = Import-Csv D:\user.csv
foreach($line in $lines){
    $passwd = $line.password  
    $pwd = ConvertTo-SecureString $passwd -AsPlainText -Force
    $username = $line.samaccountname
    Write-Output "$username,$passwd"
    Set-ADAccountPassword -Identity $username -NewPassword $pwd
    Set-ADUser -Identity $username -ChangePasswordAtLogon $false 

} 

  • 将账密推送到钉钉
#/user/bin/python3
# -*- coding: utf-8 -*-
import json
import csv
import requests



url = 'http://example.com/ding/sendOtoMsg/sampleMarkdown'

headers = {'content-type': 'application/json'}
appkey = "appkey"
appsecret = "appsecret"

####
csvfile = "/Users/shi/Downloads/user.csv"
with open(csvfile, 'r') as file:
    csv_reader = csv.DictReader(file)
    for row in csv_reader:
        username = row['samaccountname']
        email = row['mail']
        name = row['displayname']
        password = row['password']
        message = f'Hello,{name}:\n\n **Your Email**:  {email}\n\n **Username**: {username}\n\n**Password**: {password}'
        data = {
            "appKey": appkey,
            "appSecret": appsecret,
            "emails": email,
            "title": "邮箱开通提醒!",
            "text": message,
            "source": 'IT支持'
            }
        data = json.dumps(data)
        res = requests.post(url, headers=headers, data=data)