質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

8564閲覧

Powershell HashテーブルのCSV出力

tonru

総合スコア9

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2020/02/24 13:58

こんばんわ。
PowershellでHashテーブル(連想配列)のデータをcsv出力したいのですがどのようにすればよいでしょうか?
以下のハッシュテーブル例の場合、
csvファイル内に
"12A","11V"
の2つの要素が出力されるようにしたいです。
よろしくお願いします。

$outFile = "HashOut.csv" $Paramaters = @{} $Paramaters.Add("DenAtsu","11V") $Paramaters.Add("DenRyu","12A") $Paramaters.Values $Paramaters | Export-Csv -Append -Encoding Default $outFile -NoTypeInformation
#実際に出力されるファイルの中身 "IsReadOnly","IsFixedSize","IsSynchronized","Keys","Values","SyncRoot","Count" "False","False","False","System.Collections.Hashtable+KeyCollection","System.Collections.Hashtable+ValueCollection","System.Object","2"
#想定している出力イメージ "DenRyu","DenAtsu" "12A","11V"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

PowerShellの特別仕様として[PSCustomObject]ハッシュテーブルなどとすると、
そのハッシュテーブルのKeyの名前でValueの値をもったPSCustomObjectに変換できます(System.Management.Automationの名前空間は省く必要があります)。

PSCustomObjectに変換できれば、Export-Csvで意図したとおりに出力されるはずです。

powershell

1[PSCustomObject]$Paramaters | 2 Export-Csv -Append -Encoding Default $outFile -NoTypeInformation

ただし上記特別仕様はWindows7(サポート終了ですが)のPowerShellでは動作しないため、New-Object -TypeName psobject -Property $Paramatersのようにする必要があります。

また、Hashtableの仕様上、列名の順番が変わる可能性があるため、その場合はExport-Csvの前にSelect-Objectなどで順番を明示するのも手です。

投稿2020/02/24 23:05

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tonru

2020/02/25 15:03

imihito さん 回答ありがとうございました♪ ※返信遅くなり申し訳ないです。 ご指定の方法で、意図した出力を得ることができました。 ありがとうございました♪ 「[PSCustomObject] を指定する」というのが理解できなかったのですが、やりたいことが確認できたのでとても助かりました。
imihito

2020/02/25 22:45

> 「[PSCustomObject] を指定する」 について補足ですが、PowerShellでは`[数値以外の何か]`は型を示すものになります。 そして`[型]何らかの式`とすると、「何らかの式」が「型」に変換されます。 例えば、`"10" * 2`は「10」という文字列を2個にしているので「1010」という文字列になります。 `[int]"10" * 2`とすると、「10」という文字列が整数に変換されるため、「20」という整数になります。 今回は`$Paramaters`という変数を`[PSCustomObject]`という型に変換している、ということになります(上記の例とはちょっと動作が異なりますが)。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問