Powershell根据元素的数量返回不同的数据类型

cwa*_*cwa 2 csv arrays powershell

目前我对Powershell以及它如何处理Arrays/ArrayLists和PSObjects/CustomObjects感到非常困惑.

高水平:

我正在尝试导入CSV文件并在特定行插入"占位符"条目.这实际上工作正常.我唯一的问题是,如果CSV只包含1个元素(行)Powershell创建一个PsCustomObject.如果有多行,Powershell会提供一个数组.

`$ pConnectionsOnMpDevice中的1个元素

$pConnectionsOnMpDevice  = ($pList | ?({$_.device -like "*$pDevice*"}))
($pConnectionsOnMpDevice).getType()

IsPublic IsSerial Name BaseType
True True PsCustomObject[] System.Object
Run Code Online (Sandbox Code Playgroud)

n元素 $pConnectionsOnMpDevice

$pConnectionsOnMpDevice  = ($pList | ?({$_.device -like "*$pDevice*"}))
($pConnectionsOnMpDevice).getType()

IsPublic IsSerial Name BaseType
True True Object[] System.Array
Run Code Online (Sandbox Code Playgroud)

最后我尝试添加一个元素:

$pConnectionsOnMpDevice += $MpObject
Run Code Online (Sandbox Code Playgroud)

(我的第一个方法之一是使用(FYI):

#$pConnectionsOnMpDevice.Insert($index,$match)
Run Code Online (Sandbox Code Playgroud)

如果我尝试添加$MpObject$pConnectionsOnMpDevice我收到以下错误:

Method invocation failed because [System.Management.Automation.PSObject] does not contain a method named 'op_Addition'.
At C:\Scripts\PS_GenerateMPConfig\PS_GenerateMPConfig_06_f.ps1:90 char:13
+             $pConnectionsOnMpDevice += $MpObject
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Addition:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
Run Code Online (Sandbox Code Playgroud)

我认为它与此处描述的问题相同

我想投$pConnectionsOnMpDevice一个Arraylist人:

[System.Collections.ArrayList]::$pConnectionsOnMpDevice  += $MpObject
Run Code Online (Sandbox Code Playgroud)

但仍然没有成功.

有没有人有一个如何添加元素的建议?

Mat*_*sen 5

使用array子表达式operator(@())强制值表达式返回一个数组:

$pConnectionsOnMpDevice  = @($pList | ?({$_.device -like "*$pDevice*"}))
Run Code Online (Sandbox Code Playgroud)

我试图通过以下方式将$ pConnectionsOnMpDevice转换为Arraylist:

[System.Collections.ArrayList]::$pConnectionsOnMpDevice  += $MpObject
Run Code Online (Sandbox Code Playgroud)

这不是演员,这是一个静态调用 - PowerShell将调用任何静态方法或属性具有相同的名称"$pConnectionOnMpDevice".

::如果你想要一个演员操作,删除它:

$array = 1,2,3
$arraylist = [System.Collections.ArrayList]$array
Run Code Online (Sandbox Code Playgroud)