Сегодня пытался собрать информацию о программном и аппаратном обеспечении на удалённых компьютерах посредством PowerShell.

Сделать это, оказалось, несложно, но возникла небольшая проблема: часть текста отчёта получилась непонятными символами, какими-то "кракозябрами". Решить проблему удалось конвертацией текста в другой формат.

Функция для конвертации:

 
  1. function ConvertTo-Encoding ([string]$From, [string]$To){  
  2.     Begin{  
  3.         $encFrom = [System.Text.Encoding]::GetEncoding($from)  
  4.         $encTo = [System.Text.Encoding]::GetEncoding($to)  
  5.     }  
  6.     Process{  
  7.         $bytes = $encTo.GetBytes($_)  
  8.         $bytes = [System.Text.Encoding]::Convert($encFrom$encTo$bytes)  
  9.         $encTo.GetString($bytes)  
  10.     }  
  11. }  

Функция берет строку или массив строк на вход, и в качестве параметров указываются названия исходной и нужной кодировок (см. Get-Encodings).

Например:

 
  1. PS C:\windows\system32> "Конвертировать" | ConvertTo-Encoding cp866 windows-1251  
  2. ¦юэтхЁЄшЁютрЄ№  
 
  1. PS C:\Windows\system32> "¦юэтхЁЄшЁютрЄ№" | ConvertTo-Encoding windows-1251 cp866  
  2. Конвертировать  

Ещё один ньюанс. Когда пытался передать данные в ConvertTo-Encoding через конвейер, ничего не вышло. Пришлось сначала выводить текст через конвейер в Out-String, а из него, так же конвейером в ConvertTo-Encoding.

Источник конвертера: xaegr.wordpress.com