Если PowerShell кажется вам сложным для использования его для повседневных задач, "круто" может быть не тем словом, которое у вас ассоциируете с ним. Но PowerShell является основной частью Exchange, Windows Server и SQL Server, и он обладает огромными возможностями, которые мы все должны понять, принять и использовать, чтобы облегчить и автоматизировать наши текущие дела.
Я собираюсь немного поразвлечься и показать вам несколько хитростей, которые определенно пригодятся вам в решении нудных задач на работе. Кроме того, вы будете выглядеть намного круче в глазах ваших коллег, когда сможете решить проблему из командной строки. Согласитесь, это выглядит привлекательно, чем щелкать правой кнопкой мыши и что-то исправлять.
Будьте очень осторожны так как это инструмент достойный своего названия (Power – Сила, Shell – Оболочка). PowerShell может легко вызвать массовые изменения конфигурации, как положительные, так и отрицательные, поэтому для безопасности создайте тестовую или лучше всего виртуальную среду для вашего обучения и тестирования. Если вы будете тестировать у себя на компьютере, то создайте точку восстановления системы. Чтобы во время выполнения одной из следующих команд что-то пойдет не так, вы всегда могли восстановить свой компьютер.
10 крутых вещей, которые можно сделать с помощью Windows PowerShell
1: Отчёты о подключённых USB оборудованиях
PowerShell даёт возможность работать с Windows Management Instrumentation (WMI). С помощью PowerShell, вы можете сделать WMI - запрос для получения информации о USB - устройствах, которые установлены как на локальной, так и на удаленных системах.
gwmi Win32_USBControllerDevice -computername DBSERVER1 |fl Antecedent,Dependent
В данной команде будет применен фильтр возврата предшествующих и зависимых полей с компьютера DBSERVER1
. Если вы хотите получить полную информацию о USB-устройствах в системе, вы можете убрать оператор |
и fl
. Это весьма удобный способ для ведения отчётов по серверам, к которым подключены USB - устройства с лицензией.
2: Выполнение ваших любимых задач CMD в PowerShell
Да, вы можете перестать использовать командную строку (CMD) и начать выполнять все те же задачи в PowerShell. Это поможет сделать процесс обучение немного проще и помочь вам лучше ознакомиться с интерфейсом. К сожалению, PowerShell невозможно вызвать через окно «выполнить» с помощью трёх букв, подобно CMD. Но вы можете назначить сочетание клавиш для быстрого запуска PowerShell, например, Ctrl + Shift + P
.
3: Принудительное завершение процесса в PowerShell
Если зависла какая-то служба Windows, вы можете использовать PowerShell для завершения процесса так же, как и через Диспетчер Задач. Например, для закрытия BadThread.exe
, вы делаете следующее:
get-process BadTh* Результаты выведут нам нужные данные в таком формате: Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 19 5 -321955 -312219 -154 32.76 7583 BadThread
После того, как мы идентифицируем Process ID
, вы можете принудительно закрыть зависший процесс введя команду:
stop-process -id 7583
В тот же момент процесс BadThread будет принудительно остановлен, и вы сможете возобновить попытку запуска службы. Которую можете сделать прямо здесь, в PowerShell.
4: Используйте PSDrive для большего, чем просто просмотр дисков
Команда PSDrive
позволяет просматривать объекты Windows за пределами традиционных сетей, а также локальных или съемных дисков. Например, чтобы посмотреть диски в разделе верхнего уровня реестра HKEY_LOCAL_MACHINE
, вы можете использовать HKLM PSDrive
. Чтобы войти в реестр, введите следующую команду:
PS C:> cd HKLM: PS HKLM:/>
Затем вы переключаетесь в раздел регистра где сможете просмотреть список всех объектов и удалять их, если вам это нужно.
5: Экспорт NTFS разрешений папки – как обычно, так и рекурсивно
Управление разрешениями NTFS - это отдельный вопрос, но с помощью PowerShell можно экспортировать список разрешений для аудита доступов или для быстрого анализа списка ACLs для настройки политик безопасности. Это лучший вариант для создания отчётности в формате периодически запускаемого скрипта, или вы можете запускать его по требованию, например, для диагностики конкретной проблемы, связанной с доступами. Например, используя следующую команду:
PS E:>Get-Acl N:Data
Это даст вам быстрый ответ с результатами ваших прав безопасности по указанному пути N:Data
(обратите внимание, что команда не даёт доступ к ресурсу). Данная команда не даст нам общую картину всех доступов всего пути, а только отчёт только об указанном пути. Но если вы хотите включить рекурсию для всего пути, вы можете использовать другую команду. Для того же пути N:Data
вы должны использовать командлет Get-ChildItem (cmdlet)
в PowerShell в сочетании с командлетом Get-Acl
. Рассмотрим следующий пример:
PS E:>Get-ChildItem N:Data -recurse | Get-Acl
Данная команда будет отображать списки ACL для содержимого всего пути N:Data
. Разберём как это работает: командлет Get-ChildItem
показывает нам все объекты файловой системы по указанному пути N:Data
, а дальше весь список объектов передаётся командлету Get-Acl
который предоставляет результаты (списки ACL) для каждого объекта.
Если вы хотите заархивировать данные в документ (CSV), вам нужно добавить | export-csv c:filename.csv
в конце команды. Кроме этого вы можете извлечь в обычный текстовый файл с помощью добавления командлета > C:filename.txt
. Обратите внимание что, когда вы используете параметр -recurse, он будет применяться во всех вложенных файлах и папках. Поэтому будьте внимательны, когда используете его для инвентаризации объёмных томов или же по сети.
6: Отличия PowerShell 2.0
PowerShell 2.0 включает в себя графический интерфейс что является удобной особенностью данной системы. Скрипты PowerShell сохраняются как файлы .ps1
, что позволяет нам легко изменять, импортировать и мигрировать сценарии в различные системы. На скриншоте ниже показан пример списка разрешений NTFS в графическом режиме.
Примечание для PowerShell 2.0: Перед тем как начать использовать PowerShell 2.0 версию, необходимо настроить политику исполнения с помощью первой версии PowerShell. Введите одну из следующих команд для настройки политики исполнения под ваши нужды:
PS C:> Set-ExecutionPolicy Restricted (только проверка) PS C:> Set-ExecutionPolicy AllSigned (наиболее безопасный) PS C:> Set-ExecutionPolicy RemoteSigned (средний уровень безопасности) PS C:> Set-ExecutionPolicy Unrestricted (наименее безопасный)
При этом не забудьте, что для PowerShell 2.0 требуется пакет WS-MAN v1.1 и Microsoft.NET Framework 3.0 для графического интерфейса.
7: Горячие клавиши в графическом интерфейсе PowerShell
Если вы знакомы со средой Microsoft SQL Query Analyzer, вы по достоинству оцените некоторые из этих сочетаний клавиш. В PowerShell GUI вы можете выбрать одну или несколько строк и выполнить их разом одним нажатием клавиши F5
. Кроме того, если вы изменили скрипт, то для экономии времени при редактировании и тестировании доступны привычные Ctrl + S
для сохранения, Ctrl + Z
для отмены, Ctrl + C
для копирования и Ctrl + V
для вставки.
8: Фоновый режим для длительных задачи
Если вы собираетесь использовать команду, выполнение которого займёт некоторое время, вы можете запустить PowerShell в фоновом режиме до её завершения. Таким образом, можно отправить серию команд на автоматическое выполнение по своему собственному расписанию. Чтобы запустить команду в фоновом режиме необходимо добавить в начало параметр –psjob
. А ещё можно узнать о состоянии любого из заданий с помощью следующей команды:
PS C:> get-psjob
В дополнительном окне вы увидите таблицу с результатами о текущих состояний ваших заданий, дополнительно с уникальными идентификаторами сеанса для каждой задачи отдельно. На скриншоте ниже показана одна проваленная задача.
С помощью следующей команды вы можете удалить неудачную задачу, указав ID Session в конце команды:
PS C:>remove-psjob 9
9: Вставка временных рамок для вывода команд PowerShell
Для задач PowerShell можно ввести временную метку последовательности, чтобы определить продолжительность каждого шага, к тому же можно использовать для настройки журнала вводимых скриптов. Это может оказаться удобным способом для их тестирования. Чтобы вставить метку времени, введите одну из следующих команд в виде одно строки в файле .ps1
:
Команды | Вывод |
---|---|
"$(Get-Date -format g) Start logging" | 20/4/2020 7:45 AM |
"$(Get-Date -format F) Start logging" | Friday, December 23, 2019 8:26:24 AM |
“$(Get-Date -format o) Start logging" | 2019-11-17T19:26:24.0479860-06:00 |
Существует много различных форматов команды Get-Date
, но обычно эти три параметра подходят для большинства целей с временными метками.
10: Вывод результатов с задержкой
В PowerShell некоторые команды выводят информацию на экран быстрым прокручиванием. Если вы не экспортируете данные в файл, будет невозможно просмотреть их на экране. Давайте ещё раз воспользуемся командлетом Get-ChildItem
из предыдущих примеров. Эта команда может выводить множество результатов в зависимости от указанного пути. Для упрощения просмотра выводимых данных на экране мы воспользуемся функцией, которая называется EasyView
. Данная функция позволяет нам просмотреть результаты на экране путем отображения одной строки каждые полсекунды. Функция EasyView создаётся следующим образом:
function EasyView { process { $_; Start-Sleep -seconds .5}}
Чтобы выполнить команду PowerShell с помощью функции EasyView
добавьте в конце команды оператор |
и название самой функции, как показано ниже:
Get-ChildItem N:Data | EasyView
Функция EasyView настроена на отображение строк с интервалом в полсекунды. Вы также можете настроить интервал в миллисекундах.
Итоги
Крутые особенности на этих 10 пунктах не заканчиваются. Есть множества функций PowerShell, которые могут упростить ваши ежедневные задачи. Я надеюсь эта статья привлечёт ваше внимание к командной строке и поможет вам в будущем использовать PowerShell.