从 PowerShell 脚本创建 XML 输出文件

To create XML output file from PowerShell script

从 PowerShell 脚本创建以下 XML 输出:

<Trigger>
  <Value1>20181231</value1> 
  <value2>20180531</>
  <value3>20180531</value3>
  <value4>FINANCE</value4>
  <value5 />
  <value6 />
</Trigger>

Value1 是今年的结束日期。值 2 和值 3 是本月的结束日期。如何从 PowerShell 脚本创建以上 XML?

嗯,这是加载和保存 xml:

的方法
[xml]$xml = get-content file.xml
$xml.save('file.xml')

还有一个convertto-xml命令:

$xml = [pscustomobject]@{Value1='20181231'} | ConvertTo-Xml -NoTypeInformation
$xml.save('file.xml')
get-content file.xml

<?xml version="1.0" encoding="utf-8"?>
<Objects>
  <Object>
    <Property Name="Value1">20181231</Property>
  </Object>
</Objects>

但这并不是那么简单。

## Q:\Test19\SO_56237520.ps1

$ThisYearEndDate = (Get-Date -Month 1 -Day 1).AddYears(1).AddDays(-1).ToString('yyyyMMdd')
$ThisMonthEndDate= (Get-Date -Day 1).AddMonths(1).AddDays(-1).ToString('yyyyMMdd')
$File = '.\Sample.xml'

@"
<Trigger>
  <Value1>$ThisYearEndDate</Value1>
  <value2>$ThisMonthEndDate</value2>
  <value3>$ThisMonthEndDate</value3>
  <value4>FINANCE</value4>
  <value5 />
  <value6 />
</Trigger>
"@ | Set-Content $File -Encoding UTF8

$XML = [XML](Get-Content $File)

$XML.Trigger

示例输出

> .\SO_56237520.ps1


Value1 : 20191231
value2 : 20190531
value3 : 20190531
value4 : FINANCE
value5 :
value6 :

这是一个使用 XElement 的解决方案:

using namespace system.xml.linq
$CurrentDate = Get-Date
$YearEnd = Get-Date -Year $CurrentDate.Year -Month 12 -Day 31 -Format yyyyMMdd
$MonthEnd = Get-Date -Year $CurrentDate.Year -Month $CurrentDate.Month -Day ([datetime]::DaysInMonth($CurrentDate.Year,$CurrentDate.Month)) -Format yyyyMMdd

$x = [xelement]::new("Trigger",
    [xelement]::new("Value1",$YearEnd),
    [xelement]::new("Value2",$MonthEnd),
    [xelement]::new("Value3",$MonthEnd),
    [xelement]::new("Value4","FINANCE"),
    [xelement]::new("Value5",""),
    [xelement]::new("Value6",""))

$x.tostring() | Set-Content -Path "x.xml"

这会将 XML 结构输出到当前目录中的文件 x.xml。