Я предполагаю, что это зависит от того, сколько записей уже есть в вашем лог-файле.
Если есть только одна запись, Import-Csv
вернет одну PSCustomObject
(обратите внимание, я использую ConvertFrom-Csv
ниже, но Import-Csv
работает так же):
PS> $x = ConvertFrom-Csv "aaa, bbb, ccc`r`nxxx, yyy, zzz"
PS> $x.GetType().FullName
System.Management.Automation.PSCustomObject
, но если в файле csv есть несколько строк, вы получите массив Object
s:
PS> $x = ConvertFrom-Csv "aaa, bbb, ccc`r`nppp, qqq, rrr`r`nxxx, yyy, zzz"
PS> $x.GetType().FullName
System.Object[]
В первом случае PowerShell сообщает, что не знает, как добавить новую запись в PSCustomObject
, поскольку для этого типа не определен метод op_Addition
.
Вы можете преобразовать результат ConvertFrom-Csv / Import-Csv в массив несколькими способами:
PS> $x = @( ConvertFrom-Csv "aaa, bbb, ccc`r`nxxx, yyy, zzz" )
PS> $x.GetType().FullName
System.Object[]
PS> [object[]] $x = ConvertFrom-Csv "aaa, bbb, ccc`r`nxxx, yyy, zzz"
PS> $x.GetType().FullName
System.Object[]
или, как вы обнаружили:
PS> [System.Collections.ArrayList] $x = ConvertFrom-Csv "aaa, bbb, ccc`r`nxxx, yyy, zzz"
PS> $x.GetType().FullName
System.Collections.ArrayList
И PowerShell знает, как сделать +=
на всех этих типах ...