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

PowerShell带GUI的密码重置脚本三项功能优化问题咨询

PowerShell GUI密码重置脚本优化方案

以下是针对你提出的三个需求的完整实现代码,所有功能均已适配你的使用场景:

已实现的优化点

  • 输入框为空时自动禁用OK按钮,仅当输入内容(RFID扫描完成)时启用按钮,完全兼容扫描后自动触发回车的逻辑
  • 主表单始终保持打开状态,点击OK不会关闭主窗口;弹出的提示框独立显示在主窗口上层,绑定15秒倒计时自动关闭,关闭后自动清空输入框、恢复待扫描状态,支持多用户连续使用
  • 提示框支持完全自定义样式,可和主表单配置统一的背景色、文字颜色、大小等样式参数

完整代码

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

# 导入CSV用户数据
# 注意:如果你的CSV文件本身已包含First,Second等表头行,请删除下面的-Header参数,避免表头被识别为用户数据
$Spreadsheet = Import-CSV "C:\Desktop\Password Reset\Passwords.csv" -Header First,Second,Username,Password,RFID

# 创建主表单
$form = New-Object System.Windows.Forms.Form
$form.Text = '密码重置系统'
$form.Size = New-Object System.Drawing.Size(800,600)
$form.StartPosition = 'CenterScreen'
$Form.BackColor = "#A4F9F4"
$Form.ForeColor = "#000000"

# 创建OK按钮
$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = New-Object System.Drawing.Point(350,350)
$okButton.Size = New-Object System.Drawing.Size(100,24)
$okButton.Text = '确定'
$okButton.Enabled = $false # 初始状态禁用
$form.AcceptButton = $okButton # 回车触发点击
$form.Controls.Add($okButton)

# 创建提示标签
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(270,300)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = '请扫描您的卡片:'
$form.Controls.Add($label)

# 创建输入框
$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(270,320)
$textBox.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox)
$form.Topmost = $true
$form.Add_Shown({$textBox.Select()})

# 输入框内容变化事件:控制OK按钮启用状态
$textBox.Add_TextChanged({
    $okButton.Enabled = -not [string]::IsNullOrWhiteSpace($textBox.Text)
})

# OK按钮点击事件
$okButton.Add_Click({
    $resetCardNumber = $textBox.Text.Trim()
    $targetUser = $Spreadsheet | Where-Object RFID -eq $resetCardNumber

    # 自定义弹出消息框
    $msgForm = New-Object System.Windows.Forms.Form
    $msgForm.Size = New-Object System.Drawing.Size(400,200)
    $msgForm.StartPosition = 'CenterParent'
    $msgForm.BackColor = "#A4F9F4" # 可自定义样式
    $msgForm.ForeColor = "#000000"
    $msgForm.FormBorderStyle = 'FixedDialog'
    $msgForm.MaximizeBox = $false
    $msgForm.MinimizeBox = $false
    $msgForm.Topmost = $true
    $msgForm.Text = "提示"

    $msgLabel = New-Object System.Windows.Forms.Label
    $msgLabel.Location = New-Object System.Drawing.Point(20,30)
    $msgLabel.Size = New-Object System.Drawing.Size(340,100)
    if($targetUser){
        # 重置AD账户密码
        Set-ADAccountPassword $targetUser.Username -Reset -NewPassword (Convertto-Securestring -AsPlainText $targetUser.Password -Force)
        $msgLabel.Text = "您的用户名:$($targetUser.Username) `n您的密码:$($targetUser.Password)"
    } else {
        $msgLabel.Text = "系统中未找到您的用户信息"
    }
    $msgForm.Controls.Add($msgLabel)

    # 15秒自动关闭定时器
    $timer = New-Object System.Windows.Forms.Timer
    $timer.Interval = 15000
    $timer.Add_Tick({
        $timer.Stop()
        $msgForm.Close()
    })
    $timer.Start()

    $msgForm.ShowDialog()
    $timer.Dispose()
    $msgForm.Dispose()

    # 重置输入框,恢复待扫描状态
    $textBox.Clear()
    $textBox.Select()
})

# 运行主表单
$form.ShowDialog()
$form.Dispose()

补充说明

你可以根据需求自行修改自定义消息框的样式参数,包括大小、位置、背景色、字体、文字大小等,和主表单的样式配置逻辑完全一致。

内容的提问来源于stack exchange,提问作者Daniel De La Warr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:48:04