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

PowerShell脚本导出域内计算机本地用户数据至CSV格式异常求助

解决PowerShell导出CSV列混乱的问题

我明白你遇到的困扰——用Add-Content导出的CSV所有内容挤在同一列,这是因为Add-Content只是把文本直接写入文件,不会自动处理CSV的格式规则(比如字段分隔、引号包裹特殊字符)。正确的做法是创建自定义对象存储数据,再用Export-Csv命令导出,它会自动帮你生成规范的CSV结构。

下面是修改后的完整脚本,我会一步步解释关键改进点:

Import-Module ActiveDirectory
$ErrorActionPreference = "SilentlyContinue"

# 获取所有启用的域计算机
$Computers = Get-ADComputer -Filter { Enabled -eq $True }
$OutputPath = "$Env:Temp"
$OutputFile = Join-Path $OutputPath "LocalAdminsReport.csv"

# 初始化空数组,用来存储所有结果对象
$reportData = @()

foreach ($Computer in $Computers) {
    $ComputerName = $Computer.DNSHostName
    $Connectivity = Test-Connection -ComputerName $ComputerName -Count 1 -Quiet

    if ($Connectivity) {
        Write-Host "Getting local users from $ComputerName"
        # 用Get-CimInstance替代Get-WmiObject(更现代、高效)
        $LocalUsers = Invoke-Command -ComputerName $ComputerName {
            Get-CimInstance -Class Win32_UserAccount -Filter "LocalAccount='True'"
        }

        foreach ($LocalUser in $LocalUsers) {
            # 为每个本地用户创建自定义对象,匹配CSV列
            $userEntry = [PSCustomObject]@{
                ComputerName          = $ComputerName
                ComputerStatus        = "Online"
                LocalUserName         = $LocalUser.Name
                LocalUserEnabled      = $LocalUser.Enabled
                LocalUserDescription  = $LocalUser.Description
            }
            # 将对象添加到结果数组
            $reportData += $userEntry
        }
    }
    else {
        Write-Host "$ComputerName Status Offline"
        # 为离线电脑创建一条空数据的对象
        $offlineEntry = [PSCustomObject]@{
            ComputerName          = $ComputerName
            ComputerStatus        = "Offline"
            LocalUserName         = $null
            LocalUserEnabled      = $null
            LocalUserDescription  = $null
        }
        $reportData += $offlineEntry
    }
}

# 一次性导出所有数据到CSV,-NoTypeInformation去掉多余的类型头
$reportData | Export-Csv -Path $OutputFile -NoTypeInformation -Encoding UTF8

Write-Host " "
Write-Host "========================================"
Write-Host "Report Path: $OutputFile "
Write-Host "========================================"

关键改进说明:

  • 用自定义对象存储数据:每个条目(不管是在线用户还是离线电脑)都被封装成[PSCustomObject],对象的属性名和你需要的CSV列名完全对应,Export-Csv会自动把这些属性映射成CSV的列。
  • 避免逐行写入文件:先把所有数据存入数组,最后一次性导出,比逐行追加更高效,也避免了格式错误。
  • 替换Get-WmiObject为Get-CimInstance:CIM是WMI的现代替代方案,兼容性更好,性能也更优,推荐使用。
  • 规范CSV格式:Export-Csv会自动处理字段分隔符、引号包裹(比如包含逗号的描述),生成符合规范的CSV文件,不会出现内容挤在一列的问题。

额外注意事项:

  • 确保运行脚本的账号有域管理员权限,以及访问远程电脑的WMI/CIM权限。
  • 如果需要覆盖已有文件,Export-Csv默认会提示确认,你可以加-Force参数强制覆盖。
  • 用-Encoding UTF8确保导出的CSV支持中文等特殊字符。

内容的提问来源于stack exchange,提问作者Zack-SysAdmin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:57:39