Как обновить версию powershell windows 10

Как обновить PowerShell

Инструкция:

  1. В первую очередь необходимо скачать пакет прикладных программ Windows Management Framework. Версия утилиты должна быть 5.1.
  2. Также потребуется установить клиент NET Framework 4.5.2.
  3. После этого нужно запустить Повер Шелл с расширенными правами доступа.
  4. Далее потребуется ввести исполняемый код «msiexec.exe /package PowerShell-7.0.0-win-x64.msi /quiet ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL=1 ENABLE_PSREMOTING=1 REGISTER_MANIFEST=1».
  5. Затем нужно выполнить перезагрузку системы. После рестарта консоль будет обновлена до последней версии.

Обратите внимание! Если обновления для PowerShell не могут установиться, необходимо скачать MSI-файл последней версии программного обеспечения и самостоятельно выполнить инсталляцию

Язык PowerShell

PowerShell – это объектно-ориентированный скриптовой язык программирования. Он используется для написания команд управления всеми компонентами операционной системы Windows в оболочке Windows PowerShell, а также для написания сценариев автоматизации задач администрирования в интегрированной среде сценариев Windows PowerShell (ISE). Язык PowerShell хоть и создан для задач администрирования, он является полноценным скриптовым языком программирования, так как имеет программные конструкции, которые присутствуют в каждом языке программирования, такие как: условия, циклы, обработка ошибок, работа с переменными, объектами, массивами.

Язык PowerShell имеет единый синтаксис написания команд и структуру именования этих команд по принципу «Глагол-Существительное», что делает данный язык интуитивно понятным как для программистов, так и для системных администраторов.

Как запустить скрипт PowerShell в Windows

Для запуска скрипта с расширением .ps1 нужно открыть консоль PowerShell и затем указать полный путь до файла. Вы также можете перейти в папку со скриптом либо с помощью команды cd, либо, если вы хотите полностью окунуться в стиль PowerShell, то можете использовать Set-Location.

Например, мне нужно перейти в папку C:\Users\Администратор\Downloads\WinPwn-master\:

Set-Location C:\Users\Администратор\Downloads\WinPwn-master\

Если вы просто попытаетесь запустить скрипт, то почти наверняка столкнётесь с ошибкой, что запуск скриптов запрещён. Для исправления ошибки выполните команду:

Set-ExecutionPolicy unrestricted

Подробности смотрите в статье «Ошибка «Невозможно загрузить файл ….ps1, так как выполнение сценариев отключено в этой системе» (РЕШЕНО)»

Запуск скрипта с помощью Import-Module

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

Например для запуска WinPwn нужно вначале импортировать файл с функциями:

Import-Module .\WinPwn.ps1

А после этого можно вызывать содержащиеся в файле функции:

WinPwn

Адаптация скриптов PowerShell для Linux

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

В Invoke-TheHash есть функция Invoke-SMBEnum, которая выполняет перечисление пользователей, групп, сетевых сессий и совместных ресурсов. В Windows эта функция работает отлично. Попробую использовать её в Linux.

Запускаю консоль PowerShell:

pwsh

Перехожу в папку с уже скаченными скриптами:

cd ./bin/Invoke-TheHash/

Импортирую файл с нужной функцией:

Import-Module .\Invoke-SMBEnum.ps1

Запускаю:

Invoke-SMBEnum -Target 192.168.0.53 -Action All -Username HackWare-mial\Администратор -Hash 5187b179ba87f3ad85fea3ed718e961f -verbose

И получаю ошибку «Cannot find path ‘computername’ because it does not exist.», она означает, что не получается найти путь computername (имя компьютера), т. к. путь не существует. Ошибка возникла в этой строке:

$auth_hostname = (Get-ChildItem -path env:computername).Value

Если попытаться выполнить отдельно команду из этой строки:

Get-ChildItem -path env:computername

то она вызовет эту же самую ошибку:

Get-ChildItem: Cannot find path 'computername' because it does not exist.

Можно предположить (лучше посмотреть в справке, но мне лень туда лезть), что env имеет отношение к переменным окружения, а computername — это имя переменной, которая содержит (как следует из названия) имя компьютера. Судя по всему, в Linux эта переменная окружения не существует.

Самое простое решение — прописать это имя вручную. Для этого открываю файл Invoke-SMBEnum.ps1 текстовым редактором, нахожу там строку

$auth_hostname = (Get-ChildItem -path env:computername).Value

И меняю её на такую строку:

$auth_hostname = 'hackware-mial'

То есть я просто прописал имя компьютера вместо получения его с помощью функции.

Важно помнить, что после импорта функция будет считываться не из файла, который я изменил, а из памяти. Поэтому чтобы PowerShell увидел сохранённые в файле изменения, нужно заново выполнить импорт файла — для этого пришлось закрыть (CTRL+d) и открыть заново PowerShell:

pwsh

Импортируем файл:

cd ./bin/Invoke-TheHash/
Import-Module .\Invoke-SMBEnum.ps1

И после этого вновь запускаю команду:

Invoke-SMBEnum -Target 192.168.0.53 -Action All -Username HackWare-mial\Администратор -Hash 5187b179ba87f3ad85fea3ed718e961f -verbose

В этот раз команда сработала.

Мораль:

  • после внесения изменений в файл нужно заново его импортировать (возможно, даже перезайти в PowerShell)
  • некоторые проблемы с запуском скриптов PowerShell в Linux достаточно просто решить самостоятельно

Как в Windows 10 запустить PowerShell — 2 способ

Еще один способ, как открыть Windows PowerShell в операционной системе Windows 10 из меню «Пуск».

Выполните необходимые действия:

  1. Кликните левой кнопкой мыши по меню «Пуск».
  2. В списке установленных программ найдите папку «Windows PowerShell», из которой можно запустить PowerShell в различных режимах:
  • Windows PowerShell — запуск обычной оболочки.
  • Windows PowerShell (x86) — запуск оболочки в 32-битной ОС.
  • Windows PowerShell ISE — запуск интегрированной среды сценариев PowerShell (Windows PowerShell Integrated Scripting Environment).
  • Windows PowerShell ISE (x86) — запуск интегрированной среды сценариев для 32-битных систем или объектов.

Windows PowerShell ISE — оболочка PowerShell с расширенными возможностями.

При необходимости, пользователь может запустить PowerShell от имени администратора Windows 10. Запуск от администратора Windows 10 проходит следующим образом:

  1. Нужно щелкнуть правой кнопкой мыши по значку Windows PowerShell.
  2. В контекстном меню «Задачи» нажмите на пункт «Запуск от имени администратора».

  1. На Рабочем столе компьютера откроется окно Windows PowerShell.

Сценарии, функции и модули в Windows PowerShell

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

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

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

Важно!

По умолчанию выполнение сценариев в Windows запрещено! Для того чтобы посмотреть политику выполнения сценариев выполните командлет Get-ExecutionPolicy. В результате он вернет действующую политику, например:

  • Restricted – блокируется выполнение любых сценариев (значение по умолчанию);
  • AllSigned – разрешено выполнение сценариев, которые имеют цифровую подпись;
  • RemoteSigned – разрешено выполнение локальных сценариев, все скачанные сценарии должны иметь цифровую подпись;
  • Unrestricted — разрешено выполнение любых сценариев (не рекомендуется, так как небезопасно!).

Для разрешения выполнения сценариев необходимо использовать командлет Set-ExecutionPolicy с одним из вышеперечисленных параметров.

Например, для разрешения выполнения локальных сценариев выполним следующую команду, и согласимся с внесением изменений, нажав Y.

Set-ExecutionPolicy RemoteSigned

1 Set-ExecutionPolicy RemoteSigned

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

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

Для этого необходимо указать ключевое слово Function и затем в фигурных скобках {} написать алгоритм работы этой функции, т.е. набор команд (например, какая-нибудь часто используемая процедура: создать пользователя с определенными правами, очистить определенные каталоги и так далее). Потом необходимо сохранить все это в сценарий, но только уже с расширением .psm1, так как этот файл будет являться уже модулем.

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

Get-ChildItem Env:\PSModulePath | Format-Table -AutoSize

1 Get-ChildItem Env\PSModulePath|Format-Table-AutoSize

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

Способ № 3: через «Диспетчер задач»

Бывают случаи, когда кнопка «Пуск» не отвечает или появились другие неполадки, не позволяющие открыть Windows PowerShell способами описанными выше. Тогда можно создать задачу вручную:

    1. Открываем «Диспетчер задач» — сделать это можно через правый клик мыши на панели задач или с помощью комбинации клавиш Ctrl+Shift+Esc. Привыкайте использовать комбинации горячих клавиш, они намного ускоряют работу и помогают в различных ситуациях — снять задачу, если какая-то программа зависла, или создать новую.
    2. Затем кликаем по кнопке «Файл» и выбираем «Запустить новую задачу».

    3. В диалоговом окне пишем команду «PowerShell».
    4. Отмечаем галочкой пункт «Создать задачу с правами администратора» и кликаем «Ок».

Сравнение командной строки с PowerShell

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

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

Как открыть PowerShell Windows 10 — 1 способ

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

Для запуска оболочки в Windows 10 можно использовать контекстное меню кнопки «Пуск»:

  1. Щелкните правой кнопкой мыши по меню «Пуск», или нажмите на клавиши «Win» + «X».
  2. В контекстном меню откроются пункты «Windows PowerShell» и «Windows PowerShell (администратор)».

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

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

  1. Запустите приложение «Параметры».
  2. Откройте «Персонализация».
  3. Войдите в раздел «Панель задач».
  4. В опции «Заменить командную строку оболочкой Windows PowerShell в меню, которое появляется при щелчке правой кнопкой мыши по кнопке “Пуск” или при нажатии клавиш Windows + X» передвиньте ползунок переключателя в положение «Включено».

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

Фоновое исполнение заданий

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

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

В Windows PowerShell для работы с фоновыми заданиями есть следующие командлеты:

  • Start-Job – запустить фоновую задачу;
  • Stop-Job – остановить фоновую задачу
  • Get-Job – посмотреть список фоновых задач;
  • Receive-Job – посмотреть результат выполнения фоновой задачи;
  • Remove-Job – удалить фоновую задачу;
  • Wait-Job – перевести фоновую задачу на передний план, для того чтобы дожидаться ее окончания.

Для запуска в фоновом режиме необходимо написать команду Start-Job, а в фигурных скобках {} команду или набор команд, которые необходимо выполнить в фоновом режиме.

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

Запуск задачи в фоновом режиме

Start-Job {Get-Service}

1 Start-Job{Get-Service}

Смотрим на список задач запущенных в фоновом режиме

Get-Job

1 Get-Job

Отображаем результат работы задания Job1

Receive-Job Job1

1 Receive-Job Job1

Как видим, у нас появилась задача со статусом «Completed», т.е. она уже выполнилась (просто Get-Service отрабатывает быстро).

Для того чтобы посмотреть результат работы фоновой задачи, т.е. командлета Get-Service, мы выполнили команду Receive-Job и передали ей имя задания (можно и значение идентификатора). В результате у нас отобразился список служб.

Удаленное управление на PowerShell

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

Существует несколько способов удаленного управления:

  • С помощью параметра –ComputerName (есть у многих команд). Другими словами Вы передаете имя компьютера, на котором необходимо выполнить команду, в качестве параметра. Способ обладает недостатком, так как ограничивается выполнением одной команды;
  • С помощью сессий. Командлет Enter-PSSession (интерактивный сеанс). Таким способом Вы подключаетесь к удаленному компьютеру и все команды, которые Вы будете набирать в оболочке PowerShell, будут выполняться на удаленном компьютере так же, как если бы Вы набирали команды непосредственно на удаленном компьютере. Способ также обладает недостатком, так как сеанс ограничивается одним компьютером;
  • С помощью командлета Invoke-Command. С помощью данного способа можно выполнять команды или сценарии как на одном компьютере, так и на нескольких.

Например, чтобы подключиться к удаленному компьютеру (в примере ниже ServerName) интерактивным сеансом выполните следующую команду:

Enter-PSSession ServerName

1 Enter-PSSession ServerName

Особенности запуска скриптов в PowerShell

Необходимо упомянуть об особенностях запуска скриптов PowerShell. Данное средство администрирования и автоматизации обладает очень высоким потенциалом и является мощным инструментом, поэтому разработчиками было принято решение ограничить запуск скриптов по умолчанию. Существует 4-е основных политики безопасности, регулирующих запуск скриптов на целевом устройстве. Вы можете ознакомиться с ними на данном слайде. У каждой политики свои особенности, и они применимы для разных сценариев. В нашем случае, для практической работы мы разрешим выполнение неподписанных скриптов используя политику «unrestricted»

Как запустить обновления Виндовс Update применив Виндовс PowerShell?

Для запуска обновлений Виндовс Апдейтес в Виндовс PowerShell нужно ручным методом произвести установку модуля Windows Update, произвести загрузку обновлений и их установку.

  1. Чтобы это сделать, открываем Виндовс PowerShell как администратор;
  2. Затем, в открывшемся окошке нам необходимо набрать следующее сочетание: Install-Module PSWindowsUpdate и нажать «Ввод» для установки модуля Виндовс Апдейт под Виндовс PowerShell;
  3. После этого вставляем выражение: Get-WindowsUpdate чтобы подключиться к серверам Виндовс Апдейт и загрузкам обновлений, в том случае, если они появились;
  4. Далее, нам необходимо вставить команду: Install-WindowsUpdate которая поможет установить обновления Виндовс, которые мы загрузили на ПК (Разумеется, после ввода каждой из этих команд нажимаем Enter).

Powershell атрибуты пользователя. Локальные пользователи.

Для работы с учетными записями локальных пользователей используется модуль Local Accounts, доступный в репозитории Powershell Gallery(как установить модули описано здесь).

Найти пользователя можно с помощью командлета Get-LocalUser.

Синтаксис отличается от Get-ADUser. По умолчанию, без параметров Get-LocalUser выводит список всех локальных пользователей на компьютере:

Для получения информации по конкретному пользователю, нужно указать его параметры. Чтобы посмотреть доступные параметры используем командлет Get-Member:

Как можно видеть, параметров у пользователя намного меньше.

И еще, здесь есть отличие от Get-ADUser, параметр Name, который в Get-ADUser обозначал полное имя пользователя, в Get-LocalUser означает логин пользователя. Убедиться в этом можно на примере конкретного пользователя. Чтобы найти пользователя по атрибуту, отличному от его логина(Name) и SID, нужно задействовать командлет Where-Object:

Изменение атрибутов производится командлетом Set-LocalUser. Например, для изменения срока действия учетной записи с 31.08.2019 на 31.12.2020 команда выглядит так:

PowerShell

Get-LocalUser | Where-Object AccountExpires -like 08*31*2019* | Set-LocalUser -AccountExpires 31.12.2020

1 Get-LocalUser|Where-ObjectAccountExpires-like08*31*2019*|Set-LocalUser-AccountExpires31.12.2020

Аналогично меняются и другие атрибуты(Description, Fullname и т.д.)

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

Вот такая коротенькая памятка по поиску и изменению атрибутов пользователей получилась.

Еще статьи по использованию Powershell в администрировании можно посмотреть по тегу Powershell.

Поиск PowerShell в Windows 10, 8.1, 8.0 и 7 Finding PowerShell in Windows 10, 8.1, 8.0, and 7

Иногда найти консоль или ISE (интегрированную среду сценариев) PowerShell в Windows бывает непросто, так как их расположение в разных версиях Windows отличается. Sometimes locating PowerShell console or the Integrated Scripting Environment (ISE) in Windows can be difficult, as its location moves from one version of Windows to the next.

Следующие таблицы помогут найти PowerShell в вашей версии Windows. The following tables should help you find PowerShell in your Windows version. Все указанные версии являются оригинальными, сразу после выпуска и без обновлений. All versions listed here are the original version, as released, with no updates.

Консоль For Console

Версия Version Location Location
Windows 10 Windows 10 Щелкните значок Windows в левом нижнем углу и начните вводить PowerShell. Click left lower corner Windows icon, start typing PowerShell
Windows 8.1, 8.0 Windows 8.1, 8.0 На начальном экране начните вводить PowerShell. On the start screen, start typing PowerShell. Если вы находитесь на рабочем столе, щелкните значок Windows в левом нижнем углу и начните вводить PowerShell. If on desktop, click left lower corner Windows icon, start typing PowerShell
Windows 7 с пакетом обновления 1 (SP1) Windows 7 SP1 Щелкните значок Windows в левом нижнем углу и в поле поиска начните вводить PowerShell. Click left lower corner Windows icon, on the search box start typing PowerShell

ISE For ISE

Версия Version Location Location
Windows 10 Windows 10 Щелкните значок Windows в левом нижнем углу и начните вводить ISE. Click left lower corner Windows icon, start typing ISE
Windows 8.1, 8.0 Windows 8.1, 8.0 На начальном экране введите PowerShell ISE. On the start screen, type PowerShell ISE. Если вы находитесь на рабочем столе, щелкните значок Windows в левом нижнем углу и введите PowerShell ISE. If on desktop, click left lower corner Windows icon, type PowerShell ISE
Windows 7 с пакетом обновления 1 (SP1) Windows 7 SP1 Щелкните значок Windows в левом нижнем углу и в поле поиска начните вводить PowerShell. Click left lower corner Windows icon, on the search box start typing PowerShell

Get-SMBOpenFile

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

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

Что способствовало появлению Windows PowerShell?

До появления PowerShell существовали (и существуют) следующие инструменты для автоматизации и администрирования сервисов: командная строка Windows и Windows Script Host. Но у этих технологий есть недостатки.

У командной строки Windows есть и возможность выполнять какие-то административные задачи и возможность записать алгоритм действий, сохранив его в виде скрипта (bat-файла), при этом можно использовать некие элементы программирования, например, использовать переменные, условные конструкции и даже что-то вроде циклов.

Большинство программных продуктов имеет консольный интерфейс, т.е. мы можем управлять программой, используя командную строку, при этом экономя ресурсы за счет отсутствия затрат на работу графического интерфейса. Компания Microsoft для серверной операционной системы Windows Server даже выпускает редакции без графического интерфейса (Server Core, в Windows Server 2016 даже есть Nano Server), но всего этого недостаточно, так как возможности командной строки ограничены, т.е. написать какую-то сложную логику для автоматизации чего-либо мы не сможем, а если и сможем, то на это нам потребуется время и знания.

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

Технология Windows Script Host позволяет выполнять все административные задачи, что и командная строка, включая их автоматизацию путем написания WSH скриптов, но здесь мы уже можем использовать полноценные языки программирования (VBScript и JScript), т.е. можно реализовывать сложную логику и алгоритмы. К тому же с помощью WSH мы управляем программными продуктами через объектный интерфейс, другими словами Windows Script Host намного «круче» чем командная строка. Но данная технология также не стала тем идеальным инструментом администрирования и автоматизации этого администрирования для системных администраторов, так как Windows Script Host требовал знаний вышеперечисленных языков программирования, что для системных администраторов на самом деле лишнее. Администраторам нужно всего лишь простой инструмент администрирования с возможностью запрограммировать какие-то действия, а углубляться в объектные модели программных продуктов на языках программирования VBScript и JScript им не хочется.

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

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
3D-тест
Добавить комментарий

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