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

如何在仅剩余一个PSObject时获取其Count值?

问题场景

我通过以下代码生成PSObject集合:

$Installs = foreach($CVAFile in $CVAFiles)
{
  $CVAFileContents = get-content $($CVAFile).fullname -raw

  $CVAFileContents -match '(?s).*?\[General\].*?SystemMustBeRebooted=(\d).*?\[Install Execution\].*?SilentInstall=(.*?)\n.*' | out-null

  $s = $CVAFile.fullname.split("\")[-1].split(".")[0]  

  [pscustomobject]@{
    SP            = $s
    NeedsRestart  = $Matches[1]
    SilentInstall = $Matches[2]
  }
}

随后将其导出为CSV用于后续恢复:

$Installs | export-csv $ResumeHPImagingAssistantInstallsCSVFile -notypeinformation

后续导入CSV时使用:

$Installs = import-csv $ResumeHPImagingAssistantInstallsCSVFile

但发现:当CSV包含2条及以上数据时,$Installs是System.Object[]数组类型,具备Count属性;但仅剩余1条数据时,$Installs变为单个System.Management.Automation.PSCustomObject对象,丢失了Count等集合属性。

需要实现无论$Installs变量中包含0个、1个还是多个PSObject,都能稳定获取其数量的方法。


解决方案

以下是几种可靠的实现方式:

方法1:强制将导入结果转为数组

在导入CSV时,用数组运算符@()包裹命令,强制结果始终为数组类型,哪怕只有0或1个元素:

$Installs = @(import-csv $ResumeHPImagingAssistantInstallsCSVFile)

之后直接通过$Installs.Count获取数量即可:

  • 0条数据时返回0
  • 1条数据时返回1
  • 多条数据时返回对应元素数

方法2:使用Measure-Object统计数量

不管$Installs是单个对象还是数组,都可以用Measure-Object直接统计元素数量:

$itemCount = ($Installs | Measure-Object).Count

这种方法无需修改导入逻辑,直接对已存在的$Installs变量操作即可,结果准确对应实际元素数量。

方法3:利用PowerShell的类型判断

如果不想修改导入或额外执行命令,也可以通过类型判断来获取数量:

$itemCount = if ($null -eq $Installs) {
    0
} elseif ($Installs -is [array]) {
    $Installs.Count
} else {
    1
}

不过这种方法代码量稍大,前两种方案更简洁高效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:52:38