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

PowerShell 5.1脚本:远程AD主机信息单行输出及CSV转换求助

PowerShell脚本修改方案(解决信息分行+CSV输入输出)

问题分析

原脚本通过三次独立的WMI查询分别输出网络、系统、BIOS信息,导致同一计算机的信息分散在多行表格中;同时使用文本重定向输出,无法生成标准CSV格式。

修改后的脚本

Function Get-CInfo {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true)]
        [string]$InputFile,
        [Parameter(Mandatory=$true)]
        [string]$OutputFile
    )

    # 读取输入文件,兼容TXT(每行一个计算机名)和CSV(列名需为ComputerName)
    $ComputerNames = if ($InputFile.EndsWith('.csv')) {
        Import-Csv -Path $InputFile | Select-Object -ExpandProperty ComputerName
    } else {
        Get-Content -Path $InputFile
    }

    $results = @()

    foreach ($Computer in $ComputerNames) {
        $Computer = $Computer.Trim()
        if ([string]::IsNullOrEmpty($Computer)) { continue }

        try {
            # 获取启用IP的网卡配置
            $netAdapters = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName $Computer -ErrorAction Stop | 
                Where-Object { $_.IpEnabled -eq $true }
            
            # 获取系统版本信息
            $os = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $Computer -ErrorAction Stop
            
            # 获取BIOS序列号
            $bios = Get-WmiObject -Class Win32_BIOS -ComputerName $Computer -ErrorAction Stop

            # 为每个网卡生成一条完整记录
            foreach ($adapter in $netAdapters) {
                $results += [PSCustomObject]@{
                    HostName     = $adapter.DNSHostName ?? $Computer
                    MACAddress   = $adapter.MACAddress
                    IPAddress    = $adapter.IPAddress -join ', '
                    OSVersion    = $os.Caption
                    SerialNumber = $bios.SerialNumber
                    Status       = 'Success'
                }
            }

            # 处理无启用IP网卡的情况
            if (-not $netAdapters) {
                $results += [PSCustomObject]@{
                    HostName     = $Computer
                    MACAddress   = $null
                    IPAddress    = $null
                    OSVersion    = $os.Caption
                    SerialNumber = $bios.SerialNumber
                    Status       = '无启用IP的网卡'
                }
            }

        } catch {
            Write-Warning "无法连接计算机: $Computer - 错误: $($_.Exception.Message)"
            # 记录失败信息
            $results += [PSCustomObject]@{
                HostName     = $Computer
                MACAddress   = $null
                IPAddress    = $null
                OSVersion    = $null
                SerialNumber = $null
                Status       = "失败: $($_.Exception.Message)"
            }
        }
    }

    # 导出为标准CSV文件
    $results | Export-Csv -Path $OutputFile -NoTypeInformation -Encoding UTF8
}

# 调用示例:
# 从TXT文件读取计算机列表,导出CSV
# Get-CInfo -InputFile "C:\Users\scott.hoffman.w.tsc\Desktop\scripts\get-cinfo-tools\comp-list.txt" -OutputFile "C:\path\to\comp-details.csv"

# 从CSV文件读取(CSV需包含ComputerName列)
# Get-CInfo -InputFile "C:\path\to\computers.csv" -OutputFile "C:\path\to\comp-details.csv"

关键改动说明

  • 统一信息展示:将三次WMI查询的结果合并到一个自定义对象中,确保同一计算机(或网卡)的所有信息在同一行记录中
  • CSV输入输出:
    • 输入支持TXT(每行一个计算机名)和CSV(列名为ComputerName)两种格式
    • 使用Export-Csv生成标准CSV文件,替代原有的文本重定向,方便后续数据分析
  • 异常处理增强:记录每台计算机的连接状态,失败时保留错误信息,便于排查问题
  • 多网卡兼容:一台计算机有多个启用IP的网卡时,每个网卡对应一条独立记录,避免信息丢失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:31:15