我有一个大数组(从 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
这不会删除项目。我在这里缺少什么?
最佳答案
数组在 PowerShell 中是不可变的,您不能在其中添加或删除元素。你可以做的是:
a) 创建一个新数组并过滤掉不需要的数组(例如使用 -ne
):
$data = $data | ? {$_.Server -ne "Total"}
或
b) 按索引选择直到最后一个元素的所有内容(可能在大数组上资源匮乏,我不知道):
$data = $data[0..($data.Count-2)]
或
c) 投到
[System.Collections.ArrayList]
,这是可变的,然后从中删除一个元素:$data = [System.Collections.ArrayList]$data
$data.RemoveAt($data.Count-1)
关于arrays - 从 powershell 数组/集合/哈希表中删除一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40274422/