くらっちのクラウド日記

仕事や勉強で得た Microsoft 365 関連の技術知識を投稿していくブログです。

【PowerShell】ps1ファイル内で iniファイル を読み込む

・はじめに

PowerShell を実行する場合、例えばスクリプトに設定する条件などを利用時に実行者自身で設定してほしい。という事があると思います。

しかし、ユーザーがps1ファイルを編集するのは、誤って不必要な部分を編集してしまうなどのリスクがあるため、あまり操作はさせたくありません。
ユーザーに編集させたい部分は切り出して iniファイルにまとめて、ps1ファイルは編集させないようにするのが安全です。

今回は、ps1ファイル実行時にiniファイルを読み込み、その値を利用する方法を紹介します。

・目次

・フォルダー構成

今回紹介するのは、ps1ファイルと同じフォルダー内に格納されたiniファイルを読み込む方法です。
下図内のフォルダーには、本記事内の「iniファイル 書き方 例」と「ps1ファイル 書き方 例」のコマンドを記載したファイルを格納しています。

f:id:kurakurattyo:20211207002517p:plain

・iniファイル 書き方 例

#変数名=代入値
rolename=Grobal Administrator
startdate=2021/12/07 15:30:00
activity=Add user,Add group

※「=」の前後にスペースは入れないようにします
※文字列記載の際に””(ダブルクォーテーション)で囲わないようにします
※「””」で囲わなくても、半角スペースなどは文字列として扱われます。
※「,」も文字列の1文字として扱われます。

PowerShell 書き方 例

#注1
$INI_PATH = @(Split-Path $script:myInvocation.MyCommand.Path -Parent).Trim()
$INI_FILE = "Sample.ini"
$INI_FULLNAME = $INI_PATH + "\" + $INI_FILE

#注2
$PARAMETER = @{}
Get-Content $INI_FULLNAME | %{$PARAMETER += ConvertFrom-StringData $_}

#注3
$Role = $PARAMETER.rolename
$Start = $PARAMETER.startdate
$Action = $PARAMETER.activity

#結果出力のため
$Role
$Start
$Action

注1について
「Split-Path $script:myInvocation.MyCommand.Path -Parent」では、スクリプトを実行している場所のパスを取得します。
その後、同フォルダ内のiniファイルのパスを作成します。

注2について
$PARAMETER を配列として利用するために宣言しました。
$INI_FULLNAME (iniファイル)から取得した全ての変数を PARAMETER 配列に入れていきます。

注3について
PARAMETER 配列に格納された値を PowerShell の変数に代入します。
$PARAMETER.rolename のように、「配列名. iniファイルの変数名」を指定することで、取得した値を利用することができます。

PowerShell を起動して ps1ファイルを実行してみると、問題なくiniファイルで設定した値を取得することができていました。 f:id:kurakurattyo:20211208113303p:plain