You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求兼容PowerShell 3.0的多cmdlets输出转自定义XML实现方案

兼容PowerShell 3.0的自定义XML生成方案

PowerShell 3.0原生完整支持System.Xml命名空间的所有操作,完全可以实现自定义XML结构、编码、节点格式的全控制,不需要依赖PowerShell 4.0专属特性,可在Windows Server 2008 SP1环境正常运行。

具体实现步骤
  • 第一步:初始化XML文档基础结构
# 创建空XML文档对象
$xmlDoc = New-Object System.Xml.XmlDocument
# 声明XML版本和编码规则
$xmlDeclaration = $xmlDoc.CreateXmlDeclaration("1.0", "utf-8", $null)
$xmlDoc.AppendChild($xmlDeclaration) | Out-Null
# 创建自定义根节点,可根据需求修改节点名
$rootNode = $xmlDoc.CreateElement("DomainControllerAuditData")
$xmlDoc.AppendChild($rootNode) | Out-Null
  • 第二步:添加从cmdlet获取的DC数据节点
    示例为插入域控制器基础信息,可根据你需要提取的指标自由扩展节点、属性:
# 替换为你实际用到的DC信息查询cmdlet
$dcList = Get-ADDomainController -Filter *

foreach ($dc in $dcList) {
    # 创建单个DC的父节点
    $dcItemNode = $xmlDoc.CreateElement("DCItem")
    # 给节点添加自定义属性
    $dcItemNode.SetAttribute("HostName", $dc.HostName)
    $dcItemNode.SetAttribute("Site", $dc.Site)
    $dcItemNode.SetAttribute("IPv4", $dc.IPv4Address)

    # 可选:添加子节点存储更多信息
    $osNode = $xmlDoc.CreateElement("OperatingSystem")
    $osNode.InnerText = $dc.OperatingSystem
    $dcItemNode.AppendChild($osNode) | Out-Null

    $statusNode = $xmlDoc.CreateElement("Status")
    $statusNode.InnerText = $dc.OperatingSystemStatus
    $dcItemNode.AppendChild($statusNode) | Out-Null

    # 将当前DC节点挂载到根节点
    $rootNode.AppendChild($dcItemNode) | Out-Null
}
  • 第三步:格式化输出XML文件
    支持自定义缩进、换行等展示格式:
# 配置输出格式参数
$xmlSaveSettings = New-Object System.Xml.XmlWriterSettings
$xmlSaveSettings.Indent = $true
$xmlSaveSettings.IndentChars = "  " # 缩进用2个空格,可自行修改
$xmlSaveSettings.OmitXmlDeclaration = $false
$xmlSaveSettings.NewLineOnAttributes = $false # 可改为true实现每个属性单独换行

# 导出文件,替换为你需要的保存路径
$xmlWriter = [System.Xml.XmlWriter]::Create("C:\DC_Audit_Result.xml", $xmlSaveSettings)
$xmlDoc.WriteTo($xmlWriter)
$xmlWriter.Flush()
$xmlWriter.Close()
适配原高版本脚本的替换规则

如果你想复用参考指南里的已有逻辑,只需要将其中PowerShell 4.0专属语法替换为3.0兼容写法即可:

  • 将方法式筛选$array.Where({条件})替换为管道筛选$array | Where-Object {条件}
  • 将方法式遍历$array.ForEach({逻辑})替换为标准foreach循环foreach ($item in $array) {逻辑}
  • 所有System.Xml相关的API调用无需修改,PowerShell 3.0完全支持

内容的提问来源于stack exchange,提问作者Nad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:09:04