• ベストアンサー

powershellとiniファイル

ps1よりiniファイルを読み込むスクリプトを作成中です。 iniファイルには以下の記載をしています。 いわゆる連想配列です。 $info = @{} $info[0] = @{ host=testest1 ip=192.168.0.0 } $info[1] = [ host=testest2 ip=192.168.0.1 } 一方、ps1は以下の通り、コードを記述しています。 $INI_PATH = @(Split-Path $script:myInvocation.MyCommand.Path -Parent).Trim() $INI_FILE = "ini_test2.ini" $INI_FULLNAME = $INI_PATH + "\" + $INI_FILE $PARAMETER = @{} Get-Content $INI_FULLNAME | %{$PARAMETER += ConvertFrom-StringData $_} $host_info = $PARAMETER.info[0] #値格納 $host_info いざ、実行すると、 「ConvertFrom-StringData : データ行 '}' の形式が '名前=値' ではありません。」、「項目は既に追加されています。」とのエラーが出ます。 どのように変えればエラーがなくなりますでしょうか。 Powershellの初歩的な質問で申し訳ないのですが、ご回答をよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • luka3
  • ベストアンサー率72% (424/583)
回答No.2

ConvertFrom-StringData では、名前=値 のペアしか受け付けないのではないでしょうか。 やりたいことに近いのは下記のようなことなのかと思います。 Invoke-Expressionは、与えられた文字列をスクリプトそのものとして処理します。 便利な反面、余計なもの(極端に言えばハッキングコード)が入り込まないよう注意する必要があります。 -- ini_test2.ini $info = @(@{},@{}) $info[0] = @{ host="testest1"; ip="192.168.0.0" } $info[1] = @{ host="testest2"; ip="192.168.0.1" } -- ps1 $INI_PATH = @(Split-Path $script:myInvocation.MyCommand.Path -Parent).Trim() $INI_FILE = "ini_test2.ini" $INI_FULLNAME = $INI_PATH + "\" + $INI_FILE Get-Content $INI_FULLNAME -Raw | Invoke-Expression $host_info = $info[0] #値格納 $host_info

ptgapsokwave
質問者

お礼

ご回答ありがとうございます。 解決しました。

その他の回答 (1)

回答No.1

$info[1] = [ は $info[1] = { ではありませんか?