2016-05-11

PowerShellでxmlファイルを操作する - 読み込み編 -

PowerShellでは、ユーザーの好みに合わせて、独自にフォームを作成することができます。

今回は「PowerShellでユーザーフォームを作る - 設定ファイル 読み込み編 -」です。

あなたが作成したユーザーフォームを、例えば同じ社内の人が複数人で使用していたりしませんか?

そして、使用する人(パソコン)によってフォルダのパスが違ったり、ファイル名が違ったり、文字色が違ったりと、十人十色の状況になっていませんか?

使う人が2~3人と少ないような場合は、「スクリプト内でユーザーIDなどから処理を分岐させる」「一人ずつスクリプトを作る」などの方法でも問題ないかもしれませんが、それが10人、20人となってくると大変です。

そういった場合に使用するのが「設定ファイル」です。

設定ファイル内には個別の情報を予め入力しておく必要があります。
その設定ファイルとスクリプトファイルを同じフォルダ内に格納しておき、スクリプトを実行したときに設定ファイル内を読み込むことで、それぞれの設定が反映されます。

<今回の完成品>


設定ファイルではiniファイルやxmlファイルがよく使われますが、今回はxmlファイルを使ってご紹介していきます。

まず先にxmlファイルを準備します。

今回使用するxmlファイルの内容は次のようになっています。

- - - [ setting.xml ] - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<?xml version="1.0" encoding="utf-8"?>
<root>
    <name>山田太郎</name>
    <userid>t_yamada</userid>
    <path>C:\Users\t_yamada\Desktop</path>
    <color>lightblue</color>
</root>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

続いて、スクリプトを記述していきます。


#PowerShellでユーザーフォームを作る - 設定ファイル 読み込み編 -

#xmlファイルの読み込み
$xml = [XML](Get-Content "setting.xml") 

#それぞれを取得し、変数へ格納
$xml_name = $xml.root.name 
$xml_id = $xml.root.userid 
$xml_path = $xml.root.path 
$xml_color = $xml.root.color 

#アセンブリのロード
Add-Type -AssemblyName System.Windows.Forms 

#フォーム 
$form = New-Object System.Windows.Forms.Form 
$form.Size = "300,200" 
$form.StartPosition = "CenterScreen" 
$form.Text = "設定" 
$form.BackColor = $xml_color 

#ラベル 名前 
$NameLabel = New-Object System.Windows.Forms.Label 
$NameLabel.Location = "10,10" 
$NameLabel.Size = "100,20" 
$NameLabel.Text = "名前" 

#テキストボックス 名前 
$Name = New-Object System.Windows.Forms.TextBox 
$Name.Location = "10,30"
$Name.Size = "250,20" 
$Name.Text = $xml_name 

#ラベル アカウントID 
$IDLabel = New-Object System.Windows.Forms.Label 
$IDLabel.Location = "10,60" 
$IDLabel.Size = "100,20" 
$IDLabel.Text = "アカウントID" 

#テキストボックス ID 
$ID = New-Object System.Windows.Forms.TextBox 
$ID.Location = "10,80" 
$ID.Size = "250,20"
$ID.Text = $xml_id 

#ラベル パス 
$PathLabel = New-Object System.Windows.Forms.Label 
$PathLabel.Location = "10,110" 
$PathLabel.Size = "100,20" 
$PathLabel.Text = "パス" 

#テキストボックス パス 
$Path = New-Object System.Windows.Forms.TextBox 
$Path.Location = "10,130"
$Path.Size = "250,20" 
$Path.Text = $xml_path

$form.Controls.AddRange(@($NameLabel,$Name,$IDLabel,$ID,$PathLabel,$Path))

$Form.Showdialog()
上記内容をコピーし、PowerShell ISEに貼り付け後、実行すると上の画像と同じものが表示されるはずです。

続いて解説をしていきます。

※過去の記事で解説した部分については割愛致します。
 内容をご確認いただきたい場合は【ユーザーフォーム - 基礎編 -】をご覧ください。


*****解説*****************************************************************************
# xmlファイルの読み込み 
$xml = [XML](Get-Content "setting.xml")
ここでは、カレントディレクトリ内にあるsetting.xmlを読み込み、変数xmlに格納しています。
これで、設定ファイルの内容は全て変数xmlファイルに収められました。
# それぞれを取得し、変数へ格納
$xml_name = $xml.root.name 
$xml_id = $xml.root.userid 
$xml_path = $xml.root.path 
$xml_color = $xml.root.color
続いて、変数xmlの中から必要な部分だけを個別に取り出していきます。

例えば、変数xml_nameでは、設定ファイル内の"root"の中の"name"の値(つまり「山田太郎」)を取得しています。
同様に他の値を取得し、それぞれを変数に格納しています。

今回の例では、取得した値をフォーム背景色とそれぞれのテキストボックスの文字列にそのまま当てはめています。

************************************************************************************************

解説は以上となります。

設定ファイルは最初に準備さえしておけば、後の管理が非常に楽になります。
例えば、「今まで使っていたフォルダを別のフォルダに変更したい」といった場合も、その人の設定ファイル内を書き換えるだけで済みますし、新たにそのツールを使用する人が増えた場合も、設定ファイルだけを編集すればすぐに使えるようになります。

貴殿が作成したユーザーフォームを多くの方が使用する場合は、ぜひ設定ファイルを導入しましょう!

=============================================================
本投稿に関する疑問や質問には可能な限りお答えさせていただきます。
お気軽にコメントやメールをお送りください。
(リクエストも歓迎します)
メール:tkk-powershell@gmail.com
また、間違いのご指摘・アドバイス等も歓迎いたします。
=============================================================
Google+、Twitterで更新情報をお届けしています!
ぜひフォローをお願い致します!           
=============================================================
スポンサーリンク


0 件のコメント:

コメントを投稿

疑問・質問・リクエスト お気軽にどうぞ (^O^)/