我已使用以下module将Excel工作表导入PowerShell:
我想计算列数,所以我使用了以下功能:
$columns = @(Import-Excel -Path "D:\Qlik\AccessRules\Roster\RosterTest-Jan.xlsx" -StartRow 1 -EndRow 1 -NoHeader)
现在我认为该数组具有51个键。但是我怎么算呢?无论我尝试什么,我所看到的都是1。
我尝试过:
$columns.Count
$columns.PSObject.BaseObject.Count
什么都行不通,请提出任何想法。
答案 0 :(得分:2)
tl;博士:
@($columns.psobject.properties).Count
您要查找的是对象的 properties 的个计数,可以通过 .psobject.properties
集合完成,可在PowerShell中的 any 对象上使用-并且因此在[pscustomobject]
返回的Import-Excel
实例上也可用-作为 reflection < / em>功能,可让您检查给定对象的属性。
计数这些属性非常棘手,因为 .psobject.properties
-[System.Management.Automation.PSMemberInfoIntegratingCollection[System.Management.Automation.PSPropertyInfo]]
返回的特定集合数据类型-意外地既没有实现.Count
也没有实现.Length
属性。
解决方法是使用数组子表达式运算符@(...)
收集单个属性作为常规PowerShell数组([object[]]
,然后可以在其上致电.Count
:
@($columns.psobject.properties).Count
请参见this GitHub issue,该文档要求在.Count
返回的集合上实现.psobject.properties
属性,以使此解决方法变得不必要。
答案 1 :(得分:1)
这似乎已经完成了。
$columns = (($columns[0].psobject.properties).Count).Count