繁体   English   中英

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

[英]Powershell returns different datatype depending on number of elements

当前,我对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

$pConnectionsOnMpDevice n元素

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

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

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

$pConnectionsOnMpDevice += $MpObject

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

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

如果我尝试将$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转换为Arraylist

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

但是仍然没有成功。

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

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

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

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

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

这不是"$pConnectionOnMpDevice"静态调用"$pConnectionOnMpDevice"将调用与"$pConnectionOnMpDevice"同名的任何静态方法或属性。

如果要进行强制转换操作,请删除::

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM