首页 > 解决方案 > 使用 PowerShell 计算数组中的列数

问题描述

我有以下代码:

$array = Get-Process

现在,我想计算列数。我努力了:

$array.Columns.Count
$array.Columns

一切都没有运气。

我应该怎么做才能获得正确的列数?那应该是8。

<<添加于 2021 年 1 月 27 日:>>

我已将代码修改为:

$Processes = @(Get-Process | Select-Object -Property Name, Description, ProductVersion, @{Name="Application";Expression={$_.Description + " " + $_.ProductVersion}},@{Name="Executable";Expression={(($_."Path").split("\"))[-1]}} |Where {$_.Executable})
$Array     = @()
$Record    = [ordered] @{"Name"         = "";
                         "Application"  = ""}

ForEach ($ProcesName in $Processes)
{
 $Record."Name"        = $ProcesName.Name
 $Record."Application" = $ProcesName.Application
 $objRecord            = New-Object PSObject -Property $Record
 $Array               += $objRecord
}
Clear-Host
Write-Host "Number of columns: $($Array.Column.Count)"
Write-Host "Number rows:       $($Array.Count)"

结果是一样的:列和行都是一样的。这是不正确的。我想在具有更多列的新脚本中使用该技术。

<<2021年1月27日追加的结束部分>>

反馈表示赞赏。

诚挚的问候, TheStingPilot

标签: powershell

解决方案


$array是类型对象的数组System.Diagnostics.Process。没有这样的列。这些对象具有您可以选择使用$array | ft或作为列表显示在列中的属性$array | fl *。您可以像这样计算属性:

$array | Get-Member -MemberType Property | measure

如果您希望答案为 8,那么您可以这样做:

$array | select Handles, NPM, PM, WS, CPU, Id, SI, Name | Get-Member -MemberType NoteProperty | measure

推荐阅读