15 расширенных задач, которые PowerShell может выполнять в Windows 10

Чтобы понять, что такое Windows PowerShell, мы должны сначала объяснить, что такое оболочка. Оболочка или интерпретатор команд – это программа, которая позволяет взаимодействовать с операционной системой через терминал и в командной строке. Используя оболочку можно давать команды системе и открывать программы.

ⓘ PowerShell

PowerShell — расширяемое средство автоматизации от Microsoft с открытым исходным кодом, состоящее из оболочки с интерфейсом командной строки и сопутствующего языка сценариев. Впервые публично язык был продемонстрирован на Профессиональной конференции разработчиков в сентябре 2003 года под кодовым названием Monad. Изначально средство выпущено как компонент Windows под названием Windows PowerShell. Открытый исходный код был выпущен с началом разработки PowerShell Core в августе 2016 года.

Windows PowerShell 2.0 был выпущен в составе Windows 7, Windows 8 и Windows Server 2008 R2, а также Windows Server 2012 R2, как неотъемлемый компонент системы. Кроме того, вторая версия доступна и для других систем, таких, как Windows XP SP3, Windows Server 2003 SP2, Windows Vista SP1, Windows Vista SP2, Windows Server 2008 и Windows Server 2012.

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

Эти административные задачи обычно выполняются с помощью командлетов в оригинале cmdlets, которые являются специализированными Пользователь может комбинировать их в скриптах сценариях, используя различные конструкции, утилиты командной строки и обращения к обычным , объектам WMI или COM. Кроме того, можно использовать различные хранилища данных, такие, как файловая система или реестр Windows, которые предоставляются PowerShell посредством поставщиков англ. providers.

PowerShell также предоставляет механизм встраивания, благодаря которому исполняемые компоненты PowerShell могут быть встроены в другие приложения. Эти приложения затем могут использовать функциональность PowerShell для реализации различных операций, включая предоставляемые через графический интерфейс. Этот подход применён в Microsoft Exchange Server 2007 для реализации управляющей функциональности в виде командлетов PowerShell и графических утилит управления в виде оболочек PowerShell, которые вызывают необходимые командлеты. Таким образом, графический интерфейс управления находится поверх промежуточного слоя — PowerShell. Другие приложения Microsoft, включая Microsoft SQL Server 2008, System Center Operations Manager и System Center Data Protection Manager также предоставляют доступ к своим интерфейсам управления через командлеты PowerShell.

PowerShell включает свою собственную расширяемую справку, доступную в том числе из командной строки через командлет Get-Help.

Политики выполнения скриптов в PowerShell

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

  • Get-ExecutionPolicy -List

Мы можем видеть несколько уровней разрешений политик для запуска сценариев.

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

  • Restricted: заблокировано выполнение любых скриптов, но разрешается работа интерактивных команд.
  • RemoteSigned: загруженные скрипты должны быть подписаны доверенным издателем. Локальные скрипты работают без подписи
  • AllSigned: разрешает выполнение любого подписанного скрипта, как локального, так и удаленного (загруженного).
  • Unrestricted: без ограничений. Вы можете запустить все сценарии, даже те, которые не подписаны.
Политики выполнения скриптов в PowerShell
  • Set-ExecutionPolicy Unrestricted -Scope CurrentUser — запуск без ограничения для пользователя.
  • Set-ExecutionPolicyRestricted -Scope CurrentUser вернуть назад, если будет нужно.
Читайте также:  Восстановление загрузчика Windows 7, 8 или 10.

Разрешает без ограничений выполнять сценарии для локального пользователя. Ключ -Scope определяет, к чему применяется изменение политики. Когда вы вводите «CurrentUser«, то применяется только к текущему пользователю, а когда вы вводите «LocalMachine«, он применяется ко всей системе.

Если выше способ не помог вам запустить свой скрипт и ошибка «Выполнение сценариев отключено в этой системе» появляется, то можно снять полностью ограничения. Вы должны понимать, что это большой риск и ваш скрипт должен быть безопасен на 101%. Откройте PowerShell от имени админа и:

  • Set-ExecutionPolicy Unrestricted — разрешить выполнение скриптов без ограничений.
  • Set-ExecutionPolicy Restricted— вернуть назад по умолчанию.

Смотрите еще:

  • Что за папка ProgramData Windows 10
  • Исправить ошибку Boot Device Not Found на ноутбуке или ПК
  • Antimalware Service Executable (MsMpEng) — Грузит Систему
  • Ошибка 0x80070490 в Центре обновления Windows 10
  • Защитник Windows: Ограничить нагрузку на процессор

Отладка сценариев

Break All

Break All (прервать всё) — очень полезная останавливающая работающий скрипт функция, дающая возможность перейти в отладчик и узнать как работает этот скрипт и каково текущее состояние переменных или других элементов. Поддержка была включена для консоли Windows PowerShell и ISE.

Чтобы использовать отладчик в сеансе консоли, нажмите Ctrl+Break

В Windows PowerShell ISE можно нажать Ctrl+B или, щёлкнуть в меню «Отладка» и выбрать команду «Break All».

Удалённое редактирование

В текущей Windows PowerShell ISE можно открывать и редактировать файл напрямую в удалённом сеансе Windows PowerShell. С помощью новой команды «PSEdit», вы можете непосредственно редактировать файлы как локально, так и в удалённых сеансах.

Следующий код показывает пример в действии:

[Cloud01]: PS C:\> PSEdit C:\WinDemo\

При выполнении PSEdit, он откроет файл в ISE, где можно внести изменения, сохранить их на удалённый компьютер и повторно выполнить код.

Удалённая отладка

Расширяя возможности удалённого редактирования, вы теперь можете отлаживать запущенный на удалённом сеансе с ISE скрипт.

Командлет Set-PsBreakpoint задаёт в коде точку останова, а затем можно использовать командлет Write-Debug и вывести полезную для использования в ваших сценариях, если вы сталкиваетесь с точкой останова, информацию. В этот момент вас переместит в отладчик, где потребуется посмотреть на имеющуюся информацию и выполнить некоторую дополнительную работу. Рисунок ниже показывает эту операцию.

Пример кода удалённой отладки в Windows Powershell ISE

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

Предупреждение об останове в удалённом сеансе

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

Доступность удалённой отладки

Отладка сценариев

Если удалённая отладка доступна, вы можете подключиться к сеансу с помощью командлета Enter-PSSession, который подключит вас непосредственно к отладчику.

Удалённый отладчик в действии

Отладка фонового задания

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

Теперь, в Server 2016, Windows PowerShell вводит новый командлет Debug-Job, который даёт вам возможность отладить эти фоновые задания более эффективно. Следующий рисунок показывает использование этого командлета. Обратите внимание на то, как Debug-Job показывает вам линию и характеристики прерывания фоновой работы.

Командлет Debug-Job, выводящий сообщение об ошибке в фоновом задании

Чтобы добраться до этого состояния останова, можно воспользоваться тем же командлетом Set-PSBreakPoint или Wait-Debugger. Они используются для «приостановки» сценария и ввода отладчика. Вы можете ввести эти командлеты в свой скрипт, а затем проверить состояние задания. Так вы узнаете, столкнулся ли он с точкой останова и готова ли отладка. Рисунок ниже показывает пример этого.

Состояние фонового задания

Отладка Runspaces

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

Подробнее. Больше информации о Runspaces и его использовании на -use-of-powershell- runspaces-part-1/.

Следующий рисунок отображает создание Runspaces.

Создание Runspaces

Для отладки Runspaces вам необходимо получить его «ID», рисунок ниже показывает доступные runspaces, а затем ввести сеанс отладки с помощью командлета Debug-Runspace.

Отладка runspace

Первый runspace, ID 1, всегда исходный сеанс Windows PowerShell, в котором вы находитесь. Для более глубокого изучения runspacees в вашей среде, используйте предыдущие ссылки.

Использование WMI

Хотя WMI — не лучшая технология для поставки из штаб-квартиры Microsoft, она занимает второе место в списке того, как работать с коллекциями объектов. Мы могли бы легко получить список запущенных процессов из класса Win32_Process следующим образом:

Get-WmiObject –Class Win32_Process

Поскольку запрос WMI возвращает свой собственный тип объекта, вам нужно будет найти метод, который может остановить процесс, поэтому давайте передадим его в Get-Member.

Get-WmiObject –Class Win32_Process | Get-Member

Похоже, ближайшая остановка — это метод завершения, так что это должен быть один. Чтобы вызвать метод для объекта WMI, вы просто передаете его Invoke-WmiMethod и указываете имя метода.

Get-WmiObject -Class Win32_Process -Filter «name = ‘’» | Invoke-WmiMethod -Name Terminate

Отлично, это помогло. Всякий раз, когда вы получаете ReturnValue 0 в WMI, просто помните, что команда выполнена успешно.

Как взаимодействовать с Windows PowerShell

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

Мы можем использовать символы направления > для отправки вывода в файл или >> для добавления в файл. PowerShell использует псевдонимы для связи команд со своими командлетами. Например, команда cd является псевдонимом для командлета set-location, точно так же, как dir является псевдонимом для командлета get-children.

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

Одна из сильных сторон этой оболочки – её командлеты. Каждый командлет представлен «глаголом», за которым следует тире и существительное.

Чтобы просмотреть полный список всех доступных командлетов, введите get-command. Чтобы получить информацию о конкретном командлете, введите get-help и имя командлета.

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

Как мы объясняли ранее, командлеты возвращают чистые объекты .NET, а не текст. По этой причине командлет, расположенный справа от оператора | , может работать непосредственно со свойствами или методами вывода, созданного предыдущим командлетом.

Читать текстовые файлы

Текстовый интерфейс PowerShell никогда не сможет конкурировать с VLC

по количеству типов файлов, которые он может отображать. Тем не менее, он хорошо подходит для представления содержимого файлов .txt с использованием Get-Content команда:

Get-Content c:\MakeUseOf\

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

Get-Content c:\MakeUseOf\ -totalcount 5

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

Добавить в текстовый файл

Вы можете сделать один шаг за пределы чтения содержимого документа .txt, используя Добавить контент командлет:

Add-Content c:\MakeUseOf\ «written by Brad Jones»

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

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

Add-Content c:\MakeUseOf\ «`nwritten by Brad Jones»

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

, Использование `b приведет к возврату, а` b приведет к горизонтальной табуляции. Между тем, `’выдаст одинарную кавычку, а`’ выдаст двойную кавычку

Измерить текстовый файл

Пытаетесь ли вы выследить определенный файл с анонимным именем, или вы просто хотите узнать, сколько кода вам удалось создать

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

Get-Content c:\MakeUseOf\ | Measure Object

Теперь мы используем два командлета в унисон — и это станет еще важнее, чем глубже вы погрузитесь в PowerShell

Сравнение:

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

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

Убедимся:

PS> (Get-Date) -lt (Get-Date).AddSeconds(1) True PS> PS> PS> (Get-Date) -gt (Get-Date).AddSeconds(1) False PS> PS>

Сортировка:

PS> 1..3 | % {[DateTime]::new(2017, 12, 06, 18, 55, $_)} | Sort-Object -Descending 6 декабря 2017 г. 18:55:03 6 декабря 2017 г. 18:55:02 6 декабря 2017 г. 18:55:01 PS>