Winforms 获取由按钮触发的ADUser
我在WinForm上有一个按钮。单击按钮后,将调用一个函数,该函数应执行Get-ADUser cmdletWinforms 获取由按钮触发的ADUser,winforms,powershell,Winforms,Powershell,我在WinForm上有一个按钮。单击按钮后,将调用一个函数,该函数应执行Get-ADUser cmdlet Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Data Import-Module ActiveDirectory $ctl_frm_aduserlist = New-Object System.Windows.Forms.Form -Property @{ Size = N
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Data
Import-Module ActiveDirectory
$ctl_frm_aduserlist = New-Object System.Windows.Forms.Form -Property @{
Size = New-Object System.Drawing.Size(500,500)
StartPosition = "CenterScreen" }
$ctl_btn_generatepreview = New-Object System.Windows.Forms.Button -Property @{
Size = New-Object System.Drawing.Size(200,30)
Location = New-Object System.Drawing.Point(10,30)
Text = "Generate Preview" }
$ctl_frm_aduserlist.Controls.Add($ctl_btn_generatepreview)
$ctl_btn_generatepreview.Add_Click({ GeneratePreview })
function GeneratePreview(){
Write-Host "GO"
Get-ADUser -Identity "user123" -Properties Name,SamAccountName | select Name,SamAccountName
Write-Host "END" }
$ctl_frm_aduserlist.ShowDialog()
单击该按钮将仅执行两个“写入主机”cmdlet
如果我只在ISE控制台中执行单行Get ADUser,它就可以工作,我就可以得到用户对象。
当通过按钮触发时,为什么Get ADUser不工作
首先,我没有一个完整的解决方案,因为我不是WinForms方面的专家,请随意更正/完成此答案 据我所知,这个命令实际上是被执行的。您可以单步通过代码或
Write Host
-ing通过Get ADUser
收集的对象位进行检查,它将显示正确的信息:
函数GeneratePreview(){
获取ADUser-身份“某人”|编写主机
}
请注意,如果将写入主机
替换为写入输出
,它将不再工作
问题是,当您创建WinForms应用程序时,标准输出不再是控制台。我不知道它被重定向到哪里,但默认情况下它不可见。您需要指定要在控制台中使用写入主机查看数据,将其导出到文件(设置内容,导出Csv
,您可以命名)或将其显示在WinForm元素中:
我在表单中添加了一个新的文本框(在我的示例中称为$TextBox1),并更改了GeneratePreview,如下所示:
函数GeneratePreview(){
$user=获取ADUser“某人”
$TextBox1.Text=“$($user.name),$($user.samaccountname)”
}
请添加WinForms按钮的代码,以便在添加类型行后将GeneratePreview()-函数置于顶部。@LuttiCoelho代码在那里。@f6a4我将其放在那里,然后重试。在ISE中仍然不工作。默认输出是到主机控制台。在表单中,您没有告诉对象“去哪里”。通过管道将输出传输到“OutHost”以获得所需的结果。