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

PowerShell脚本获取iDrac IP写入CSV失败问题求助

解决PowerShell脚本中iDrac IP字段提取失败的问题

问题原因

你当前脚本中「iDrac IP」字段为空,核心原因是racadm.exe getniccfg的输出是纯文本格式,不是PowerShell可直接解析的对象,因此无法用Select-Object -expandproperty "IP Address"这种对象属性访问的方式提取IP地址。

解决方案

通过文本正则匹配的方式提取IP地址,替换原脚本中「iDrac IP」字段的代码:

修改后的关键代码段

# 执行racadm命令获取iDrac配置的文本输出
$racadmOutput = Invoke-Command -ComputerName $i -ScriptBlock { racadm.exe getniccfg }
# 用正则表达式匹配"IP Address:"后的IP地址
$iDracIp = if ($racadmOutput -match 'IP Address:\s+(\d+\.\d+\.\d+\.\d+)') { $matches[1] } else { "N/A" }
# 将提取到的IP添加到对象中
$array | Add-Member -type NoteProperty -Name "iDrac IP" -Value $iDracIp

完整优化脚本(含性能优化)

原脚本存在重复调用WMI命令的冗余,以下是优化后的完整版本:

$logregion = "TEST"
$host.ui.RawUI.WindowTitle = "IP FQDN - $logRegion"  

$currentdate = get-date -f yyyy-MM-dd  

function get_info_func {  
    $a = Get-Content "$PSScriptRoot\servers.txt"  
    $get_info_array = @()  

    foreach ($i in $a){  
        write-host $i  
        $array = New-Object PSObject  

        # 一次性获取所有需要的WMI对象,减少远程调用次数
        $computerSystem = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $i
        $networkConfig = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName $i | Where-Object { $_.IPEnabled }
        $os = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $i
        $systemEnclosure = Get-WmiObject -Class WIN32_systemenclosure -ComputerName $i

        $array | Add-Member -type NoteProperty -Name "Name From List" -Value $i
        $array | Add-Member -type NoteProperty -Name "Host Name" -Value $computerSystem.dnshostname
        $array | Add-Member -type NoteProperty -Name "Domain" -Value $computerSystem.Domain
        $array | Add-Member -type NoteProperty -Name "IPAddress" -Value ([string]$networkConfig.IPAddress)
        $array | Add-Member -type NoteProperty -Name "IpSubnet" -Value ([string]$networkConfig.IpSubnet)
        $array | Add-Member -type NoteProperty -Name "DefaultIPGateway" -Value ([string]$networkConfig.DefaultIPGateway)
        $array | Add-Member -type NoteProperty -Name "DNSServerSearchOrder" -Value ([string]$networkConfig.DNSServerSearchOrder)
        $array | Add-Member -type NoteProperty -Name "Mac Address" -Value ([string]$networkConfig.MACAddress)
        $array | Add-Member -type NoteProperty -Name "OS" -Value $os.Caption
        $array | Add-Member -type NoteProperty -Name "MODEL" -Value $computerSystem.Model
        $array | Add-Member -type NoteProperty -Name "Serial Number" -Value $systemEnclosure.SerialNumber

        # 提取iDrac IP地址
        $racadmOutput = Invoke-Command -ComputerName $i -ScriptBlock { racadm.exe getniccfg }
        $iDracIp = if ($racadmOutput -match 'IP Address:\s+(\d+\.\d+\.\d+\.\d+)') { $matches[1] } else { "N/A" }
        $array | Add-Member -type NoteProperty -Name "iDrac IP" -Value $iDracIp

        $get_info_array += $array  
    }  

    $get_info_array | Export-Csv "$PSScriptRoot\IPinfo_$($logregion)_$(get-date -f yyyy-MM-dd).csv" -NoTypeInformation -append  
}

& get_info_func  

说明

  • 正则表达式'IP Address:\s+(\d+\.\d+\.\d+\.\d+)'会精准匹配racadm getniccfg输出中「IP Address:」后的IP地址
  • 若匹配失败(比如racadm命令执行出错),会返回「N/A」避免CSV中出现空值
  • 优化后的脚本减少了重复的远程WMI调用,提升了执行效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:34:50