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

时间:2017-01-25 12:33:29

标签: arrays powershell csv

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

高级别:

我正在尝试导入CSV文件并在特定行插入“占位符”条目。这实际上工作正常。我唯一的问题是,如果CSV只包含1个元素(行)Powershell创建$pConnectionsOnMpDevice = ($pList | ?({$_.device -like "*$pDevice*"})) ($pConnectionsOnMpDevice).getType() IsPublic IsSerial Name BaseType True True PsCustomObject[] System.Object 。如果有多行,Powershell会提供一个数组。

`$ pConnectionsOnMpDevice

中的1个元素
$pConnectionsOnMpDevice

$pConnectionsOnMpDevice = ($pList | ?({$_.device -like "*$pDevice*"})) ($pConnectionsOnMpDevice).getType() IsPublic IsSerial Name BaseType True True Object[] System.Array

中的元素
$pConnectionsOnMpDevice += $MpObject

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

#$pConnectionsOnMpDevice.Insert($index,$match)

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

$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 ,我会收到以下错误:

$pConnectionsOnMpDevice

我认为它与描述here

的问题相同

我尝试通过以下方式将Arraylist投射到[System.Collections.ArrayList]::$pConnectionsOnMpDevice += $MpObject

reshape

但仍然没有成功。

有没有人建议我如何添加元素?

1 个答案:

答案 0 :(得分:5)

使用数组子表达式运算符(@())强制值表达式返回数组:

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

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

[System.Collections.ArrayList]::$pConnectionsOnMpDevice  += $MpObject

这不是强制转换,这是静态调用 - PowerShell将调用与"$pConnectionOnMpDevice"同名的任何静态方法或属性。

如果您想进行演员操作,请删除::

$array = 1,2,3
$arraylist = [System.Collections.ArrayList]$array