Winforms 获取由按钮触发的ADUser

Winforms 获取由按钮触发的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

我在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 = 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”以获得所需的结果。