2017-01-25 8 views
2

現在Powershellと、配列/配列リストとPSObjects/CustomObjectsの処理方法は非常に混同されています。Powershellは要素の数に応じて異なるデータ型を返します

ハイレベル:

私はCSVファイルをインポートしようとすると、特定の行「プレースホルダ」のエントリに挿入しています。これは実際にうまくいきます。私の唯一の問題は、CSVに1つの要素(行)Powershellしか含まれていない場合です。PsCustomObjectを作成します。複数の行がある場合、Powershellは配列を提供します。私の最初のアプローチの

$pConnectionsOnMpDevice += $MpObject 

(ワンました:

1要素

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

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

$pConnectionsOnMpDevice

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

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

n個の要素$ pConnectionsOnMpDevice `で最後に私は、要素を追加しよう使用する(FYI):

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

私は$pConnectionsOnMpDevice$MpObjectを追加しようとすると、私はエラーを以下の取得:

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 

私はそれが私がでArraylist$pConnectionsOnMpDeviceをキャストしようとしたhere

を説明したのと同じ問題だと仮定

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

しかし、まだ成功していません。

どのように要素を追加することができますか?

答えて

5

は、配列を返す値式を強制するために、配列の部分式演算子(@())を使用します。

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

I tried to cast $pConnectionsOnMpDevice to an Arraylist by:

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

キャストではありません。つまり、それは静的な呼び出しだ - PowerShellはどんな静的起動しますメソッドまたはプロパティの名前は"$pConnectionOnMpDevice"と同じです。

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

マティアス、 はあなたが助けるためにそんなにありがとう:あなたはキャスト操作をしたい場合

::を削除します。小さな変更が成功しました:) – cwa

関連する問題