Пишем программы (скрипты) в блокноте windows

Установка службы печати

Из диспетчера серверов, куда вы хотите установите службу печати, нажмите «Добавить роли и компоненты 1».

При запуске мастера нажмите «Далее 1» .

Выберите вариант на основе роли 1 или функции 1 и нажмите «Далее 2».

Выберите сервер 1 и нажмите Далее 2.

Установите флажок для печати и сканирования документов 1.

Щелкните «Добавить компоненты» 1.

Выбрана роль служб печати, щелкните «Далее 1».

Пропустите список функций, нажав кнопку «Далее 1».

Отображается сводка служб печати, нажмите» Далее 1 «.

Выберите службу сервера печати 1 и нажмите Далее 2.

Нажмите кнопку «Установить 1».

Подождите, пока устанавливается служба печати…

Установка завершена, выйдите из мастера, нажав кнопку «Закрыть 1».

Усиление цифровой обороны

Для максимальной отдачи необходимо выполнить ещё одну настройку — включить логирование «командной строки процесса». Тогда на рабочих станциях и серверах, к которым применяется этот параметр политики, сведения из командной строки будут заноситься в журнал событий «Безопасность» (Security) с ID 4688.

Рисунок 10. Журналирование командной строки процесса

Путь к политике: Конфигурация компьютера / Административные шаблоны / Система / Аудит создания процессов (Computer Configuration / Administrative Templates / System / Audit Process Creation). Имя: «Включать командную строку в события создания процессов» (Include command line in process creation events).

Рисунок 11. Путь к аудиту создания процессов

Включаем политику, выставив соответствующее значение, и нажимаем «Применить» (Apply).

Рисунок 12. Настройка «Включать командную строку в события создания процессов» 

После включения этой политики в журнале событий «Безопасность» (Security) в событиях с кодом 4688 появится дополнительное значение «Командная строка процесса» (Process Command Line), где будет отображаться тело исполняемой команды.

В примере ниже демонстрируется, как это поможет заглянуть чуть глубже. На первый взгляд в событии происходит запуск легитимного процесса «opera_autoupdate.exe», но вот строка «Process Command Line» больше похожа на запуск утилиты «mimikatz». Без активированной политики «Включать командную строку в события создания процессов» мы этого не зафиксируем.

Рисунок 13. Детектирование mimikatz

Укрепим нашу оборону и полным журналированием работы самого мощного инструмента ОС Windows — PowerShell. Для этого необходима версия PowerShell 5.0 или выше.

PowerShell 5.0 / 5.1 предустановлен в Windows 10, Windows Server 2016 и Windows Server 2019. Для остальных операционных систем необходимо обновить модуль Windows Management Framework.

Список поддерживаемых ОС:

  • Windows Server 2012 R2
  • Windows Server 2012
  • Windows Server 2008 R2 SP1
  • Windows 8.1
  • Windows 8
  • Windows 7 SP1

Скачайте с сайта Microsoft соответствующую версию, выполните установку и перезагрузку хоста. Также обязательным требованием является наличие Microsoft .NET Framework 4.5 или выше.

Включим регистрацию блоков сценариев PowerShell через соответствующую политику. Она находится по следующему пути: Административные шаблоны / Компоненты Windows / Windows PowerShell (Administrative Templates / Windows Components / Windows PowerShell). Имя: «Включить регистрацию блоков сценариев PowerShell» (Turn on PowerShell Script Block Logging)

Рисунок 14. Путь к аудиту Windows PowerShell

Включаем политику и нажимаем «Применить» (Apply). При этом устанавливать галочку напротив поля «Регистрация начала или остановки вызова блоков сценариев» (Log script block invocation start / stop events) не нужно. Данная функция увеличивает количество регистрируемых событий, которые не несут полезной информации.

Рисунок 15. Включить регистрацию блоков сценариев PowerShell

После включения этой политики PowerShell будет регистрировать в журнале событий трассировки Microsoft-Windows-PowerShell/Operational с кодом события 4104 все блоки сценариев, в том числе — путь, тело скрипта и все используемые командлеты.

Рисунок 16. Пример регистрируемого события 4104

Хорошей практикой является увеличение размера самих журналов, даже если вы используете SIEM или сервер сборщика событий (Windows Event Collector). Например, журнал «Безопасность» (Security) по умолчанию имеет размер 20 МБ. При настроенном аудите на типичном АРМ этого объёма хватит на журналирование нескольких дней, на сервере — нескольких часов, а на контроллере домена 20 МБ не хватит ни на что.

Рекомендуем для всех основных журналов следующие объёмы:

  • журнал «Установка» (Setup) — не менее 10 МБ,
  • журнал «Система» (System) — не менее 50 МБ,
  • журнал «Приложение» (Application) — не менее 50 МБ,
  • журнал «Безопасность» (Security) — не менее 200 МБ (для контроллера домена — не менее 500 МБ).

При этом оставляем функцию перезаписи старых событий (по умолчанию она активирована).

Рисунок 17. Настройка хранения журналов аудита

Пример по работе с процессами в Powershell

Директории, откуда работает основная часть программ относятся к Windows и Program Files. Работа программ из Application Data, например, всегда подозрительна. Мы можем мониторить запуск процессов из этой директории. Нам нужно объявить переменные с путями, которые не будут вызывать подозрений и проверять путь процессов на вхождение:

Второй пример выполнения — это запуск всех файлов из папки. Обычно скрипты применяются через групповые политики в момент входа пользователя. Если таких скриптов 10, то мы можем поместить их в определенную папку и запускать из планировщика задач указывая только директорию и расширение запускаемого файла и перенаправлять ошибки в индивидуальный файл:

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

Например в первом случае после пути C:\Users* мы ожидаем еще символы и установив звездочку мы это указали. В случае Get-ChildItem ситуация похожая, но более подробно мы обсуждали в статье поиск файлов в Powershell.

По умолчанию мы получаем данные по CPU в секундах, но следующий скрипт вернет процент использования:

 Далее эту функцию можно запускать на удаленных компьютерах:

Рекомендую

Администрирование службы печати

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

Откройте консоль, доступная из меню «Пуск».

После открытия консоли распакуйте узел 1 «Серверы печати» для доступа к локальному серверу.

Теперь посмотрим, как добавлять драйверы и принтеры.

Установить драйверы

Получить драйверы, которые вам нужны, в зависимости от моделей принтера и копировальные аппараты, которые вы собираетесь установить. Если ваш компьютер состоит из 32-разрядных рабочих станций, вы также должны загрузить драйверы x86.

В консоли управления печатью щелкните правой кнопкой мыши Драйверы 1 и нажмите Добавить Драйвер 2.

При запуске мастера добавления драйвера принтера нажмите Далее 1.

Выберите тип процессора 1, затем нажмите Далее 2.

Щелкните предоставленный диск… 1, чтобы выбрать драйвер.

Выберите файл драйвера inf 1 и нажмите «Открыть 2».

Нажмите OK 1, чтобы подтвердить выбор файла.

Выберите доступный принтер 1 и нажмите Далее 2.

Нажмите Готово 1, чтобы подтвердить установки драйвера и закройте мастер.

Теперь драйвер добавлен на сервер.

Установка принтера на сервере печати

Теперь, когда у нас есть драйвер для установки, мы увидим, как добавить принтер.

Щелкните правой кнопкой мыши «Принтеры 1» и выберите «Добавить принтер 2».

При запуске мастера выберите метод установки, для сетевого принтера с IP-адресом выберите Добавить принтер TCP/IP или веб-службу по IP-адресу или имени хоста 1 и нажмите Далее 2.

Выберите тип устройства 1, введите IP-адрес 2 и нажмите Далее 3.

Дайте принтеру имя 1, задайте имя общего ресурса 2 и нажмите Далее 3.

Отображается обзор параметров, также видно, что драйвер был автоматически обнаружен при модельный уровень. Нажмите Далее 1, чтобы подтвердить добавление принтера..

Дождитесь установки принтера…

После установки принтера закройте мастер, нажав кнопку« Готово »1.

Принтер доступен из узла» Принтеры 1 «.

Чтобы мы могли увидеть разницу, я установил на сервере второй копировальный аппарат, но на этот раз с указанием типа порта. Перейдите к узлу Порты 1 в Консоли управления печатью. Мы видим два добавленных порта, связанных с копировальными аппаратами 2.

Настройка принтера

В списке принтеров, доступных на сервере печати, щелкните правой кнопкой мыши принтер 1, чтобы настроить его, и выберите Свойства 2.

Вкладка« Общие »позволяет настроить имя принтера, видимого с сервера, отображает сводку функций и запускает печать тестовой страницы.

Вкладка Sharing используется для настройки имени SMB.

Вкладка» Порты «позволяет изменять и настраивать порт принтера на сервере печати. ​​

Вкладка» Дополнительно «позволяет вам настроить используемый драйвер, а также параметры печати по умолчанию (черно-белая, двусторонняя….).

На вкладке» Безопасность «можно настроить разрешения для принтера. r как права NTFS для папки.

Настройка на компьютере с Windows

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

Обратите внимание на наличие имен наборов параметров, начинающихся с SSH. К этим наборам параметров относятся параметры SSH.

Установите последнюю версию Win32 OpenSSH

Инструкции по установке см. в разделе Начало работы с OpenSSH.

Примечание
Если вы хотите задать PowerShell в качестве оболочки по умолчанию для OpenSSH, см. раздел Настройка Windows для OpenSSH.

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

Создайте подсистему SSH, в которой размещается процесс PowerShell на удаленном компьютере:

Примечание
Расположение исполняемого файла PowerShell по умолчанию — . Расположение может различаться в зависимости от способа установки PowerShell.
Необходимо использовать краткое имя 8.3 для всех путей к файлам, содержащим пробелы. В OpenSSH для Windows обнаружена ошибка, блокирующая работу пробелов в путях к исполняемым файлам подсистемы. См. дополнительные сведения на сайте GitHub.
Обычно краткое имя 8.3 для папки в Windows — это . Тем не менее для проверки можно использовать следующую команду:

При необходимости включите проверку подлинности на основе ключа:

Дополнительные сведения см. в статье Управление ключами OpenSSH.

Перезапустите службу sshd.

Добавьте путь установки OpenSSH в свою переменную среды Path. Например, . Это позволит найти файл .

List Installed Printers on a Print Server

Let’s display the full list of printers installed on this computer:

As you can see, the command shows the printer name, type (local or network), driver, print port, whether the printer is shared and published in the Active Directory.

Most PrintManagement cmdlets can be used to view status and manage printers, drivers and print queues on remote computers (print servers). The name of the remote computer or server is specified as an argument of the –ComputerName parameter.

You can get information about installed printers on a remote computer using PowerShell command:

To display only a list of shared printers, use the command:

Выполнение сценария

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

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

Политика выполнения сохраняется в реестре, поэтому ее необходимо изменить только один раз на каждом компьютере.

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

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

или

Изменение вступает в силу немедленно.

Чтобы выполнить сценарий, введите полное имя файла скрипта и полный путь к нему.

Например, чтобы запустить сценарий Get-ServiceLog.ps1 в каталоге C:\Scripts, введите:

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

Например, чтобы запустить сценарий ServicesLog.ps1 в локальном каталоге, введите:

Если у скрипта есть параметры, введите параметры и значения параметров после имени файла скрипта.

Например, следующая команда использует параметр ServiceName скрипта Get-ServiceLog, чтобы запросить журнал действия службы удаленного управления Windows.

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

Запуск с помощью PowerShell

Начиная с PowerShell 3,0 можно запускать сценарии из проводника.

Чтобы использовать функцию «Запуск с помощью PowerShell», сделайте следующее:

Запустите проводник, щелкните правой кнопкой мыши имя файла скрипта и выберите команду «запустить с помощью PowerShell».

Функция «запустить с помощью PowerShell» предназначена для выполнения скриптов, которые не имеют обязательных параметров и не возвращают выходные данные в командную строку.

Дополнительные сведения см. в разделе about_Run_With_PowerShell.

Выполнение сценариев на других компьютерах

Чтобы запустить сценарий на одном или нескольких удаленных компьютерах, используйте параметр FilePath командлета.

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

Следующая команда запускает сценарий на удаленных компьютерах с именем Server01 и Server02.

Написание сценария

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

Чтобы написать сценарий, откройте новый файл в текстовом редакторе, введите команды и сохраните их в файле с допустимым именем файла с расширением.

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

Чтобы создать этот скрипт, откройте текстовый редактор или редактор скриптов, введите следующие команды, а затем сохраните их в файле с именем .

Параметры в скриптах

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

Параметры сценария работают как параметры функции. Значения параметров доступны для всех команд в скрипте. Все функции параметров функций, включая атрибут Parameter и его именованные аргументы, также допустимы в скриптах.

При выполнении скрипта пользователи заменяют параметры после имени скрипта.

В следующем примере показан скрипт с параметром ComputerName . Обе функции сценария могут обращаться к значению параметра ComputerName .

Чтобы выполнить этот скрипт, введите имя параметра после имени скрипта. Пример:

Дополнительные сведения о инструкции Param и параметрах функции см. в разделе about_Functions и about_Functions_Advanced_Parameters.

Написание справки для сценариев

Раздел справки для скрипта можно написать с помощью любого из двух следующих методов.

  • Comment-Based справки по сценариям

  • XML-Based справки по сценариям

    Создайте раздел справки на основе XML, например тип, который обычно создается для командлетов. При преобразовании разделов справки на несколько языков требуется справка на основе XML.

Чтобы связать скрипт с разделом справки на основе XML, используйте. Ключевое слово комментария справки Екстерналхелп. Дополнительные сведения о ключевом слове Екстерналхелп см. в разделе about_Comment_Based_Help. Дополнительные сведения о справке на основе XML см. в разделе как написать справку по командлетам.

Возврат значения выхода

По умолчанию скрипты не возвращают состояние выхода при завершении сценария. Для возврата кода выхода из скрипта необходимо использовать инструкцию. По умолчанию инструкция возвращает . Можно указать числовое значение, чтобы вернуть другое состояние выхода. Ненулевое значение кода выхода обычно сигнализирует об ошибке.

в Windows допускается любое число между и .

В UNIX разрешены только положительные числа в диапазоне от (0) до (255). Отрицательное число в диапазоне от до автоматически преобразуется в положительное число путем добавления
256. Например, преобразуется в .

В PowerShell инструкция задает значение переменной. в Windows командной оболочке (cmd.exe) оператор exit задает значение переменной среды.

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

Скрипты в модулях

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

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

Дополнительные сведения о модулях см. в разделе about_Modules.

Копирование числовых ячеек из 1С в Excel Промо

Решение проблемы, когда значения скопированных ячеек из табличных документов 1С в Excel воспринимаются последним как текст, т.е. без дополнительного форматирования значений невозможно применить арифметические операции. Поводом для публикации послужило понимание того, что целое предприятие с более сотней активных пользователей уже на протяжении года мучилось с такой, казалось бы на первый взгляд, тривиальной проблемой. Варианты решения, предложенные специалистами helpdesk, обслуживающими данное предприятие, а так же многочисленные обсуждения на форумах, только подтвердили убеждение в необходимости описания способа, который позволил мне качественно и быстро справиться с ситуацией.

Другие функции сценариев

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

  • — Можно использовать инструкцию, чтобы предотвратить выполнение скрипта без указанных модулей или оснасток и заданную версию PowerShell. Дополнительные сведения см. в разделе about_Requires.

  • — Содержит полный путь и имя выполняемого скрипта. Этот параметр допустим во всех скриптах. Эта автоматическая переменная появилась в PowerShell 3,0.

  • — Содержит каталог, из которого выполняется скрипт. В PowerShell 2,0 эта переменная допустима только в модулях скриптов ( ).
    Начиная с PowerShell 3,0, он действителен во всех скриптах.

  • — Автоматическая переменная содержит сведения о текущем скрипте, включая сведения о том, как он был запущен или вызван. Эту переменную и ее свойства можно использовать для получения сведений о скрипте во время его выполнения. Например, . Переменная Микомманд. path содержит путь и имя файла скрипта. . Строка содержит команду, которая запустила скрипт, включая все параметры и значения.

    Начиная с PowerShell 3,0, имеет два новых свойства, которые предоставляют сведения о скрипте, который вызывал или вызывает текущий скрипт. Значения этих свойств заполняются только в том случае, если вызывающий элемент или вызвавший объект является сценарием.

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

    • PSScriptRoot содержит каталог скрипта, вызвавшего или вызвавшего текущий скрипт.

    В отличие от и автоматических переменных, содержащих сведения о текущем скрипте, свойства пскоммандпас и PSScriptRoot этой переменной содержат сведения о скрипте, вызвавшем текущий скрипт.

  • Разделы данных. Вы можете использовать ключевое слово для разделения данных из логики в скриптах. Разделы данных также могут упростить локализацию. Дополнительные сведения см. в разделе about_Data_Sections и about_Script_Internationalization.

  • Подпись скрипта. Вы можете добавить цифровую подпись к сценарию. В зависимости от политики выполнения можно использовать цифровые подписи для ограничения выполнения скриптов, которые могут включать ненадежные команды. Дополнительные сведения см. в разделе about_Execution_Policies и about_Signing.

Как открыть «Управление печатью»

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

В окне «Выполнить»

Большинство системных утилит поддерживают запуск как из командной строки, так и из окна «Выполнить». Это довольно удобно, ведь эти утилиты открываются из любого окна, а потому к ним легко обратиться. Для этого необходимо выполнить следующие действия:

  • Откройте окно «Выполнить». Для этого используйте сочетание клавиш «Win» + «R».
  • В открывшемся окне введите команду «printmanagement.msc».

Если вместо нужного окна отобразилась ошибка «Не удается найти команду», значит, эта возможность ограничена администратором либо отключен необходимый компонент.

Для подключения компонента введите во встроенном поиске текст «Управление дополнительными функциями». Нажмите «Добавить компонент». Найдите пункт «Консоль управления печатью» и поставьте галочку напротив пункта. Нажмите «Установить». Если нужного компонента не нашлось, то вам необходимо открыть PowerShell («Win» + «X») и ввести команду: «Get-WindowsCapability -Name PRINT.MANAGEMENT* -Online | Add-WindowsCapability –Online». Повторите алгоритм с первого пункта.

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

В некоторых сборках Windows этот метод не всегда работает, да и добавление нового компонента ради одной команды – это нерационально (но необходимо). Потому предлагаем второй, более легкий способ.

Используя «Поиск»

Возможности «Поиска» в Windows 10 намного шире, чем в более старых версиях Винды. Через эту утилиту пользователь может выполнить команду, найти программу, встроенную утилиту, параметр, файлы или даже совершить поисковый запрос в интернет. Для запуска через опцию поиска необходимо следовать алгоритму ниже:

  • Откройте строку поиска. Для этого кликните по значку лупы в панели задач, либо зажмите сочетание клавиш «Win» + «S».
  • В открывшемся поле введите команду «printmanagement» либо фразу «Управление печатью».
  • Откройте найденный результат.

Готово. Однако, если ничего не было найдено, то, скорее всего, вы некорректно установили нужный компонент либо ваша ОС не поддерживает описываемую возможность. Однако существует и третий метод, возможно, поможет именно он.

Средства администрирования Windows

Средства администрирования – это довольно мощный инструмент, предоставляющий быстрый доступ к множеству встроенных утилит для работы как с ОС, так и аппаратной составляющей. Алгоритм действий:

В меню пуск найдите папку «Служебные». Раскройте ее.

  • Внутри найдите раздел «Администрирование».
  • Откроется новое окно, в котором нужно найти подраздел «Управление печатью».

Готово. По сути, все перечисленные выше методы приведут к одному и тому же результату. Примечание: эти методы не будут работать в ОС Windows 10 Home. В таком случае пользователь может использовать только утилиту «Принтеры и сканеры», которую легко найти через встроенный поиск.

1С:Предприятие Бухгалтерия переход с редакции 2.0 на 3.0. Практика перевода информационной базы для работы в управляемом приложении. Промо

Из информационного выпуска 1С № 16872 от 08.07.2013г. стало известно об относительно скором необходимом переходе на редакцию 1С:Бухгалтерия 3.0. В данной публикации будут разобраны некоторые особенности перевода нетиповой конфигурации 1С:Бухгалтерия 2.0 на редакцию 3.0, которая работает в режиме «Управляемое приложение».
Публикация будет дополняться по мере подготовки нового материала. Публикация не является «универсальной инструкцией».

Update 3. Права доступа. 14.08.2013
Update 4. Добавлен раздел 0. Дополнен раздел 4. Добавлен раздел 7. Внесены поправки, актуализирована информация. 23.11.2013.

1 стартмани

3. Добавьте драйвер принтера на сервер печати в Windows Server 2016

Шаг 1 Для этого мы выбираем наш сервер, нажимаем правой кнопкой мыши на строке драйверов и выбираем опцию Добавить драйвер.

Шаг 2 Появится следующее окно.

Шаг 3 Нажмите « Далее» и выберите архитектуру процессора, в которой установлена ​​роль.

Шаг 4 Снова нажмите Далее, и появится следующее окно, в котором мы должны выбрать модель нашего принтера, или у нас есть следующие опции:

Центр обновления Windows

Это позволяет нам искать контроллер непосредственно в сети .

Использовать диск

Мы можем найти драйверы принтера прямо на компьютере.

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

Шаг 6 Теперь мы видим, что драйверы выбранного принтера установлены. Таким же образом мы должны добавить драйверы для 32-разрядной архитектуры, поскольку в организации будет 32 и 64-разрядные компьютеры.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: