Сегодня пытался собрать информацию о программном и аппаратном обеспечении на удалённых компьютерах посредством PowerShell.
Сделать это, оказалось, несложно, но возникла небольшая проблема: часть текста отчёта получилась непонятными символами, какими-то "кракозябрами". Решить проблему удалось конвертацией текста в другой формат.
Функция для конвертации:
- function ConvertTo-Encoding ([string]$From, [string]$To){
- Begin{
- $encFrom = [System.Text.Encoding]::GetEncoding($from)
- $encTo = [System.Text.Encoding]::GetEncoding($to)
- }
- Process{
- $bytes = $encTo.GetBytes($_)
- $bytes = [System.Text.Encoding]::Convert($encFrom, $encTo, $bytes)
- $encTo.GetString($bytes)
- }
- }
Функция берет строку или массив строк на вход, и в качестве параметров указываются названия исходной и нужной кодировок (см. Get-Encodings).
Например:
- PS C:\windows\system32> "Конвертировать" | ConvertTo-Encoding cp866 windows-1251
- ¦юэтхЁЄшЁютрЄ№
- PS C:\Windows\system32> "¦юэтхЁЄшЁютрЄ№" | ConvertTo-Encoding windows-1251 cp866
- Конвертировать
Ещё один ньюанс. Когда пытался передать данные в ConvertTo-Encoding через конвейер, ничего не вышло. Пришлось сначала выводить текст через конвейер в Out-String, а из него, так же конвейером в ConvertTo-Encoding.
Источник конвертера: xaegr.wordpress.com