在 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()
清除列表框项目
我目前正在制作自己的管理工具,其中一项功能应该是“禁用帐户”(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()