1. ホーム
  2. powershell

[解決済み] PowerShellでハッシュをループする、または配列を使用する

2022-09-15 07:27:20

質問

私はこの(簡略化した)コードの塊を使って、SQL Server からテーブルのセットを BCP .

$OutputDirectory = "c:\junk\"
$ServerOption =   "-SServerName"
$TargetDatabase = "Content.dbo."

$ExtractTables = @(
    "Page"
    , "ChecklistItemCategory"
    , "ChecklistItem"
)

for ($i=0; $i -le $ExtractTables.Length – 1; $i++)  {
    $InputFullTableName = "$TargetDatabase$($ExtractTables[$i])"
    $OutputFullFileName = "$OutputDirectory$($ExtractTables[$i])"
    bcp $InputFullTableName out $OutputFullFileName -T -c $ServerOption
}

これはとてもうまくいくのですが、現在、いくつかのテーブルはビューを介して抽出される必要があり、いくつかはそうではありません。そこで、次のようなデータ構造が必要です。

"Page"                      "vExtractPage"
, "ChecklistItemCategory"   "ChecklistItemCategory"
, "ChecklistItem"           "vExtractChecklistItem"

ハッシュについて調べていたのですが、ハッシュをループする方法について何も見つかりませんでした。ここで行うべき正しいことは何でしょうか?おそらく、単に配列を使用しますが、両方の値をスペースで区切って使用しますか?

または、私は何か明白なものを見逃していますか?

どのように解決するのですか?

クリスチャンの回答はうまくいっており、ハッシュテーブルの各項目で GetEnumerator メソッドを使って、ハッシュテーブルの各項目をループする方法を示しています。また keys プロパティを使ってループさせることもできます。以下はその例です。

$hash = @{
    a = 1
    b = 2
    c = 3
}
$hash.Keys | % { "key = $_ , value = " + $hash.Item($_) }

出力します。

key = c , value = 3
key = a , value = 1
key = b , value = 2