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

PowerShell脚本导入CSV数据非字符串字段全为0,求排查

问题排查与修复方案

核心错误点

  • 错误的类型强制转换:把计算机名、IP地址这类字符串字段强行转成[int],非数字内容转整数失败后默认返回0,这就是计算机名显示0的原因;IP地址带小数点,根本无法转成整数,同样会返回0。
  • 日期类型语法错误:日期转换时用了不存在的[LastReportedStatusDate]类型,应该用PowerShell内置的[DateTime]。
  • 列名不匹配问题:转字符串后字段空白,大概率是脚本里引用的CSV列名和实际文件里的列名不一致(比如CSV里是Computer Name,但脚本里写的$_.ComputerName)。

修复后的脚本

# SU tile
$data = Import-Csv -Path "C:\Temp\file.csv" -Delimiter ','
$data | Select-Object @{
    Name = "Domain";
    Expression ={ [string]$_.Domain }
},
@{
    Name = "Name";
    Expression ={ [string]$_.Name }
},
@{
    Name = "Computer Name";
    Expression ={ [string]$_.ComputerName } # 计算机名是字符串,禁止转int
},
@{
    Name = "IP Address";
    Expression ={ [string]$_.IPAddress } # IP地址是字符串,禁止转int
},
@{
    Name = "Approved Updates Installed";
    Expression ={ 
        # 先验证是否为纯数字,避免转换失败返回0
        if ($_.ApprovedUpdatesInstalled -match '^\d+$') { [int]$_.ApprovedUpdatesInstalled }
        else { $_.ApprovedUpdatesInstalled } # 保留原始内容,或按需调整
    }
},
@{
    Name = "Last Reported Status Date";
    Expression ={ 
        # 使用正确的DateTime类型解析日期
        [DateTime]::ParseExact($_.LastReportedStatusDate, 'dd/MM/yyyy', [Globalization.CultureInfo]::CreateSpecificCulture('en-GB'))
    }
},
@{
    Name = "Make";
    Expression ={ [string]$_.Make }
} | ConvertTo-Json # 需要转JSON时添加此管道

额外检查项

  1. 核对CSV列名:打开CSV文件,确认实际列名和脚本里的$_.XXX完全匹配(大小写不影响,但空格、拼写必须一致)。
  2. 日期容错处理:如果CSV里日期格式不统一,ParseExact会报错,可改用TryParse容错:
    Expression ={ 
        $date = $null
        if ([DateTime]::TryParse($_.LastReportedStatusDate, [Globalization.CultureInfo]::CreateSpecificCulture('en-GB'), [Globalization.DateTimeStyles]::None, [ref]$date)) {
            $date
        } else {
            $_.LastReportedStatusDate # 转换失败时保留原始值
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:25:13