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

PowerShell GUI创建AD用户异常:点击保存按钮无法读取文本框数据求助

解决PowerShell GUI创建AD用户时需手动输入姓氏的问题

嘿,我来帮你搞定这个问题!你的脚本里有两个核心问题导致点击「Speichern」按钮后需要手动输入姓氏,咱们一步步来修正:

问题原因分析

  1. 变量赋值时机不对
    你在脚本初始化阶段就把文本框的内容赋值给了$addv、$addn这些变量,比如:

    $addv = $Textboxvorname.Text
    

    这时候用户还没在文本框里输入任何内容,这些变量的值都是空字符串。当点击按钮执行New-ADUser时,用的还是这些空值,PowerShell自然会提示你手动补全必填的Surname参数。

  2. 参数语法错误
    在New-ADUser的调用里,你写成了-Givenname = $addv和-Surname =$addn,这里的等号是多余的!PowerShell的参数格式是-参数名 参数值,不需要加等号,否则会被当成参数值的一部分,导致参数无法正确识别。

修正后的完整脚本

我已经帮你把这两个问题修复了,还加了简单的输入验证和错误处理,避免空输入或创建失败的情况:

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
Import-Module ActiveDirectory

# GUI Oberfläche
$Form = New-Object System.Windows.Forms.Form
$Form.Size = New-Object System.Drawing.Size(500,500)
$Form.Text = "Benutzer hinzufügen"

#-------Labels-----------
# Label Benutzer hinzufügen
$labeladduser = New-Object System.Windows.Forms.Label
$labeladduser.Location = New-Object System.Drawing.Size(200,10)
$labeladduser.Size = New-Object System.Drawing.Size(200,30)
$labeladduser.Text = "Benutzer hinzufügen"
$labeladduser.Name = "Benutzer hinzufügen"
$Form.Controls.Add($labeladduser)

# Label Vorname
$Labelvorname = New-Object System.Windows.Forms.Label
$Labelvorname.Location = New-Object System.Drawing.Size(10,50)
$Labelvorname.Size = New-Object System.Drawing.Size(100,20)
$Labelvorname.Text = "Vorname"
$Labelvorname.Name = "Vorname"
$Form.Controls.Add($Labelvorname)

# Label Nachname
$Labelnachname = New-Object System.Windows.Forms.Label
$Labelnachname.Location = New-Object System.Drawing.Size(10,80)
$Labelnachname.Size = New-Object System.Drawing.Size(100,20)
$Labelnachname.Text = "Nachname"
$Labelnachname.Name = "Nachname"
$Form.Controls.Add($Labelnachname)

# Label Vollständigername
$LabelVn = New-Object System.Windows.Forms.Label
$LabelVn.Location = New-Object System.Drawing.Size(10,110)
$LabelVn.Size = New-Object System.Drawing.Size(100,20)
$LabelVn.Text = "Vollständigername"
$LabelVn.Name = "Vollständigername"
$Form.Controls.Add($LabelVn)

# Label Benutzeranmeldename
$LabelBa = New-Object System.Windows.Forms.Label
$LabelBa.Location = New-Object System.Drawing.Size(10,140)
$LabelBa.Size = New-Object System.Drawing.Size(150,20)
$LabelBa.Text = "Benutzeranmeldename"
$LabelBa.Name = "Benutzeranmeldename"
$Form.Controls.Add($LabelBa)

#-------Buttons-------
# Close GUI Button
$BTcancel = New-Object System.Windows.Forms.Button
$BTcancel.Location = New-Object System.Drawing.Size(400,180)
$BTcancel.Size = New-Object System.Drawing.Size(75,23)
$BTcancel.Text = "Cancel"
$BTcancel.Name = "Cancel"
$BTcancel.Add_Click({$Form.Close()})
$Form.Controls.Add($BTcancel)

# Speichern Button
$BTsave = New-Object System.Windows.Forms.Button
$BTsave.Location = New-Object System.Drawing.Size(320,180)
$BTsave.Size = New-Object System.Drawing.Size(75,23)
$BTsave.Text = "Speichern"
$BTsave.Name = "Speichern"
$Form.Controls.Add($BTsave)

#------Textfields------
# Textfeld Vorname
$Textboxvorname = New-Object System.Windows.Forms.TextBox
$Textboxvorname.Location = New-Object System.Drawing.Size(200,50)
$Textboxvorname.Size = New-Object System.Drawing.Size(200,20)
$Form.Controls.Add($Textboxvorname)

# Textfeld Nachname
$Textboxnachname = New-Object System.Windows.Forms.TextBox
$Textboxnachname.Location = New-Object System.Drawing.Size(200,80)
$Textboxnachname.Size = New-Object System.Drawing.Size(200,20)
$Form.Controls.Add($Textboxnachname)

# Textfeld Vollständigername
$TextboxVa = New-Object System.Windows.Forms.TextBox
$TextboxVa.Location = New-Object System.Drawing.Size(200,110)
$TextboxVa.Size = New-Object System.Drawing.Size(200,20)
$Form.Controls.Add($TextboxVa)

# Textfeld Benutzeranmeldename
$TextboxBa= New-Object System.Windows.Forms.TextBox
$TextboxBa.Location = New-Object System.Drawing.Size(200,140)
$TextboxBa.Size = New-Object System.Drawing.Size(200,20)
$Form.Controls.Add($TextboxBa)

#------Funktionen--------
# Add User
$BTsave.Add_Click({
    # 点击按钮时才读取当前文本框的内容,去除前后空格
    $addv = $Textboxvorname.Text.Trim()
    $addn = $Textboxnachname.Text.Trim()
    $addVa = $TextboxVa.Text.Trim()
    $addBa = $TextboxBa.Text.Trim()

    # 简单输入验证:确保所有字段都不为空
    if([string]::IsNullOrEmpty($addv) -or [string]::IsNullOrEmpty($addn) -or [string]::IsNullOrEmpty($addVa) -or [string]::IsNullOrEmpty($addBa)){
        [System.Windows.Forms.MessageBox]::Show("Bitte füllen Sie alle Felder aus!", "Fehler", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
        return
    }

    # 修正参数格式,执行用户创建
    try{
        New-ADUser -Name $addVa -Path "Ou=Users, DC=domain, DC=com" -GivenName $addv -Surname $addn -SamAccountName $addBa -AccountPassword (ConvertTo-SecureString "<redacted>" -AsPlainText -Force) -Enabled $true
        [System.Windows.Forms.MessageBox]::Show("Benutzer erfolgreich erstellt!", "Erfolg", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)
    }
    catch{
        [System.Windows.Forms.MessageBox]::Show("Fehler beim Erstellen des Benutzers: $_", "Fehler", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
    }
})

[void] $Form.ShowDialog()

额外优化说明

  • 用.Trim()去除输入内容前后的空格,避免不必要的空白导致的问题
  • 增加输入验证,确保所有必填字段都被填写,并用弹窗提示用户
  • 加入try-catch块捕获创建用户时的错误,方便排查问题
  • 给New-ADUser添加-Enabled $true参数,默认启用新用户(可根据需求调整)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:58:09