Знакомство с winexe или как рулить виндой из по Linux

Недавно совершенно случайно узнал о чудесной проге под названием winexe. Прелесть программы в том что она позволяет рулить виндовым сервером удаленно прямо из Linux/UNIX shell (проще говоря, линуховой консоли). Короче, наткнувшись гдето в инете на подобное описание сразу захотелось покрутить. Но проблема номер раз — в репозитариях моего горячо любимого Debian программы нету 🙁 Ну чтож, в опенсорс прелесть в том что этот самый сорс можно найти и скомпились, коли руки ростут одтуда одкуда надо 😀 Но честно говоря, проверять собственную пряморукость не пришлось, так как в гугле довольно быстро нашелся готовый deb пакет (правда под Ubuntu) которые вмиг установился командой

root@black:~# dpkg -i _path_to_deb_


updated: Подсказка коллеги — есть репозитарий под разные дистры по адресу

http://download.opensuse.org/repositories/home:/ahajda:/winexe

Пробуем заюзать:

black@black:~$ winexe -U DOMAIN/black //server "cmd.exe"
Password for [DOMAIN\black]:
Microsoft Windows [������ 5.2.3790]
() ��௮����� ����������, 1985-2003.

C:\WINDOWS\system32>ipconfig
ipconfig

��������� ��������� IP ��� Windows


����������� �� ��������� ���� - Ethernet �������:

   DNS-������� ����� ����������� . . :
   IP-�����  . . . . . . . . . . . . : 10.0.100.3
   ����� ������� . . . . . . . . . . : 255.255.255.0
   �������� ���� . . . . . . . . . . : 10.0.100.1

C:\WINDOWS\system32>exit
exit
black@black:~$

Есть проблема с кодировкой, так как у меня локаль UTF8, а выхлоп от виндосервака возвращается в CP1251, но в общем видим как оно работает 🙂
Использование программы — это уже отдельный разговор. Тут все зависит от уровня знаний виндового cmd и полета фантазий админа.
К примеру у меня на предприятии 2 сервера где народ по RDP ходит в 1С, бывает там подвисают сессии или некорректно отрабатывает подключение локальных принтеров и приходится сбрасывать сессию для того чтобы дать возможность пользователю перезайти. Раньше для этого приходилось заходить на сервер и килять мышкой из Диспетчера задач сессию определенного пользователя. Теперь же я эту процедуру упростил до выполнения одной простой команды из линуксовой консоли:

black@black:~/work/scripts$ ./rdp_kill.sh black
srv1 - Для пользователя black номер сессии - 95
srv1 - Выполняем команду reset session 95
black@black:~/work/scripts$

А под капотом у этого скриптика написано вот такое:

black@black:~/work/scripts$ cat rdp_kill.sh
#!/bin/bash

SERVERS="srv1 srv2"
if [ -n "$1" ]; then
  for SERVER in $SERVERS
   do
     SESSION_ID=`winexe -U DOMAIN/black%_my_domain_password_ //$SERVER "query session $1" 2>/dev/null |grep $1 |awk '{print $3}'`
       if [[ $SESSION_ID = [0-9]* ]]; then
         echo "$SERVER - Для пользователя $1 номер сессии - $SESSION_ID"
         echo "$SERVER - Выполняем команду reset session $SESSION_ID"
         winexe -U DOMAIN/black%_my_domain_password_ //$SERVER "reset session $SESSION_ID" && echo OK
         break
       fi
   done
 else
  echo "Задайте хотябы одного пользователя! Например $0 rdp_user_1"
fi
black@black:~/work/scripts$

Как вы понимаете, данная прога дает вам возможность рулить в винде всем тем что можно настроить через штатный cmd, а это довольно много. Тут и системные настройки, и сервисы и службы и процессы и тд и тп.
Както мне на семерке надо было полностью застопить firewall … удалось такой командой с линуксовой машины:

winexe -U MY.INTRANET/Администратор //192.168.90.12 "netsh advfirewall set  currentprofile state off"

Но это уже отдельная история …. но в целом прога очень полезная — поэтому рекомендую 😉

    • Anton
    • Май 3rd, 2012 8:16дп

    русский язык можно получить прописутив через luit отлуп от winexe, если luit в вашей ОС не понимает 866 кодировку — то бубен в руки.

    Я побеждал вот так

    http://admin.hashcode.ru/questions/501/luit-cp866-%D0%BA%D0%B0%D0%BA-%D0%BF%D0%BE%D0%B4%D1%80%D1%83%D0%B6%D0%B8%D1%82%D1%8C

  1. Трэкбэков пока нет.

Why ask?