我有一个通过 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
我只是不知道我错过了什么。我预计不会添加很多扩展,因此性能不应该成为问题。
如果您想向数组添加一个项目,那么该项目应该与属性匹配。您可以像这样创建自定义对象:
$NewItem = [PSCustomObject][Ordered]@{Ext=$DocExt;DotExt=$DotExt;Application="update"; Active=1;Inactive=0;Skipped=0}
然后将其添加到现有数组中,如下所示(假设您的数组名称是 $Arr):
$Arr += $NewItem