gpt4 book ai didi

arrays - 从 powershell 数组/集合/哈希表中删除一行

转载 作者:行者123 更新时间:2023-12-04 09:06:10 24 4
gpt4 key购买 nike

我有一个大数组(从 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com