Windows PowerShell 2 вместо BAT | CMD | WSH

PowerShell Администратор создание ленивое и по этому они (администраторы) неустанно ищут супер утилиту которая вместо них самих выполняла бы всю их работу ну или основную часть. Наиболее распространенным методом «избавления от головной боли и экономии времени» стала запись и последовательное пакетное исполнение необходимых операций - исполнение скриптов или сценариев в интерпретаторе команд операционной системы, так и был создан Windows PowerShell.

В составе MS-DOS и Windows 9x таким интерпретатором, позволяющим выполнять обработку пакетных файлов (bat-файлов), являлся command.com, впоследствии (начиная с выхода Windows NT) замененный cmd.exe. Позднее появился Windows Script Host. Windows Script Host (WSH; первоначально назывался Windows Scripting Host) – один из элементов Microsoft Windows, как часть операционной системы он начал поставляться, начиная с Windows 98. Позволяет запускать сценарии, написанные с помощью скриптовых языков VBScript/JScript и, как дополнение, некоторых других. Сценарии, исполняемые в WSH, предоставляют гораздо больше возможностей, чем использование командных (bat- и cmd-) файлов. Исполнение возможно в графической среде (wscript.exe) или в консоли (cscript.exe).

Тем не менее, процесс написания и выполнения сценариев в ОС Windows не развит так хорошо, как, например, в UNIX-системах. Одна из причин этого – сам графический интерфейс ОС Windows, видимо и сделавший ее столь популярной среди обычных, не корпоративных пользователей. Возможность управления некоторыми элементами среды Windows с помощью графического интерфейса не всегда можно реализовать с помощью системных утилит, выполняемых в командной строке. С другой стороны, возможности каких-то системных программ, поставляемых в составе Windows, не всегда представлены в GUI. К тому же интерпретаторы в Windows имеют довольно ограниченный набор команд, «зашитых» в саму оболочку. Windows Script Host не интегрирован с командной строкой и сам по себе представляет потенциальную опасность – его использует большое количество вредоносных программ.

Вредоносным ПО используется не только Windows Script Host (WSH), а и старые добрые пакетные файлы .bat | .cmd, по этому для дополнительной безопасности (её много не бывает ;) лучше отключить обработку и Windows Script Host (WSH) и пакетных файлов .bat | .cmd

Отключение Windows Script Host

Для отключения Windows Script Host (XP|2000) создайте в одной из указанных ниже веток реестра параметр (REG_DWORD) с именем "Enabled" и присвойте ему значение 0 или 1 для включения.

Отключение Windows Script Host для текущего пользователя:

HKEY_CURRENT_USER\Software\Microsoft\Windows Script Host\Settings\

Отключение Windows Script Host для всех пользователей:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Script Host\Settings\

Параметр (REG_DWORD) с именем "Enabled" по умолчанию отсутствует! Для проверки работоспособности Windows Script Host создайте файл test.vbs и запустите его, если отключен, то вы получите примерно такое сообщение:

Windows Script Host access is disabled on this machine. Contact your administrator for details.

Запрет на обработку пакетных .bat|.cmd файлов

Метод 1: - С помощью консольной утилиты REG. Нажмите кнопку Пуск, Выполнить и введите следующую команду в точности так, как указано ниже:

REG add HKCU\Software\Policies\Microsoft\Windows\System /v DisableCMD /t REG_DWORD /d 0 /f

Метод 2: Прямое редактирование реестра. Откройте редактор реестра и найдите ветку (возможно нужно будет создать), создайте параметр DisableCMD со значением по умолчанию "0":

[HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System]

Метод 3: Использование редактора групповой политики в Windows XP Professional.

  1. Click Start, Run, type gpedit.msc and click OK.
  2. Navigate to User Configuration \ Administrative Templates \ System
  3. Double-click the Prevent access to the command prompt
    • Допустимые значения параметра «DisableCMD»:
      • «0» (или отсутствие записи в реестре) — система может использовать режим командной строки и обрабатывать bat-файлы;
      • «1» — система не может использовать режим командной строки, но может обрабатывать bat-файлы;
      • «2» — система не может использовать режим командной строки и обрабатывать bat-файлы.

 

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

* ПРИМЕЧАНИЕ:
После отключения обработки .bat|.cmd файлов могут перестать функционировать должным образом некоторые программы использующие в своей работе .bat|.cmd файлы, а так же нельзя будет применить некоторые системные патчи! Не стоит отключать обработку .bat|.cmd файлов если на ПК используются .bat|.cmd файлы автоматического входа в систему и пр..

Знакомство c Windows PowerShell

Windows PowerShell построен на базе Microsoft .NET Framework и интегрирован с ним. Дополнительно PowerShell предоставляет удобный доступ к COM, WMI и ADSI, равно как и позволяет выполнять обычные команды командной строки, чтобы создать единое окружение, в котором администраторы смогли бы выполнять различные задачи на локальных и удалённых системах.

Запустив PowerShell, вы не обнаружите поначалу никаких различий между ним и cmd.exe (разве что цвет фона окна у PowerShell по умолчанию - синий). Более того, вскоре вы обнаружите, что операции копирования/вставки в PowerShell реализованы также безобразно, как и в cmd.exe. Но первое впечатление о схожести этих оболочек, скажем так, не совсем соответствует действительности.

То обстоятельство, что работа оболочки PowerShell основана на .NET Framework, является главным ее отличием от предыдущих командных оболочек Windows. PowerShell полностью объектно-ориентирована. Результатом выполнения команды в PowerShell является не некий «текст сам по себе», а объект платформы .NET. Этот объект представляет собой собственно данные и имеет набор присущих ему свойств и методов.

Внутренние команды (точнее, командные структуры) для работы с объектами в PowerShell называются командлетами. Для них придумано специальное единообразное именование в виде комбинации действие-цель. Например, для определения данных используется действие “set”, для получения – “get”, для вывода - “out” и т. д. Цель – это тип объекта, к которому будет применено действие. Командлеты можно рассматривать как мини-программы, исполняемые в среде PowerShell. Для повышения функциональности можно создавать собственные командлеты или устанавливать командлеты сторонних разработчиков. Кроме командлетов, PowerShell позволяет выполнять функции, внешние сценарии (хранятся в файлах с расширением ps1) и внешние исполняемые файлы.

В состав PowerShell включена довольно обширная справочная система. Для начала работы с ней можно выполнить команду Get-Help.

Типы команд PowerShell

В стандартной оболочке cmd.exe было только два типа команд, внутренние и внешние. Внутренние команды распознавались и выполнялись непосредственно самим интерпретатором cmd.exe (dir, copy), внешние представляли собой отдельные исполняемые модули (xcopy, more). PowerShell поддерживает четыре типа команд: функции, командлеты, сценарии, внешние исполняемые файлы.

Командлеты PowerShell

Командлет представляет собой класс .NET, порождённый от базового класса Cmdlet. Единый базовый класс Cmdlet гарантирует совместимый синтаксис всех командлетов, а также автоматизирует анализ параметров командной строки и описание синтаксиса командлетов, выдаваемое встроенной справкой.

Команды этого типа компилируются в динамическую библиотеку (DLL) и подгружаются к процессу PowerShell во время запуска оболочки. Так как компилированный код подгружается к процессу оболочки, такие команды выполняются наиболее эффективно. Командлеты можно считать аналогом внутренних команд, хотя в отличии от внутренних команд новые командлеты могут быть добавлены в систему в любое время.

Командлеты разрабатываются с помощью пакета Windows PowerShell 2.0 Software Development Kit (SDK). Командлеты могут быть по-настоящему эффективными при использовании их композиции, когда объекты передаются по конвейеру от одного командлета к другому.

Более подробную информацию о создании своих собственных командлетов можно найти по этой ссылке >>>

Функции PowerShell

PowerShell дает возможность определять пользовательские функции как в командной строке так и в файлах сценариях. Анализ синтаксиса функций производится только один раз при её объявлении, при повторном запуске функции подобный анализ не проводится.

Создать свою функцию можно следующим образом:

function MyFunction{"Helo world!"}
MyFunction
Helo world!

Эта простейшая функция при её вызове выводит на экран строку "Helo world!". Функции поддерживают работу с параметрами (аргументами), например:

function MyFunction($i){"Helo $i"}
MyFunction world!
Helo world!

Более подробно о функциях можно узнать из справки:

help about_functions

Сценарии PowerShell

Сценарий PowerShell представляет собой блок кода на языке PowerShell, который хранится во внешнем файле с расширением .ps1. Анализ синтаксиса сценария производится при каждом его запуске.

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

Внешние исполняемые файлы в PowerShell

Последний тип команд, запускаемых в PowerShell, внешние исполняемые файлы, которые выполняются не оболочкой, а выполняются операционной системой обычным образом. Из оболочки PowerShell можно запускать любые внешние команды интерпретатора .cmd (xcopy, more etc), просто указывая их имена.

Псевдонимы командлетов PowerShell

Командлеты PowerShell соответствуют шаблону "глагол-существительное" и часто бывают слишком длинными для их запоминания и дальнейшего использования. Псевдонимы командлетов PowerShell дают возможность пользователям выполнять командлеты по их альтернативным именам. Предварительно в PowerShell определено

Просмотреть список текущих псевдонимов для командлетов можно с помощью команды:

get-alias

Псевдонимы командлетов PowerShell делятся на два типа. Первый тип предназначен для совместимости имен с разными интерфейсами других оболочек - другими словами это псевдонимы команд других оболочек (в т.ч. UNIX) таких как например ls, cat и пр..

Псевдонимы второго типа (стандартные псевдонимы) в PowerShell образуются из имен командлетов, которым они соответствуют. Например глагол Get сокращается до g, глагол Set сокращается до s, существительное Location сокращается до l и т.д.. Таким образом, командлету Set-Location соответствует псевдоним sl, а командлету Get-Location псевдоним gl

Установить свой псевдоним для командлета можно командой:

set-alias -name AliasName -value Get-cmdletsName

Более подробную справку о псевдонимах командлетов PowerShell можно получить выполнив команду:

help about_aliases

Диски PowerShell

Кроме обычных локальных или сетевых дисков (C:, D: и пр.) оболочка PowerShell поддерживает специальные (виртуальные) диски PowerShell, связанные с хранилищами данных разных типов.

Например по умолчанию в PowerShell разделу реестра HKEY_LOCAL_MACHINE сопоставлен виртуальный диск HKLM:, псевдонимам сопоставлен диск Alias:, а хранилищу сертификатов цифровых подписей - диск cert:. Для получения списка дисков PowerShell используйте команду:

get-psdrive

С помощью командлета New-PSDrive можно создавать собственные пользовательские диски, например:

new-psdrive -name docs -psprovider filesystem -root 'C:\path to folder'
or
new-psdrive -name Micros -psprovider registry -root 'HKLM\Software\Microsoft'

Провайдеры PowerShell

Провайдеры в PowerShell - это .NET-приложение, предоставляющее пользователям PowerShell доступ к данным из определённого специализированного хранилища в согласованном формате, напоминающих структуру обычных дисков файловой системы.

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

Провайдер       Содержимое хранилища
---------       --------------------
Alias           Псевдонимы PowerShell
Certificate     Сертификаты X509 для цифровых подписей
Environment     Переменные среды Windows
FileSystem      Диски файловой системы, каталоги и файлы
Function        Функции PowerShell
Registry        Реестр Windows
Variable        Переменные PowerShell

Дополнительно к встроенным провайдерам PowerShell, можно создавать свои собственные и устанавливать провайдеры, созданные другими разработчиками (например для доступа к Active Directory или почте Microsoft Exchange).

Новые провайдеры добавляются в оболочку PowerShell путем установки специальных оснасток PowerShell, в которых также могут находится дополнительные командлеты. Дополнительную информацию можно получить командой:

help about_pssnapins

Ключевые особенности Windows PowerShell 2

Remoting

Windows PowerShell 2.0 может запускать команду на одном или более удаленных компьютеров с одного рабочего места, на котором запущен Windows PowerShell. PowerShell remoting предоставляет несколько вариантов соединения: интерактивный (1:1), fan-out (1: многие) и fan-in (многие:1 с использованием модели хостинга IIS).

Integrated scripting Environment

PowerShell Integrated scripting Environment (ISE) предоставляет возможность запускать команды, редактировать и отлаживать скрипты в GUI. Основные функции ISE включают в себя: подсветку синтаксиса, выборочное исполнение, графическое представление отладки, поддержку Unicode и контекстную помощь.

Модули

Модули позволяют разработчикам скриптов и администраторам разделять и организовывать их код Windows PowerShell в собственные повторно используемые элементы. Код из модулей исполняется в собственном контексте и не влияет ни на что вне модуля.

Продвинутые функции

Продвинутые функции — это функции с теми же возможностями и поведением, что и командлеты (cmdlets). Отличие в том, что они написаны полностью на языке Windows PowerShell, а не скомпилированы на C#.

Фоновые задачи

Windows PowerShell 2.0 позволяет запускать команды и выражения асинхронно и «в фоне» без взаимодействия с консолью.

События

Эта функция добавляет в движок инфраструктуры Windows PowerShell поддержку прослушивания, перенаправления и управления системными событиями.

Глобализация скриптов

Эта новая функция позволяет скриптам на Windows PowerShell отображать сообщения на том языке, на котором говорит пользователь и который установлен в системе.

Отладка скриптов

Были добавлены новые функции отладки в Windows PowerShell, которые позволят вам устанавливать точки остановки на линиях, колонках, переменных и командах и позволяет указать действие которое требуется выполнить, когда достигнута точка остановки.

Новые командлеты

Windows PowerShell 2.0 содержит более 100 встроенных командлетов. Эти командлеты, кроме всего прочего, позволяют вам выполнять компьютерозависимые задачи, задачи по обработке логов событий и управлению счетчиками производительности.

WinRM 2.0

WinRM — это реализация Microsoft протокола WS-Management Protocol — стандарта SOAP, дружелюбного к брэндмауерам, который позволяет общаться аппаратному обеспечению и операционным системам различных типов. Спецификация WS-Management Protocol определяет общий путь для системы для доступа и обмена управляющей информацией между IT-инфраструктурой.

WinRM 2.0 содержит следующие новые функции:

  • WinRM Client Shell API предоставляет функционал для создания и управления оснастками (shells) и опрерациями оснасток, командами и потоками данных на удаленных компьютерах;
  • WinRM Plug-in API предоставляет функционал который позволяет пользователю писать плагины реализующие какой-либо API для поддержки ресурсов или операций;
  • WinRM 2.0 содержит фреймворк узла (hosting framework). Поддерживаются две модели хостинга. Первая основана на IIS-сервере, вторая основан на сервисе WinRM;
  • Обход ассоциаций позволяет пользователю получать экземпляры классов Ассоциаций с использованием стандартного механизма фильтрации;
  • WinRM 2.0 поддерживает делегирование полномочий пользователя сразу нескольким удаленным компьютерам;
  • Пользователи WinRM 2.0 могут использовать командлеты Windows PowerShell для управления системой;
  • В WinRM был добавлен специальный набор квот, который предлагает лучшее QoS и распределение ресурсов сервера для одновременно работающих пользователей. Набор квот WinRM основан на инфраструктуре квот реализованной в сервисе IIS.

Системные требования

WinRM 2.0 и PowerShell 2.0 может быть установлен на следующие операционные системы:

  • Windows Server 2008 with Service Pack 2
  • Windows Server 2003 with Service Pack 2
  • Widows Vista with Service Pack 2
  • Windows Vista with Service Pack 1
  • Windows XP with Service Pack 3

Windows PowerShell 2.0 требует установленный Microsoft .NET Framework 2.0 SP1

Выполнение сценариев Windows PowerShell

Как правило в большинстве случаев любой командный интерпретатор используется для обработки предварительно написанных сценариев. Windows PowerShell обрабатывает файлы сценариев с расширением .ps1 но, по умолчанию политика Windows PowerShell запрещает обрабатывать любые файлы сценариев.

Для разрешения обработки файлов сценариев Windows PowerShell следует выбрать политику их выполнения. Типы политик:

  1. Restricted - Допускает отдельные команды, но скрипты выполнять нельзя. Препятствует выполнению всех файлов скриптов, включая файлы форматирования и конфигурации (PS1XML), файлы скриптов модулей (PSM1) и профили Windows PowerShell (PS1).
  2. AllSigned - Выполнение скриптов разрешено. Требует, чтобы все скрипты и файлы конфигурации были подписаны надежным издателем, в том числе скрипты, подготовленные на локальном компьютере. – Перед выполнением скриптов издателей, для которых еще не определено, являются ли они надежными, выводятся предупреждения. Имеется риск выполнения неподписанных скриптов из источников, отличных от Интернета, а также подписанных, но вредоносных скриптов.
  3. RemoteSigned - Выполнение скриптов разрешено. Требует наличия цифровой подписи надежного издателя у скриптов и файлов конфигурации, загружаемых из Интернета (включая электронную почту и программы мгновенного обмена сообщениями). Не требует наличия цифровых подписей у скриптов, выполняемых и написанных на локальном компьютере (не загруженных из Интернета). Имеется риск выполнения подписанных, но вредоносных скриптов.
  4. Unrestricted - Могут выполняться неподписанные скрипты. (Имеется риск выполнения вредоносных скриптов.) Предупреждает пользователя перед выполнением скриптов и файлов конфигурации, загруженных из Интернета.
  5. Bypass - Ничего не блокируется, и никакие предупреждения и запросы не появляются. Эта политика выполнения предназначена для конфигураций, в которых скрипт Windows PowerShell встроен в более крупное приложение, или для конфигураций, в которых Windows PowerShell является платформой для программы, у которой имеется собственная модель обеспечения безопасности.
  6. Undefined - В текущей области не задана политика выполнения. Если политика выполнения во всех областях имеет значение Undefined, действует политика выполнения Restricted, которая является политикой выполнения по умолчанию.

Области политик Windows PowerShell

Process - Действие политики выполнения распространяется только на текущий сеанс (текущий процесс Windows PowerShell). Политика выполнения хранится в переменной среды $PSExecutionPolicyPreference. Это значение удаляется, когда сеанс, в котором задана политика, закрывается.

CurrentUser - Действие политики выполнения распространяется только на текущего пользователя. Она хранится в разделе реестра HKEY_CURRENT_USER.

LocalMachine - Действие политики выполнения распространяется на всех пользователей текущего компьютера. Она хранится в разделе реестра HKEY_LOCAL_MACHINE.

Узнать какая политика применяется в данный момент можно с помощью команды (по умолчанию Restricted):

get-executionpolicy

Мы установим политику "RemoteSigned":

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Создание Сертификата и подпись скрипта Windows PowerShell

Для создания собственного сертификата подписи нужно использовать инструмент для создания сертификатов (MakeCert.exe). Этот инструмент входит в состав комплектов Microsoft .NET Framework SDK версии 1.1 и Microsoft Windows SDK.

Дополнительные сведения о синтаксисе и описание параметров инструмента MakeCert.exe см. в документе "Инструмент для создания сертификатов (MakeCert.exe)" (Certificate Creation Tool (MakeCert.exe)) в библиотеке MSDN по адресу http://go.microsoft.com/fwlink/?LinkId=119097.

Чтобы использовать инструмент MakeCert.exe для создания сертификата, нужно выполнить следующие команды в окне командной строки "Microsoft SDK CMD Shell"

 

Средство MakeCert.exe предложит ввести пароль для закрытого ключа. Использование пароля обеспечит невозможность использования сертификата без ведома владельца. Необходимо выбрать пароль, который можно запомнить. Этот пароль потребуется позднее для получения сертификата.

Чтобы убедиться в правильности создания скрипта, нужно использовать следующую команду для получения сертификата в хранилище сертификатов на компьютере. (Файл сертификата нельзя найти в каталоге файловой системы).

В командной строке Windows PowerShell введите:

get-childitem cert:\CurrentUser\my -codesigning

Эта команда использует поставщик сертификатов Windows PowerShell для просмотра информации о сертификате.

Подробнее о подписании скриптов Windows PowerShell можно узнать из справки выполнив команду:

get-help about_signing

Использование Windows PowerShell в тестовом режиме

В рунете о том как запускать Windows PowerShell в тестовом режиме инфы практически ноль, только одни рекомендации о тестировании скриптов в тестовом режиме и вовсе ничего о способах активации этого самого тестового режима.

Даже в буржуйнете на тему тестового режима довольно скудно представлена информация о использовании тестового режима.

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

 

Профили пользователей Windows PowerShell

Создав профиль Windows PowerShell, вы получаете возможность настраивать окружение и добавлять специфичные для сеанса элементы в каждый создаваемый сеанс.

Профиль Windows PowerShell - скрипт, который выполняется в момент запуска Windows PowerShell. Можно использовать профиль в качестве скрипта, выполняемого при входе в систему, для настройки окружения. Можно добавлять команды, псевдонимы, функции, значения, оснастки, модули и диски Windows PowerShell. Также можно добавлять в профиль другие специфичные для сеанса элементы, тогда они будут доступны в каждом сеансе и не будет необходимости их импортировать или создавать заново.

Windows PowerShell поддерживает несколько профилей для пользователей и ведущих программ. Однако PowerShell не создает профили. В этом разделе описаны профили; также рассказано, как создавать и обслуживать профили на компьютере.

Файлы профилей Windows PowerShell

Windows PowerShell поддерживает несколько файлов профилей. Кроме того, ведущие приложения Windows PowerShell могут поддерживать собственные профили, специфичные для приложения.

Например, консоль Windows PowerShell поддерживает следующие файлы основного профиля. Ниже они указаны в порядке приоритета. Первый профиль имеет наивысший приоритет.

Описание                    Путь
-----------                 ----
Текущий пользователь,       $Home\[My ]Documents\WindowsPowerShell\Profile.ps1
текущее ведущее приложение
 
Текущий пользователь,       $Home\[My ]Documents\Profile.ps1
все ведущие приложения
 
Все пользователи,           $PsHome\Microsoft.PowerShell_profile.ps1
текущее ведущее приложение
 
Все пользователи, все       $PsHome\Profile.ps1
ведущие приложения

Более подробную информацию о профилях даст команда:

help about_Profiles

Полезные программы для работы с Windows PowerShell

scriptomatic PowerShell Scriptomatic - программа для написания скриптов Windows PowerShell с использованием WMI классов. Скачать >>>


powergui PowerGUI - PowerGUI абсолютно бесплатен, равно как и библиотеки PowerGUI и форумы.

PowerGUI может помочь вам следующим образом:

  1. Позволяет вам выполнять сценарии PowerShell, не имея знаний в области языка сценариев
  2. Позволяет видеть сценарии, который PowerGUI создает, чтобы вы могли понять PowerShell, а также позволяет вам экспортировать эти сценарии (которые вы можете изменять и создавать из них собственные)
  3. Дает возможность добавлять библиотеки "PowerPack Libraries", чтобы можно было расширять функциональность до сотен других приложений и/или функций Windows
  4. Предлагает удобный редактор сценариев PowerShell, упрощающий работу со сценариями

Заключение

В заключении хочется отметить, что название PowerShell в полной мере отображает функционал программы. Немного длинноватые имена командлетов но, этот недостаток можно заменить псевдонимами. Также PowerShell содержит в себе хорошо организованную и локализированную справку, в которой иногда встречаются ошибки в синтаксисе приведённых примеров, как например отсутствие кавычки или открывающей/закрывающей скобки но, потому как этот инструмент направлен на как минимум опытных пользователей, то эти ошибки в примерах будут без труда замечены и исправлены пользователем.

PowerShell является поразительным, мощным и бесплатным инструментом. Он позволяет администраторам и аудиторам собирать информацию о своей Active Directory без особых усилий. Можно получать информацию об учетных записях пользователей, групп, домена и т.п. PowerShell была создана для обновления, анализа и изменения компьютеров Windows, поэтому она отлично подходит для данной работы.

Автор: Олег Головский

Об авторе
АдМинь БагоИскатель
АдМинь БагоИскатель ярый борец за безглючную работу любых механизмов и организмов во всей вселенной и потому пребывает в вечном поиске всяческих багов, а тот кто ищет как известно всегда находит. Когда что-то или кого-то вылечить не в состоянии, то со словами "Я в аду, а вы все черти" уходит в запой выйдя из которого снова берётся лечить неизлечимое.
Ещё статьи автора

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


Защитный код
Обновить

no-script
[ Подробнее... ]
13.75 megabytes