PowerShell中Import-Excel单值计数为空的问题求助
问题解决方法
问题原因
当筛选结果仅1条时,Import-Excel返回的是单个PS对象,而非数组。单个对象没有.count属性,因此$Skipped.count会返回空;当结果多于1条时,返回的是数组,数组自带.count属性,所以能正常获取计数。
解决方式
方式一:强制转为数组
用@()将筛选结果包裹,确保无论结果数量多少都以数组形式存储,这样.count属性始终有效:
$Skipped = @(Import-excel -path 'C:\temp\IM April Test Migration Stuff\Sharegate Task Reports\im3.xlsx' | where 'Status' -eq 'Skipped' | select title, Type, status) $report = New-Object psobject $report | Add-Member -MemberType NoteProperty -Name Skipped -Value $Skipped.count write-host $report
方式二:直接统计数量(更高效)
如果只需要计数,不需要保存所有匹配的对象,用Measure-Object直接统计,避免数组转换的额外开销:
$skippedCount = Import-excel -path 'C:\temp\IM April Test Migration Stuff\Sharegate Task Reports\im3.xlsx' | Where-Object 'Status' -eq 'Skipped' | Measure-Object | Select-Object -ExpandProperty Count $report = [PSCustomObject]@{ Skipped = $skippedCount } Write-Host $report
注:[PSCustomObject]是创建自定义对象更简洁的方式,替代New-Object+Add-Member的写法。
内容的提问来源于stack exchange,提问作者Dominic Gibson
相关产品推荐
相关产品推荐

