PowerShell屏幕输出与CSV输出不一致问题求助
PowerShell脚本CSV输出异常问题解决记录
问题现象
PowerShell脚本出现输出异常:CSV文件仅显示OS为N/A的服务器,但屏幕输出包含所有Windows服务器的OS信息。
初始代码
$servers = Get-Content "ServerList.txt" $results = foreach ($server in $servers) { $result1 = Test-Connection "$server.domain1.com" -Count 1 -Quiet if ($result1) { $osInfo = Get-WmiObject -ComputerName $server -Class Win32_OperatingSystem -ErrorAction SilentlyContinue $ipAddress = (Resolve-DnsName $server -ErrorAction SilentlyContinue | Select-Object -First 1).IPAddress $output = [PSCustomObject]@{ Server = $server Domain = "domain1.com" Status = "Up" OS = if ($osInfo) { ($osInfo.Name -replace '^Microsoft\s+Windows\s+', '') -replace '\|.*$' } else { "N/A" } IP = if ($ipAddress) { $ipAddress } else { "N/A" } } Write-Host "`t${server}: $($output.Status) - $($output.OS) - $($output.IP)" $output } else { Write-Host "`t${server}: Down" } } $results | Sort-Object Domain | Export-Csv "ServerList.csv" -NoTypeInformation
当时无法定位并修复该问题。
问题解决
添加日志功能与try/catch异常处理后,问题已解决,同时生成的错误日志也便于排查问题。感谢@mclayton的建议。
更新后的代码
$servers = Get-Content "ServerList2.txt" $logFile = "ServerList2.log" $csvFile = "ServerList2.csv" $results = foreach ($server in $servers) { Write-Host "`nTesting server: $server" $output = [PSCustomObject]@{ Server = $server Domain = "domain1.com" Status = "Down" OS = "N/A" IP = "N/A" } # Test connection $result1 = Test-Connection "$server.domain1.com" -Count 1 -Quiet if ($result1) { $output.Status = "Up" # Resolve DNS name try { $dnsResult = Resolve-DnsName $server -ErrorAction Stop | Select-Object -First 1 $output.IP = $dnsResult.IPAddress } catch { Write-Warning "Failed to resolve DNS name for server ${server}: $_" Add-Content $logFile "$(Get-Date) - Failed to resolve DNS name for server ${server}: $_" } # Get OS info try { $osInfo = Get-WmiObject -ComputerName $server -Class Win32_OperatingSystem -ErrorAction Stop $output.OS = ($osInfo.Name -replace '^Microsoft\s+Windows\s+', '') -replace '\|.*$' } catch { Write-Warning "Failed to get OS info for server ${server}: $_" Add-Content $logFile "$(Get-Date) - Failed to get OS info for server ${server}: $_" } Write-Host "`t$($output.Server): $($output.Status) - $($output.OS) - $($output.IP)" } else { Write-Host "`t$($output.Server): $($output.Status)" } $output } $results | Export-Csv $csvFile -NoTypeInformation -Encoding UTF8 -Append -Force -Delimiter ',' Write-Host "`nResults written to $csvFile"
内容的提问来源于stack exchange,提问作者Red Boy33
相关产品推荐
相关产品推荐

