Резервное копирование «Почтовый поток - Правила» в «Центре администрирования Exchange» - PullRequest
0 голосов
/ 18 июня 2020

Мне нужно сделать резервную копию «Почтового потока - Правила» в «Центре администрирования Exchange»

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

Но я не могу ничего извлечь из файла XML, потому что в начале файла XML стоит специальный символ. Итак, если запустить .... [XML] $ AppConfig = Get-Content –Path "c: \ temp \ 2. xml" Я получаю несколько ошибок. Есть ли проблема в самой строке "[System.Text.Encoding] :: Unicode.GetString" ИЛИ как мне удалить этот специальный символ? Смотрите скриншот для специального символа. Он отображается в начале файла "enter image description here

Ответы [ 2 ]

0 голосов
/ 22 июня 2020

Мне удалось использовать это и полностью обойти специальный символ, а также получить ПРАВИЛА ОБМЕНА в извлекаемом формате.

$File_Collect = "c:\temp\1.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 }
0 голосов
/ 19 июня 2020

«Специальный символ», который вы видите, - это Знак порядка байтов для Юникода (он же UTF-16LE) (\xFF\xFE), потому что вы использовали [System.Text.Encoding]::Unicode.GetString(). Чтобы прочитать этот файл с помощью Get-Content, вам необходимо указать ту же кодировку, используя его параметр -Encoding:

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

В зависимости от версии PowerShell, которую вы используете, Get-Content по умолчанию использует разные кодировки:

  • Версии 5.1 и ниже используют кодировку, которая соответствует активной кодовой странице системы (обычно ANSI)
  • Версии 6 и выше используют UTF8NoBOM

Есть ли особая причина c для записи XML в UTF16? Обычно UTF-8 используется с XML

...