PowerShellでXMLを扱う

XMLファイルから、XMLオブジェクトを作る

XMLオブジェクトを作るには、[xml]でキャストします。

PS> $xml = [xml](Get-Content .\Settings.xml -Encoding UTF8)
PS> $xml
 
xml                            project
---                            -------
version="1.0" encoding="UTF-8" project

用意しているのは以下のようなXMLファイル。

PS> Get-Content .\Settings.xml -Encoding UTF8
<?xml version='1.0' encoding='UTF-8'?>
<project>
  <view>
    <includeRegex>(?i).*DT-4000.*</includeRegex>
  </view>
  <deployJob>
    <jobName>DT-4000_TestDeploy</jobName>
    <p4Stream>//stream_depot/LM_CIV_DT-4000_TestDeploy</p4Stream>
  </deployJob>
</project>

XMLオブジェクトの値を参照、書き換え

XMLオブジェクトの値を参照するには、ドット(.)を使用します。

PS> $xml.project.deployJob.jobName
DT-4000_TestDeploy
PS> $xml.project.deployJob.jobName = "DT-4000_Deploy"
PS> $xml.project.deployJob.jobName
DT-4000_Deploy

XMLオブジェクトをファイルに保存する

$xml.Save($Path)を使う。
エンコーディングを指定したい場合は、別の方法。

PS> $Path = "C:\Users\miajimyu\Desktop\Output.xml"
PS> $xml.Save($Path)
PS> Get-Content -LiteralPath $Path
<?xml version="1.0" encoding="UTF-8"?>
<project>
  <view>
    <includeRegex>(?i).*DT-4000.*</includeRegex>
  </view>
  <deployJob>
    <jobName>DT-4000_Deploy</jobName>
    <p4Stream>//stream_depot/LM_CIV_DT-4000_TestDeploy</p4Stream>
  </deployJob>
</project>

XMLオブジェクトを文字列にする

XMLオブジェクトを文字列にするには、$xml.OuterXMLが使えます。

# 例 Jenkinsの既存Jobを元に、XMLを編集し、新しいJobを作成する
PS> $text = java -jar jenkins-cli.jar -s "http://localhost:8080/" get-job Test
PS> $text
<?xml version='1.0' encoding='UTF-8'?>
<project>
  <actions/>
  <description>Description</description>
  <keepDependencies>false</keepDependencies>
  <properties>
    <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
  </properties>
  <scm class="hudson.scm.NullSCM"/>
  <canRoam>true</canRoam>
  <disabled>false</disabled>
  <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
  <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
  <triggers/>
  <concurrentBuild>false</concurrentBuild>
  <builders/>
  <publishers/>
  <buildWrappers/>
</project>
PS> $xml = [xml]$text
PS> $xml

xml                            project
---                            -------
version="1.0" encoding="UTF-8" project

PS> $xml.project.description
Description
PS> $xml.project.description = "New Description"
PS> $xml.OuterXml | java -jar jenkins-cli.jar -s "http://localhost:8080/" create-job NewTest

スポンサーリンク