Как решить проблему кодировки текста в PowerShell

Сегодня пытался собрать информацию о программном и аппаратном обеспечении на удалённых компьютерах посредством 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

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *