我有一个大数组(从Excel电子表格导入),其中有一行“总计”,我想要删除它。它总是在数组的最后一项。我尝试找到一种方法来仅删除最后一个数组项,但无法实现。下面是数据和代码示例:
我有一个大数组(从Excel电子表格导入),其中有一行“总计”,我想要删除它。它总是在数组的最后一项。我尝试找到一种方法来仅删除最后一个数组项,但无法实现。下面是数据和代码示例:
$data = Import-XLSX -Path "C:\Pathtofile\spreadsheet.xlsx" -Sheet "SheetName" -RowStart 3
$data | ? {$_.Server -eq "Total"}
Server : Total
VLAN :
IP Address :
CPU : 84
RAM : 313
C:\ : 2840
D:\ : 17950
OS Version :
OS Edition :
SQL Version :
SQL Edition :
Datastore :
Reboot :
Notes :
我希望能够从数组中删除这一行。我已经尝试了以下方法:
$data.Remove("Total")
Exception calling "Remove" with "1" argument(s): "Collection was of a fixed size."
At line:1 char:1
+ $ImportCSV.Remove("Total")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : NotSupportedException
如果我检查数组类型,我会得到以下结果:
$data.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
如果我这样重新输入对象,我会得到以下结果:
$data = {$data}.Invoke()
$data.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Collection`1 System.Object
$data.Remove("Total")
False
这并不会删除该项。我错过了什么?
$data | Where-Object ...
命令会创建一个 新 数组,因为任何输出多于 1 个对象的管道都会这样做。即使你将结果分配回同一个变量,它仍然是一个新数组,就像这个例子所演示的一样:$a = 1, 2, 3; $aToo = $a; $a = $a | ? { $_ -ne 2 }; 'new $a:'; $a; 'original $a:'; $aToo
。 - mklement0