XML形式の設定ファイルなんかも増えてきていますが、"="区切りの設定ファイルは今も良く見ると思います。
USERID = user01 PASSWORD = passw0rd HOSTNAME = myhost.local
PowerShellでこのような設定ファイルを読み込みたい場合はImport-Csvのコマンドレット使うときれいに読み取れます。
上の設定ファイルをKeyとValueにヘッダーを設定して読んでみた例です。
"="以外の区切り文字の場合はDelimiterの引数を変更します。
Import-Csv -Path .\settings.txt -Header Key,Value -Delimiter "=" Key Value --- ----- USERID user01 PASSWORD passw0rd HOSTNAME myhost.local
キレイに読み込めているのですが、array形式なので、
ある項目を取得したい場合など、Key項目を使ってValueを読み込もうとすると少し使いづらい場合があります。
こんな時にはハッシュ変数使うと便利です。
下の例では$settingsというハッシュ変数を用意して、
そこにインポートしたCSVの項目をマッピングしてみます。
#ハッシュ変数定義 $settings = @{} #インポートした項目をハッシュ変数にマッピングしながら格納 Import-Csv -Path .\settings.txt -Header Key,Value -Delimiter "=" | %{$settings.Add($_.Key.Trim(),$_.Value.Trim())}
こうすると以下のように直観的に設定内容を呼び出せます。
>$settings.USERID user01 >$settings.PASSWORD passw0rd >$settings.HOSTNAME myhost.local
(追記)
最新のPSの場合は、ConvertFrom-StringDataコマンドレットを使えばもっと簡単に書けました。
$settings = Get-Content .\settings.txt | ConvertFrom-StringData
ただし上記の場合はHashTableになるのに対し、こちらの方法ではObjectの配列になります。
PSのVer2.0などではオブジェクトの配列に対して「$object.要素名」といった使い方ができないので注意してください。