You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell实现ADSI查询并导出用户属性到CSV

解决AD用户Terminal Services属性导出CSV的问题

你的代码核心问题是:foreach循环里先输出了仅包含Name和GivenName的对象,之后单独调用InvokeGet获取的属性值并没有被整合到输出对象中,最终CSV里只会有前两个字段,TS相关属性完全没被写入。

推荐方案:直接用Get-ADUser获取所有需要的属性

不需要借助ADSI,Get-ADUser可以直接读取这些Terminal Services相关的AD属性,只需在-Properties参数里指定对应的LDAP属性名即可:

  • AllowLogon 对应LDAP属性名:allowLogon
  • MaxConnectionTime 对应LDAP属性名:maxConnectionTime
  • TerminalServicesWorkDirectory 对应LDAP属性名:terminalServicesWorkDirectory

修正后的完整代码:

# 指定要查询的OU路径
$OU = "OU=Accounts,DC=domain,DC=local"

# 一次性获取所有需要的属性,避免重复查询AD
$Output = Get-ADUser -Filter * -SearchBase $OU -Properties allowLogon, maxConnectionTime, terminalServicesWorkDirectory |
    Select-Object Name, GivenName, 
        @{Name='AllowLogon'; Expression={$_.allowLogon}},
        @{Name='MaxConnectionTime'; Expression={$_.maxConnectionTime}},
        @{Name='TerminalServicesWorkDirectory'; Expression={$_.terminalServicesWorkDirectory}}

# 导出到CSV,添加-NoTypeInformation避免生成多余的类型头
$Output | Export-CSV C:\Temp\Output.csv -NoTypeInformation

方案优势

  1. 提升效率:原代码先批量获取用户,再逐个调用Get-ADUser属于重复查询AD,此方案一次性完成所有查询,大幅减少AD请求次数。
  2. 属性映射清晰:通过计算属性将AD返回的LDAP属性名转换成你需要的显示名称,确保CSV列名符合预期。
  3. 输出更规范:加入-NoTypeInformation参数,避免CSV开头生成多余的类型信息。

若坚持使用ADSI的修正版

如果必须用ADSI方式获取属性,需要将属性值整合到同一个输出对象中,示例代码如下:

$OU = "OU=Accounts,DC=domain,DC=local"
$Accounts = Get-ADuser -Filter * -Searchbase $OU

$Output = ForEach($Account in $Accounts){
    # 获取基础用户信息
    $adUser = Get-ADUser -Identity $Account -Properties Name, GivenName
    # 用ADSI绑定用户对象
    $userADSI = [ADSI]("LDAP://" + $Account.distinguishedname)
    
    # 创建自定义对象整合所有属性
    [PSCustomObject]@{
        Name = $adUser.Name
        GivenName = $adUser.GivenName
        AllowLogon = $userADSI.psbase.InvokeGet("AllowLogon")
        MaxConnectionTime = $userADSI.psbase.InvokeGet("MaxConnectionTime")
        TerminalServicesWorkDirectory = $userADSI.psbase.InvokeGet("TerminalServicesWorkDirectory")
    }
}

$Output | Export-CSV C:\Temp\Output.csv -NoTypeInformation

此方式每个用户需两次查询AD,效率低于直接使用Get-ADUser,仅推荐在特殊场景下使用。

内容的提问来源于stack exchange,提问作者closedcasketfuneral

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:42:39