PowerShellでxmlの読み込みをする方法

こんにちは。
けいぞうです。

今回は「PowerShellでxmlの読み込みをする方法」についての記事です。

PowerShellでxmlを読み込む方法

以下のようなxmlがあったとします。

<?xml version="1.0"?>
<Setting>
    <MailConfig>
        <!--メール共通設定 -->
        <MailCommonSetting>
            <SMTPServer>smtp.gmail.com</SMTPServer>
            <Port>587</Port>
            <MailAddress>keizou@example.com</MailAddress>
            <Password>passpass123</Password>
        </MailCommonSetting>

        <!-- BitCoin価格が閾値に到達した際に送信されるメールに関する設定 -->
        <BitCoinThresholdMail>
            <MailTo>keizou@example.com, yamada@example.com</MailTo>
            <MailFrom>keizou@example.com</MailFrom>
            <Subject>Bitcoin value high Information : {0} yen</Subject>
            <Body>BitCoin value reached {0} yen.
                  This E-mail is automatical.
                  Do not reply.
            </Body>
            <Threshold>1,000,000</Threshold>
            <NowPricePath>C:\SystemTrade\Iberry\NowPrice.txt</NowPricePath>
            <logFilePath>C:\SystemTrade\Iberry\logs\BitCoinThresholdMail.log</logFilePath>
        </BitCoinThresholdMail>
    </MailConfig>
</Setting>

これは数年前に私が作った、ビットコインが設定した価格を超えたらメールを送るツールで使っていたxmlです。

例えばここから、メールの送信先を取得する場合は、以下のように書きます。

#設定ファイルを取得
$SettingPath = "C:\SystemTrade\Iberry\bin\IberryConfig.xml"
$Settingxml = [xml](Get-Content -Encoding Default $SettingPath)

#メール送信先を取得
$EmailTo = $Settingxml.Setting.MailConfig.BitCoinThresholdMail.MailTo.ToString()

このように、取得したいxmlファイルをGet-Contentで読み込んで、[xml]でキャストして変数に持たせることで、ドットでタグをつないで値を簡単に取り出すことができます。

PowerShellにはこの「xml」の型が存在するから、楽にxmlを扱うことができるんです。

> $Settingxml.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    XmlDocument                              System.Xml.XmlNode