You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell用户创建表单密码刷新功能实现求助

PowerShell AD用户创建表单密码生成功能修复

核心修改方案

  • 将密码生成逻辑封装为独立可复用函数
  • 为Refresh按钮绑定点击事件,调用函数更新密码输入框
  • 在Submit按钮完成用户创建后,自动调用函数生成新密码

1. 封装密码生成函数

把原有的密码生成逻辑抽离为独立函数,确保生成的密码包含大小写字母、数字和特殊字符,满足AD密码复杂度要求:

function Generate-RandomPassword {
    param(
        [int]$Length = 12,
        [char[]]$SpecialChars = '@#$%^&*()_+-='
    )
    # 定义四类字符集:小写、大写、数字、特殊字符
    $charSets = @(
        [char[]]('a'..'z'),
        [char[]]('A'..'Z'),
        [char[]]('0'..'9'),
        $SpecialChars
    )
    $password = @()
    # 确保每类字符至少包含一个
    foreach ($set in $charSets) {
        $password += $set | Get-Random
    }
    # 填充剩余长度的随机字符
    for ($i = $charSets.Count; $i -lt $Length; $i++) {
        $randomSet = $charSets | Get-Random
        $password += $randomSet | Get-Random
    }
    # 打乱字符顺序并转为字符串返回
    return ($password | Get-Random -Count $password.Count) -join ''
}

2. 表单事件绑定与逻辑整合

以下是完整的修改后脚本,包含表单初始化、按钮事件绑定、用户创建逻辑:

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# 密码生成函数(同上)
function Generate-RandomPassword {
    param(
        [int]$Length = 12,
        [char[]]$SpecialChars = '@#$%^&*()_+-='
    )
    $charSets = @(
        [char[]]('a'..'z'),
        [char[]]('A'..'Z'),
        [char[]]('0'..'9'),
        $SpecialChars
    )
    $password = @()
    foreach ($set in $charSets) {
        $password += $set | Get-Random
    }
    for ($i = $charSets.Count; $i -lt $Length; $i++) {
        $randomSet = $charSets | Get-Random
        $password += $randomSet | Get-Random
    }
    return ($password | Get-Random -Count $password.Count) -join ''
}

# 创建主表单
$form = New-Object System.Windows.Forms.Form
$form.Text = "AD用户创建工具"
$form.Size = New-Object System.Drawing.Size(400,300)
$form.StartPosition = "CenterScreen"

# 用户名输入区域
$lblUsername = New-Object System.Windows.Forms.Label
$lblUsername.Location = New-Object System.Drawing.Point(10,20)
$lblUsername.Size = New-Object System.Drawing.Size(80,20)
$lblUsername.Text = "用户名:"
$form.Controls.Add($lblUsername)

$txtUsername = New-Object System.Windows.Forms.TextBox
$txtUsername.Location = New-Object System.Drawing.Point(100,20)
$txtUsername.Size = New-Object System.Drawing.Size(250,20)
$form.Controls.Add($txtUsername)

# 密码输入区域
$lblPassword = New-Object System.Windows.Forms.Label
$lblPassword.Location = New-Object System.Drawing.Point(10,60)
$lblPassword.Size = New-Object System.Drawing.Size(80,20)
$lblPassword.Text = "密码:"
$form.Controls.Add($lblPassword)

$txtPassword = New-Object System.Windows.Forms.TextBox
$txtPassword.Location = New-Object System.Drawing.Point(100,60)
$txtPassword.Size = New-Object System.Drawing.Size(200,20)
$form.Controls.Add($txtPassword)

# Refresh按钮
$btnRefresh = New-Object System.Windows.Forms.Button
$btnRefresh.Location = New-Object System.Drawing.Point(310,60)
$btnRefresh.Size = New-Object System.Drawing.Size(60,20)
$btnRefresh.Text = "刷新"
# 绑定点击事件:生成新密码并填充输入框
$btnRefresh.Add_Click({
    $txtPassword.Text = Generate-RandomPassword
})
$form.Controls.Add($btnRefresh)

# Submit按钮
$btnSubmit = New-Object System.Windows.Forms.Button
$btnSubmit.Location = New-Object System.Drawing.Point(150,200)
$btnSubmit.Size = New-Object System.Drawing.Size(80,30)
$btnSubmit.Text = "创建用户"
$btnSubmit.Add_Click({
    # 校验用户名输入
    if (-not $txtUsername.Text.Trim()) {
        [System.Windows.Forms.MessageBox]::Show("请输入用户名")
        return
    }
    # 转换密码为SecureString格式
    $securePassword = ConvertTo-SecureString $txtPassword.Text -AsPlainText -Force
    try {
        # 执行AD用户创建(可根据需求添加OU、邮箱等额外属性)
        New-ADUser -Name $txtUsername.Text -SamAccountName $txtUsername.Text `
            -AccountPassword $securePassword -Enabled $true -ChangePasswordAtLogon $true `
            -PassThru
        [System.Windows.Forms.MessageBox]::Show("用户 $($txtUsername.Text) 创建成功!")
        # 创建成功后自动生成新密码
        $txtPassword.Text = Generate-RandomPassword
        # 清空用户名输入框,方便后续操作
        $txtUsername.Text = ""
    }
    catch {
        [System.Windows.Forms.MessageBox]::Show("创建失败: $($_.Exception.Message)")
    }
})
$form.Controls.Add($btnSubmit)

# 表单加载时生成初始密码
$form.Add_Load({
    $txtPassword.Text = Generate-RandomPassword
})

# 显示表单
$form.ShowDialog() | Out-Null

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:12:57