DataLife Engine > Windows > 10 полезных приёмов при работе с оболочкой PowerShell

10 полезных приёмов при работе с оболочкой PowerShell


24 февраля 2008. Разместил: podpole
Если вы недостаточно хорошо освоили PowerShell, то наверняка не стремитесь применять этот инструмент в повседневной работе. Однако дананя оболочка является ядром таких систем, как Exchange 2007, Windows Server 2008 и SQL Server 2008. Поэтому любому администратору нужно научиться использовать её огромные возможности.

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

Замечание: Будьте осторожны, предельно осторожны

Название этого инструментария точно передает его суть. PowerShell (мощная оболочка) способна изменять конфигурацию системы кардинальным образом, причем как в хорошую, так и в плохую сторону. Поэтому эксперименты лучше проводить в тестовом режиме. Также не стоит забывать о применении параметра “-confirm” для проверки конфигурации перед запуском тех или иных команд.

Отчет обо всех установленных USB-устройствах

PowerShell осуществляет доступ к технологии централизованного управления системой Windows Management Instrumentation (WMI). При помощи PowerShell администратор может дать команду WMI произвести поиск всех установленных на локальную или удаленную машину USB-устройств:

gwmi Win32_USBControllerDevice –computername SERVER1 |fl Antecedent,Dependent


Фильтр вернёт список главных и зависимых USB-устройств компьютера SERVER1. Если не задействовать фильтр, то можно получить полный список подключенного к машине USB-оборудования. Это полезно для ведения регулярных отчетов об установленных лицензионных USB-устройствах, где будут отображаться данные о подключении каждого объекта.

Использование PowerShell вместо коммандера CMD

Тот факт, что для решения одних и тех же задач оболочку PowerShell можно использовать вместо командной строки DOS, поможет несколько облегчить процесс обучения и привыкнуть к новому интерфейсу. К сожаленью, строка выполнения (run) не позволяет запускать трехбуквенные команды, например cmd. Но с этой задачей легко справляется PowerShell. Можно назначить специальную команду для быстрого вызова коммандера, например Ctrl + Shift + P.

Использование PowerShell для закрытия процессов вместо Диспетчера задач

Если какая-либо служба Windows не отвечает на запрос о прекращении работы, то ее можно закрыть при помощи PowerShell. Оболочка наделена эквивалентной Диспетчеру задач функцией остановки процессов. Например, для того, чтобы остановить процесс BadThread.exe, нужно проделать следующее:

get-process BadTh*


Результат будет таким:
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
28 4 -210844 -201128 -163 25.67 2792 BadThread


После того, как идентификационный номер процесса будет определён, его можно закрыть, введя команду:

stop-process –id 2792


После чего функция BadThread будет остановлена и теперь опять же с помощью PowerShell можно попробовать заново запустить соответствующую службу.

Использование команды PSDrive для отображения списка дисков и не только

Команда PSDrive позволяет не только просматривать локальные, удаленные и съемные диски, но и получить доступ к улею реестра HKEY_LOCAL_MACHINE. Для этого нужно задействовать параметр HKLM:

PS C:> cd HKLM:
PS HKLM:/>


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

Назначение NTFS полномочий — возможна ли рекурсия?

Управление правами доступа в файловой системе NTFS — отдельная тема для разговора, однако PowerShell дает возможность назначения полномочий NTFS для аудита доступа пользователей и отображения списков управления доступом (Access Control Lists) в рамках настройки конфигурации безопасности. Это отличное программно реализуемое средство ведения регулярной отчетности, которое также можно использовать для анализа частных случаев возникновения неисправностей. К примеру, зададим следующий цикл:

PS E:>Get-Acl N:Data


Система выдаст отчёт о правах доступа пользователя к той или иной директории (одного, но не всех пользователей). Само по себе это не так уж и впечатляет, поскольку отчёт касается лишь одного каталога, но если вы хотите включить рекурсию для целой папки, можно применить иную стратегию. Для той же директории (N:Data) введём в строке оболочки PowerShell команду Get-ChildItem (cmdlet) в сочетании с другой командой Get-Acl:

PS E:>Get-ChildItem N:Data -recurse | Get-Acl


В результате будет выдан список контроля доступа пользователей к содержимому данного каталога. Дело в том, что команда Get-ChildItem проводит инвентаризацию объектов файловой системы, а Get-Acl выводит результаты этой инвентаризации по каждому объекту.
При желании можно сохранить этот отчёт в файле разделяемых запятыми значений, для чего нужно будет ввести: “| export-csv c:filename.csv” в конце команды cmdlet. Для сохранения отчёта в текстовом файле — “> C:filename.txt” в конце той же команды. Имейте в виду, что при использовании параметра –recurse, функция осуществит проверку всей указанной директории. Поэтому будьте осторожны, применяя его для инвентаризации больших каталогов или целой сети.

Приемущества PowerShell 2.0

Оболочка PowerShell 2.0 встроена в платформу Community Technology Preview (CTP) и снабжена отменным графическим интерфейсом Graphical PowerShell. Сценарии оболочки можно сохранять в файлы с расширением .ps1, благодаря чему становится возможно осуществлять удобное управление, импорт и обмен ими между системами. На изображении A показаны приведённые выше примеры назначения NTFS-полномочий в режиме графического интерфейса.

Вам необходиом будет скофигурировать политики исполенения (execution policy). Пример конфигурирования политики:

PS C:>Set-ExecutionPolicy Restricted (check only)
PS C:>Set-ExecutionPolicy AllSigned (most secure)
PS C:>Set-ExecutionPolicy RemoteSigned (medium secure)
PS C:>Set-ExecutionPolicy Unrestricted (least secure)


Решив опробовать PowerShell 2.0 в деле, имейте в виду, что вам понадобится пакет WS-MAN v1.1, а для работы с графическим интерфейсом необходим набор инструментов Microsoft .NET Framework 3.0.

Комбинации клавиш для работы в графическом интерфейсе Graphical PowerShell

Если вы работали с SQL Query Analyzer, то вам уже знакомы некоторые из следующих сочетаний клавиш. В графическом интерфейсе Graphical PowerShell можно выделить одну или несколько строк и запустить их, нажав F5. А при редактировании сценария ускорить процесс помогут знакомые комбинации: Ctrl + S для сохранения, Ctrl + Z для отмены предыдущей операции, Ctrl + C для копирования и Ctrl + V для вставки.

Выполнение длительных процессов в фоновом режиме

Если вызванная командой cmdlet процедура работает слишком долго, PowerShell способна переключить её в фоновый режим. Можно одновременно запустить несколько процессов, которые будут выполняться столько, сколько им потребуется. Переключение в фоновый режим осуществляетcя, если в начале команды перед названием процесса ввести start-psjob. Можно послать запрос для выявления статуса всех выполняемых операций:

PS C:>get-psjob


PowerShell выдаст таблицу, где отображён ход всех процессов, при этом каждой сессии будет присвоен свой идентификатор. На изображении B показана ошибка в одном из процессов.

Одно небольшое замечание по PowerShell 2.0: перед её использованием необходимо настроить политику выполнения команд через обычную неграфическую оболочку PowerShell. Конфигурация одной из политик запуска:

Для выключения прерванного процесса введите команду:

PS C:>remove-psjob 9


Создание временных маркеров в отчётах PowerShell

При помощи временных меток в выдаваемых PowerShell отчётах можно определить, как долго длилась та или иная операция, а также регистрировать сценарии. Очень полезная функция для проверки сценариев в Graphical PowerShell. Чтобы создать временной маркер, введите в нужном файле .ps1 одной строкой любую из следующих команд:
Command
"$(Get-Date -format g) Start logging"
"$(Get-Date -format F) Start logging"
"$(Get-Date -format o) Start logging"              Output example
2/5/2008 9:15 PM
Tuesday, February 05, 2008 9:15:13 PM
2008-02-05T21:15:13.0368750-05:00



Существует множество форматов команды Get-Date, но этих трёх параметров обычно бывает достаточно для выполнения всех операций, связанных с временными метками

Пошаговый просмотр результатов

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

function EasyView { process { $_; Start-Sleep -seconds .5}}

Теперь для вызова функции EasyView достаточно ввести её имя после вертикального разделителя в конце команды Get-ChildItem:

Get-ChildItem N:Data | EasyView

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

Автор: Rick Vanover