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

如何导出特定OU中计算机的描述及最后登录用户至CSV文件?

获取特定OU中计算机列表并导出含描述与最后登录用户的CSV

问题分析

你的需求是从指定OU(OU=Computers - Disabled,DC=XXXXX,DC=com)筛选名称以LN-开头的计算机,收集其名称、描述和最后登录用户信息,最终导出为CSV文件。原代码存在几个关键问题:

  • 提前定义的$userName因$machine未初始化无法获取有效数据
  • 重复调用Get-ADComputer导致效率低下
  • 循环中输出独立对象,无法生成CSV所需的结构化数据
  • 未处理计算机离线时Get-CimInstance调用失败的情况

修正后的代码

# 定义目标OU和计算机名称过滤规则
$targetOU = "OU=Computers - Disabled,DC=XXXXX,DC=com"
$computerNameFilter = "(Name=LN-*)"

# 一次性获取目标OU内符合条件的计算机,仅加载需要的属性
$computers = Get-ADComputer -LDAPFilter $computerNameFilter -SearchBase $targetOU -Properties Description

$results = foreach ($computer in $computers) {
    # 尝试获取最后登录用户,处理计算机离线/无法访问的情况
    $lastLoggedOnUser = try {
        (Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName $computer.Name -ErrorAction Stop).UserName
    } catch {
        "计算机离线或无法访问"
    }

    # 生成结构化的自定义对象,确保CSV字段统一
    [PSCustomObject]@{
        "计算机名称" = $computer.Name
        "描述" = $computer.Description
        "最后登录用户" = $lastLoggedOnUser
    }
}

# 导出为CSV文件,指定编码避免中文乱码,移除多余类型信息
$results | Export-Csv -Path "C:\DisabledComputers.csv" -NoTypeInformation -Encoding UTF8

代码说明

  • 高效获取AD数据:通过-Properties Description仅加载所需属性,避免Properties *加载冗余数据的性能浪费
  • 离线容错处理:用try/catch捕获远程调用错误,当计算机无法访问时返回明确提示
  • 结构化输出:每个循环生成包含固定字段的自定义对象,保证导出的CSV格式规范
  • 编码优化:添加-Encoding UTF8防止中文乱码,-NoTypeInformation移除CSV开头的类型注释行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:45:43