PowerShellで設定ファイル(iniやconf)を読み込む

PowerShell

データベースやSFTPの接続情報を外部の設定ファイルで管理しているシェルスクリプトをPowerShellへリライトする業務がありました。

案の定シェルスクリプトのコードをそのまま移植することはできなかったため、調査してリライトしました。

設定ファイル(.confや.ini)

接続情報を記載した外部ファイルは以下のような形式になります。

ORACLE_USERID="aaa"
ORACLE_PASS="aaa"

SMTP_USERNAME="aaa"
SMTP_PASS="aaa"

INSERT_SQL="./sql/insert.sql"

上記は一般的なキーと値の形式になります。””で囲うかどうかは接続するシステム次第になります。sqlplusのように””で囲われたままの値を使用するケースもありますが、sqlファイルなどのファイルパスについては””で囲わずに使います。

powershellでのファイル読み込み

$CONF_FILE_PATH="./setting.ini" #設定ファイルのパス
$PARAM=@{}
Get-Content $CONF_FILE_PATH | %{$PARAM += ConvertFrom-StringData $_}

$ORACLE_USERID=$PARAM.ORACLE_USERID
$ORACLE_PASS=$PARAM.ORACLE_PASS
$ORACLE_IP=$PARAM.ORACLE_IP

$SMTP_USERNAME=$PARAM.SMTP_USERNAME.Replace('"','')
$SMTP_PASS=$PARAM.SMTP_PASS.Replace('"','')

設定ファイルのパスを指定後、ファイルから値を格納する配列$PARAMを用意します。コマンドレットGetーContentでファイルを読み込み、ConvertFrom-StringDataでPARAM配列に格納します。特定値を配列から取得したいときは、$PRAMA.キー名で取り出せます。また、値から””を取り除きたいときは、取得値に対して更にReplaceコマンドレットで第一引数に”, 第二引数を空にします。

参考URL


・配列について知りたかったことのすべて:https://learn.microsoft.com/ja-jp/powershell/scripting/learn/deep-dives/everything-about-arrays?view=powershell-7.3

・Get-Content :https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/get-content?view=powershell-7.3
・ConvertFrom-StringData :https://learn.microsoft.com/ja-JP/powershell/module/microsoft.powershell.utility/convertfrom-stringdata?view=powershell-7.3

コメント

タイトルとURLをコピーしました