Русификация удаленной консоли Windows

Удаленная консоль в Windows

Системный администратор, существо достаточно ленивое. Поэтому ходить самому по множествуразрозненных серверов и компьютеров, находящихся в его подчинении он не любит. Специальнодля таких случаев придумали удаленное управление. Чаще всего начинающие системныеадминистраторы, под этим словом понимают подключение к компьютеру или серверу черезпротоколы RDP, Radmin и т.д. Они конечно дают отображение экрана или терминальной сессии,но часто все это излишне или же просто невозможно. Для таких случаев используют удаленную консоль…

Она позволяет вести управление компьютером, и не потребляет много трафика. В *NIX системах для этого используется протокол SSH. Он встроен в большинство систем и прекрасноработает уже много лет. В Windows системах изначально не было простых, а главное бесплатных утилит для удаленного управления консолью. Одной из первых таких утилит была PsExec из комплекта PsTools компании Sysinternals (http://technet.microsoft.com/ru-ru/sysinternals/bb896649). Она позволяет удаленно запускать консольные (и не только) программы на нужных вам компьютерах, и получать их выход в случае возможности. Так же она не требует, что-либо устанавливать, на управляемый компьютер.

Идеологическим продолжением  этой утилиты и самой актуальной средой на сегодня является среда PowerShell (http://support.microsoft.com/kb/968930), в ней начиная со второй версии, встроена возможность удаленного подключения к консоли компьютера, на которой установлена эта среда и работа с ней. Работает эта среда, на всех компьютерах начиная с Windows XP

Для удаленного управления компьютером с помощью PowerShell 2.0 используется командлет Enter-PSSession. Однако предварительно на тот компьютер нужно установить среду PowerShell 2.0 (в Windows 7 и Windows Server 2008 R2 она уже встроена) и включить удаленное управление, с помощью командлета Enable-PSRemoting на управляемом компьютере.


Проблема и вариант его решения

Как бы не было хорошо управлять компьютерами на основе Windows, однако существует проблема. При попытке управлять компьютером, изначальным  языком которого является Русский, мы получаем проблему — выход в виде кракозябр


Читать которые очень затруднительно. Это достаточно фундаментальная проблема, которая наличиствует во всех версиях Windows, языком установки которого является Русский. Она появляется как при управлении PsExec так и PowerShell 2.0. Основная причина этих кракозябр является неправильная передача кодировки. В России используется минимум 3 кодировки: CP1251 (Известная как Windows), CP866 (Известная как DOS) и KOI8. При таком количестве кодировок передача данных и их отображение, осуществляется в неправильном формате,  и мы видим результат. Попробуем решить данную проблему. Для начала принудительно установим кодировку 1251. Делается это командой

chcp 1251

После начинаются танцы с бубном
Заходим в свойства текущей консоли и выбираем шрифт Lucida Console

Консоль преображается

Далее, опять выбираем свойства консоли и выбираем Точечные шрифты

Обратите внимание, если выбрать Размер 8х12 то ничего не изменится, поэтому лучше выбрать 12х16. И мы вроде бы получили то что было изначально,

Но, попробуем прочитать что-либо через удаленную консоль

Как видите теперь можно нормально прочитать, что нам сообщает удаленная консоль.
К сожалению в текущей консоли мы потеряли возможность читать сообщения переданые локально

Но это решается запуском второй консоли 🙂
Если у вас есть еще какой либо способ решения этой проблемы, напишите мне. Я буду этому очень рад .
Автор — Владимир Озеров aka Neonaft

Запись опубликована в рубрике IT с метками , . Добавьте в закладки постоянную ссылку.

Один комментарий на «Русификация удаленной консоли Windows»

  1. esqado говорит:

    Не самый лучший способ, но мне (в большинстве случаев хватает):
    в профиле создал функцию:
    function EncodIt () {
    Param (
    [string]$From = ‘cp866’,
    [string]$To = ‘windows-1251’
    )

    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)
    }
    }
    взятую отсюда: https://xaegr.wordpress.com/2007/01/24/decoder/
    функция принимает строку
    Выполняю команду:
    icm remotecomp -cr $cred -sc {ping ya.ru} | EncodIt

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

Войти с помощью: 

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

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.