在 Powershell 的列表框中列出 AD 用户

List AD Users in List Box in Powershell

我目前正在制作自己的管理工具,其中一项功能应该是“禁用帐户”(Active Directory 用户)。

我目前的代码如下:

#Assemblies
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()

#Frame
$frmDisableUser                  = New-Object system.Windows.Forms.Form
$frmDisableUser.ClientSize       = New-Object System.Drawing.Point(378,99)
$frmDisableUser.text             = "Disable User"
$frmDisableUser.TopMost          = $false
$frmDisableUser.BackColor        = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")
$frmDisableUser.TopMost            = $false
$frmDisableUser.FormBorderStyle    = "FixedSingle"
$frmDisableUser.startposition      = "CenterScreen"
$frmDisableUser.MaximizeBox        = $false

#AD Users Listbox
$lstADUsers                      = New-Object system.Windows.Forms.ListBox
$lstADUsers.width                = 356
$lstADUsers.height               = 20
$lstADUsers.location             = New-Object System.Drawing.Point(9,18)
$lstADUsers.Font                 = New-Object System.Drawing.Font('Microsoft Sans Serif',10)

#Disable Account Button
$btnDisableAccount               = New-Object system.Windows.Forms.Button
$btnDisableAccount.text          = "Disable"
$btnDisableAccount.width         = 100
$btnDisableAccount.height        = 30
$btnDisableAccount.location      = New-Object System.Drawing.Point(265,53)
$btnDisableAccount.Font          = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$btnDisableAccount.Add_Click({

})

#Adds all elements into th eframe
$frmDisableUser.controls.AddRange(@($lstADUsers,$btnDisableAccount))

#Shows the frame
$frmDisableUser.ShowDialog()

我用来获取所有 AD 用户作为输出的命令如下:

Get-ADUser -Filter {(Enabled -eq "true")} | Select-Object Name

我认为最简单的方法是使用数组来实现它,但老实说我对数组不是很熟悉...如果你能帮助我,我将非常高兴!

感谢您的宝贵时间!

您可以使用

向列表框添加项目

$lstADUsers.Items.Add()

我已经更新了您的代码以证明这一点。

#Assemblies
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()

#Frame
$frmDisableUser                  = New-Object system.Windows.Forms.Form
$frmDisableUser.ClientSize       = New-Object System.Drawing.Point(388,299)
$frmDisableUser.text             = "Disable User"
$frmDisableUser.TopMost          = $false
$frmDisableUser.BackColor        = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")
$frmDisableUser.TopMost            = $false
$frmDisableUser.FormBorderStyle    = "FixedSingle"
$frmDisableUser.startposition      = "CenterScreen"
$frmDisableUser.MaximizeBox        = $false

#AD Users Listbox
$lstADUsers                      = New-Object system.Windows.Forms.ListBox
$lstADUsers.width                = 356
$lstADUsers.height               = 220
$lstADUsers.location             = New-Object System.Drawing.Point(9,18)
$lstADUsers.Font                 = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$lstADUsers.AutoSize = $false
Get-ADUser -Filter {(Enabled -eq "true")} | foreach{[void]$lstADUsers.Items.Add($_.name)}


#Disable Account Button
$btnDisableAccount               = New-Object system.Windows.Forms.Button
$btnDisableAccount.text          = "Disable"
$btnDisableAccount.width         = 100
$btnDisableAccount.height        = 30
$btnDisableAccount.location      = New-Object System.Drawing.Point(265,249)
$btnDisableAccount.Font          = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$btnDisableAccount.Add_Click({

})

#Adds all elements into th eframe
$frmDisableUser.controls.AddRange(@($lstADUsers,$btnDisableAccount))

#Shows the frame
$frmDisableUser.ShowDialog()

注意转换为 [void] - 这是为了抑制 .Add() 方法的输出。它发出数组中该项目的索引号。

我还建议您查看 https://poshgui.com/(如果您还没有的话)。它不仅可以帮助您设计表单,还可以帮助您学习如何与 GUI 组件进行交互。

ListBox(它是一个 ObjectCollection 对象)的 Items 属性 有一个名为 AddRange 的方法,您可以使用该方法输入数组。
只需获取用户名的字符串数组并一次性输入即可。
为了使列表更易读,请按字母顺序对其进行排序。您也可以将列表框的 'Sorted' 属性 设置为 $true,但在添加到列表框之前进行排序更有效。

$users = (Get-ADUser -Filter "Enabled -eq 'True'").Name | Sort-Object

接下来将数组添加到列表框

$lstADUsers.Items.AddRange($users)

P.S。如果您需要使用 Get-ADUser 的新调用结果刷新列表框数据,请先使用 $lstADUsers.Items.Clear()

清除列表框项目