添加到导入 Excel 数组

问题描述 投票:0回答:1

我有一个通过 Import-Excel 命令导入 PowerShell 的 Windows 扩展列表。

Excel 文件的结构如下:

| Ext     | DotExt  | Application                  | Active   | Inactive | Skipped |
| ------- | ------- | ---------------------------- | -------- | -------- | ------- |
| AAC     | .AAC    |  Windows audio               | 0        | 0        | 0       |
| ACCDB   | .ACCDB  |  MS Access database file     | 0        | 0        | 0       |
| ACCDE   | .ACCDEB |  MS Access execute-only file | 0        | 0        | 0       |
| PDF     | .PDF    |  Adobe Acrobat File          | 0        | 0        | 0       |
| DOCX    | .DOCX   |  Microsoft Word              | 0        | 0        | 0       |
...
$Win_FileExtsList = Import-Excel -Path $Win_FileExtsListExcel

$Win_FileExtsList.GetType() produces:

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

我将 $Win_FileExtsList 传递给一个函数,该函数读取文件列表以计算该类型的扩展名的数量。

传入函数的文件定义如下:

function Set-Extensions {
    Param (
        [Parameter(Mandatory=$true, Position=0)]
        [array] $FileExtsList,
        ...

如果扩展名不存在,我想将其添加到数组中,以便将其包含在计数中。此计数稍后将添加到 Excel 文件中。

我定义了一个与 Excel 文件匹配的新数组,并希望将其添加到列表中。

$New = ([array]@{Ext=$DocExt;DotExt=$DotExt;Application="update";Active=1;Inactive=0;Skipped=0})

当我尝试将 $New 添加到 $FileExtsList ($Win_FileExtsList) 时,没有任何反应。其他时候当 我尝试将其添加到列表中,它以哈希表的形式出现。

我尝试过 $FileExtsList += $New 以及所有可能的组合,例如 $FileExtsList.Add($New)。

变量都是同一类型:

$FileExtsList.GetType()
$Win_FileExtsList.GetType()
$New.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array
True     True     Object[]                                 System.Array
True     True     Object[]                                 System.Array

我只是不知道我错过了什么。我预计不会添加很多扩展,因此性能不应该成为问题。

arrays powershell
1个回答
0
投票

如果您想向数组添加一个项目,那么该项目应该与属性匹配。您可以像这样创建自定义对象:

$NewItem = [PSCustomObject][Ordered]@{Ext=$DocExt;DotExt=$DotExt;Application="update"; Active=1;Inactive=0;Skipped=0}

然后将其添加到现有数组中,如下所示(假设您的数组名称是 $Arr):

$Arr += $NewItem
© www.soinside.com 2019 - 2024. All rights reserved.