4

コレクション ハッシュテーブル アイテムの名前と値のペアを CSV にエクスポートしようとしています。コードの select-object 部分の正しい構文が見つかりません。CSV ファイルに Url と Owner の列が含まれるようにします。助けてくれてありがとう

[System.Collections.ArrayList]$collection = New-Object System.Collections.ArrayList($null)
$SiteInfo = @{};

$SiteInfo.Url = "http://some.url.com";
$SiteInfo.Owner = "Joe Smith";
$collection.Add($SiteInfo);

$SiteInfo.Url = "http://another.url.com";
$SiteInfo.Owner = "Sally Jones";
$collection.Add($SiteInfo);


$collection | foreach{
    $hashTableDate = $_;
    $hashTableDate | Select-Object -Property Url, Owner;
}| Export-Csv  "C:\UsageReport.csv" -NoTypeInformation -Encoding UTF8 -Delimiter '|'

# results: file is empty :(
4

1 に答える 1

10

PSObject に変換してから CSV にエクスポートする

そのすべての「foreach」は必要ありません。ハッシュを PSObject に変換してからエクスポートするだけです!

この例では、ArrayListを使用して HashTable を格納し、その ArrayList を CSV にエクスポートします。

[System.Collections.ArrayList]$collection = New-Object System.Collections.ArrayList($null)

$SiteInfo = @{}
$SiteInfo.Url = "http://some.url.com"
$SiteInfo.Owner = "Joe Smith"
$collection.Add((New-Object PSObject -Property $SiteInfo)) | Out-Null

$SiteInfo = @{}
$SiteInfo.Url = "http://another.url.com"
$SiteInfo.Owner = "Sally Jones"
$collection.Add((New-Object PSObject -Property $SiteInfo)) | Out-Null


$collection | Export-Csv  "UsageReport.csv" -NoTypeInformation -Encoding UTF8 -Delimiter '|'

うまくいかないもの。

これは機能しますが、次の点に注意してください。

$collection.Add((New-Object PSObject -Property $SiteInfo))

... うまくいかないことがいくつかあります:

  • かっこの 1 つのセットを省略すると、機能しません。

    $collection.Add(New-Object PSObject -Property $SiteInfo)
    
  • 引数ラベルを省略しても機能し-propertyません:

    $collection.Add((New-Object PSObject $SiteInfo))
    
  • 使用+=するだけでは機能しません:

    $collection += $SiteInfo
    

これらの場合、CSV ファイルにエラー メッセージや奇妙なエントリが表示されます。

なぜ「Out-Null」なのか?

追記:実行すると、有効な最大$collection.Add()のインデックスのインデックスが出力されます。| Out-Null必要がない場合は、その番号を破棄します。

于 2013-05-06T22:03:12.133 に答える