好的,我知道这最终会是基本的,但我似乎无法弄清楚。我正在尝试构建一个工具,使我们能够获取用户的完整 AD 组名称。我们当前遇到的问题是我们的 AD 组的名称很长,因此net user MrSmith /domain
最终会截断完整的 AD 组名称。我尝试使用gpresult -user MrSmith /r
但由于某种原因,这不会返回所有 AD 组。
所以我决定要创建一些新的东西,以后也会有其他应用程序。我想首先做到这一点:执行net group /domain
来拉取 DC 中的所有 AD 组。其次,为域中的每个 ADGroup 运行net group $ADGroup /domain
,并使用该输出搜索指定的用户 ID,并创建一个新输出,该输出显示用户 ID 所属的每个 AD 组的全名。我将其放在下拉 GUI 中,用于我想要添加的一些未来功能。
现在我已经完成了第一步的很大一部分,但显然我遇到了一个问题。当我做net group /domain
时,我得到的输出看起来像
The request will be processed at a domain controller for domain MyComapny.com.
Group Accounts for \Server.MyComapny.com
-------------------------------------------------------------------------------
*AD_Group_1
*AD_Group_2
*AD_Group_3
*AD_Group_4
.....
我将其添加到临时.txt文件中以供使用。
我遇到的问题是它没有对从下拉列表中选择的AD组执行net group $Choice /domain
,我不知道为什么。
欢迎任何建议,我知道我不是最好的,所以我的格式和风格可能不是标准的。
Clear-Variable DropDownList
$RawADGroups = Net Group /domain >> 'C:script_outRawADList1.txt'
(get-content -path 'C:script_outRawADList1.txt') | ForEach-Object {$_ -replace '*',''} >> 'C:script_outRawADList2.txt'
[string[]]$DropDownList = Get-Content -Path 'C:script_outRawADList2.txt'
Remove-Item 'C:script_outRawADList1.txt'
Remove-Item 'C:script_outRawADList2.txt'
function Return-DropDown {
$Choice = $DropDown.SelectedItem.ToString()
if ($Choice)
{net group $Choice /domain
}
}
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
$Form = New-Object System.Windows.Forms.Form
$Form.width = 340
$Form.height = 150
$Form.Text = "ADGroup"
$DropDown = new-object System.Windows.Forms.ComboBox
$DropDown.Location = new-object System.Drawing.Size(10,10)
$DropDown.Size = new-object System.Drawing.Size(300,30)
ForEach ($Line in $DropDownList) {
$DropDown.Items.Add($Line)
}
$Form.Controls.Add($DropDown)
$DropDownLabel = new-object System.Windows.Forms.Label
$DropDownLabel.Location = new-object System.Drawing.Size(10,10)
$DropDownLabel.size = new-object System.Drawing.Size(200,20)
$Form.Controls.Add($DropDownLabel)
$Button = new-object System.Windows.Forms.Button
$Button.Location = new-object System.Drawing.Size(100,50)
$Button.Size = new-object System.Drawing.Size(100,20)
$Button.Text = "Pick One"
$Button.Add_Click({Return-DropDown})
$form.Controls.Add($Button)
$Form.Add_Shown({$Form.Activate()})
$Form.ShowDialog()
当我单击Pick One
按钮时,没有任何反应,它不会反映任何内容。
我想通了这一点,正如我认为非常简单的那样,我只是忘记了让命令对输出执行任何操作。希望这可能会帮助其他人。
Clear-Variable DropDownList
$RawADGroups = Net Group /domain >> 'C:script_outRawADList1.txt'
(get-content -path 'C:script_outRawADList1.txt') | ForEach-Object {$_ -replace '*',''} >> 'C:script_outRawADList2.txt'
[string[]]$DropDownList = Get-Content -Path 'C:script_outRawADList2.txt'
Remove-Item 'C:script_outRawADList1.txt'
Remove-Item 'C:script_outRawADList2.txt'
function Return-DropDown {
$Choice = $DropDown.SelectedItem.ToString()
if ($Choice)
{
net group $Choice /domain >> C:script_outoutput.txt
}
}
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
$Form = New-Object System.Windows.Forms.Form
$Form.width = 340
$Form.height = 150
$Form.Text = "ADGroup"
$DropDown = new-object System.Windows.Forms.ComboBox
$DropDown.Location = new-object System.Drawing.Size(10,10)
$DropDown.Size = new-object System.Drawing.Size(300,30)
ForEach ($Line in $DropDownList) {
$DropDown.Items.Add($Line)
}
$Form.Controls.Add($DropDown)
$DropDownLabel = new-object System.Windows.Forms.Label
$DropDownLabel.Location = new-object System.Drawing.Size(10,10)
$DropDownLabel.size = new-object System.Drawing.Size(200,20)
$Form.Controls.Add($DropDownLabel)
$Button = new-object System.Windows.Forms.Button
$Button.Location = new-object System.Drawing.Size(100,50)
$Button.Size = new-object System.Drawing.Size(100,20)
$Button.Text = "Pick One"
$Button.Add_Click({Return-DropDown})
$form.Controls.Add($Button)
$Form.Add_Shown({$Form.Activate()})
$Form.ShowDialog()