在 "Exchange admin center" 中备份 "Mail flow - Rules"

Backing up of the "Mail flow - Rules" in the "Exchange admin center"

我需要备份 "Exchange admin center"

中的 "Mail flow - Rules"

$TransCollect = Export-TransportRuleCollection
$TransCollect1 = [System.Text.Encoding]::Unicode.GetString($TransCollect.FileData)
$TransCollect1  | Set-Content -path c:\temp.xml

但是我无法从 XML 文件中提取任何内容,因为 XML 文件的开头是一个特殊字符。 所以如果 运行 .... [XML]$AppConfig = Get-Content –Path "c:\temp.xml" 我收到几个错误。 “[System.Text.Encoding]::Unicode.GetString”行本身是否有问题或 我如何删除这个特殊字符。 请参阅特殊字符的屏幕截图。它出现在文件的开头“

您看到的 "special character" 是 Unicode(又名 UTF-16LE)的 Byte Order Mark (\xFF\xFE),因为您使用了 [System.Text.Encoding]::Unicode.GetString()。要使用 Get-Content 读取该文件,您需要使用其 -Encoding 参数指定相同的编码:

[XML]$AppConfig = Get-Content -Path "c:\temp.xml" -Encoding Unicode

根据您使用的 PowerShell 版本,Get-Content 默认使用不同的编码:

  • 5.1 及以下版本使用与系统活动代码页(通常是 ANSI)相对应的编码
  • 版本 6 及更高版本使用 UTF8NoBOM

在 UTF16 中编写 XML 是否有特定原因?通常,UTF-8 与 XML

一起使用

我能够使用它并完全绕过特殊字符,并将交换规则转换为可提取格式。

$File_Collect = "c:\temp.xml"
$TransCollect = Export-TransportRuleCollection
Set-Content -Path $File_Collect -Value $TransCollect.FileData -Encoding Byte
[XML]$TransXMLCollect = Get-Content –Path $File_Collect
$TransXMLCollect.SelectNodes("//rule") | % { $_.InnerText }