Windows powershell: что это за программа – компьютерные советы
Оглавление
- 1 Что такое Windows PowerShell и для чего он нужен
- 2 Windows PowerShell что это за программа
- 3 Как запустить PowerShell Windows – что умеет и как остановить
- 4 Знакомство с утилитой PowerShell в системах Windows 7, 8 и 10
- 5 Управляем службами Windows с помощью PowerShell
Что такое Windows PowerShell и для чего он нужен
Изучая меню пуск Windows 7 или начальный экран Windows 8 1, начинающие пользователи нередко открывают для себя приложения, назначение которых им не понятно. Как раз одно из таких приложений — PowerShell.
Что же такое этот самый PowerShell и есть ли от него хоть какой-то толк? Ну, раз его кто-то придумал и интегрировал в Windows, значит, толк всё-таки есть.
Кстати, этим самым придумавшим PowerShell является компания Microsoft.
Итак, PowerShell. Предназначается это приложение, прежде всего для системных администраторов, а вот простые пользователи, тем более начинающие, пользы из него для себя почти никакой не извлекут.
Представляет собой PowerShell современную стандартизированную оболочку командной строки, обеспечивающую большую гибкость управления компьютером на базе операционной системы Windows.
По сути, PowerShell — это та же командная строка, но только намного более функциональная.
Что умеет этот инструмент администрирования? Много чего. С его помощью системные администраторы и опытные пользователи могут управлять процессами, службами, файловыми хранилищами, аккаунтами и даже серверами. Также оболочка позволяет запускать внешние команды, работать с объектами .
NET, COM и XML, проделывать разные трюки и т.п., создавать и выполнять собственные сценарии. Кстати, для написания скриптов в Windows предусмотрена специальная графическая консоль ISE, являющаяся своего рода дополнением к основной оболочке PowerShell.
Как и консоль CMD, оболочка PowerShell имеет свой набор команд, именуемых командлетами. Утилита распознает многие из команд CMD, но в целом синтаксис языка, определения командлетов и их параметров отличаются от того, что пользователи привыкли видеть в обычной командной строке.
Кроме того, знакомые команды вроде dir, cd, copy и т.п., прекрасно понимаемые PowerShell, на самом деле являются псевдонимами. Например, команда Dir, служащая для просмотра файловой системы соответствует «родному» командлету Get-ChildItem.
Псевдонимы или как принято говорить, алиасы, служат чисто для удобства.
Разобраться с PowerShell начинающему пользователю, особенно если тот незнаком хотя бы с основами обычной командной строки, будет непросто.
А руководств и справочников, достаточно понятных и простых для усвоения, не так уж и много.
Есть неплохое руководство, написанное Франком Кохом, с которым мы рекомендуем ознакомиться, если вы всё же решитесь приступить к изучению скриптового языка PowerShell. Ну, и конечно, собственная справочная системы оболочки.
Она мощная и развёрнутая, с множеством конкретных примеров. Пользоваться ей достаточно просто. Основная информация по справочной системы выводится командлетом Get-Help. Командлет Get-Command выводит список всех доступных команд.
Get-Command
Для получения справки по конкретному командлету или алиасу используется связка get-help командлет.
Например, команда get-help get-process выведет основную справку по использованию командлета get-process, отвечающего за вывод списка текущих процессов.
Передав же ей параметры –detailed, -examples, -full или –online, можно будет получить самые подробные сведения обо всех его нюансах.
Windows PowerShell что это за программа
Устанавливая новую версию операционной системы Windows, начинающие пользователи встречают новые названия программ, которых раньше, возможно не слышали и предназначение которых им не понятно.
Одно из таких приложений PowerShell. Если оно предустановлено в ОС, значит для чего-то оно служит. Что это за программа Winodws PowerShell, часто задаются этим вопросом пользователи.
Давайте ее рассмотрим подробнее.
Рабочее окно PowerShell
Это приложение является полезным инструментом для системных администраторов и разработчиков, но для других пользователей, тем более для начинающих, оно мало чем полезно.
Windows PowerShell представляет собой современную, усовершенствованную командную строку, которая способна предоставлять более гибкую работу с настройками и управлению компьютера в операционной системе Windows.
Иными словами, та же командная строка с дополнительными возможностями.
Возможности и предназначение программы PowerShell
Видно, что эта программа Winodws PowerShell является интерфейсом для скриптового языка, а также является платформой для выполнения этих скриптов.
PowerShell был выпущен в 2006 году, который входил во второй сервис-пак и с того времени программа стала частью всех операционных систем компании Microsoft.
Скрипты данной программы имеют расширение PS1 и способны запускаться, подобно файлам BAT и CMD.
Этот скриптовый язык разрабатывался, прежде всего, для деловых клиентов Microsoft, которым требуются мощные инструменты автоматизации различных задач в управлении компьютерами и серверами, под управлением Windows. За основу для языка взята платформа .NET от Microsoft.
Windows PowerShell дает возможность автоматизировать множество различных задач и процессов. Она позволяет установить контроль над службами, аккаунтами, настройками, процессами и т.д.
Скриптовый язык воспринимает все команды из командной строки ОС, в свою очередь имеет богатый собственный язык, который состоит из определенных команд, они называются командлетами (cmdlets). Эти командлеты работают по принципу Глагол + Существительное. К примеру, «Get-Help», что в переводе с английского означает «Получить Помощь».
Этот командлет вызывает справку. Для того, чтобы получить информацию о каком-либо командлете, введите «Get-Help Get-Process». В этом случае программа предоставит информацию о камендлете «Get-Process».
Запуск и работа в Windows PowerShell
Есть несколько различных способов запустить программу Windows PowerShell в ОС. Для простоты поиска программ в операционной системе существуют окно поиска.
Его можно найти, открыв ярлык «Мой компьютер» в верхней части экрана с правой стороны. Введите запрос «PowerShell» и в результатах поиска откройте программу.
В Windows 10 программу можно запустить из любой рабочей папки, для этого нужно сделать клик по кнопке «Файл» в верхней части слева.
Запуск PowerShell
Для того, чтобы продемонстрировать как работает эта программа Windows PowerShell, испробуем ее некоторые возможности, например, давайте почистим корзину. Для этой функции есть специальный командлет – «Clear-RecycleBin».
Он пригодится для написания скрипта при обслуживании компьютеров. При вводе такой команды, нужно указать локальный диск, на котором расположено приложение, с которым необходимо выполнить это действие: «Clear-RecycleBin C:».
Далее появится строка с запросом на подтверждение, здесь необходимо нажать клавишу «Y» и «Enter».
Очистка корзины с помощью PowerShell
Если к командлету «Clear-RecycleBin C:» добавить часть «-Force», корзина очиститься без подтверждения.
- Давайте распакуем архив при помощи программы PowerShell.
- Для этого существуют заданные команды «Expand-Archive» и «Compress-Archive».
- Для того, чтобы заархивировать папку «C:file» в «C:archivefile2.zip», следуйте указанной команде: «Compress-Archive –LiteralPath C:file -DestinationPath C:archivefile2.zip.
- В результате исполнения этой команды в указанной выше директории появится архив с именем «file2.zip», в котором будет заархивировано содержимое папки «C:file».
Основные командлеты программы PowerShell
У этой программы есть масса разных команд, применяемых к различным компонентам Windows и описать их все в это статье не выйдет. Вот некоторые основные команды Windows PowerShell:
- «Update-Help» — обновление справки для определенного компонента.
- «Get-Help» — получение справки.
- «Get-Command» — поиск из списка командлетов.
- «Format-Table» — обзор результата определенной команды в таблице.
- «New-Variable» — новая переменная.
- «Remove-Variable» — удаление значения переменной.
- «Set-Variable» — указать значение для переменной.
- «Format-Wide» — обзор результата выполненной команды в виде таблицы, в которой присутствует только одно свойство для одного объекта.
Как вы оцените статью?
(1
Как запустить PowerShell Windows – что умеет и как остановить
02.08.2018 Евгений Никифоров
О существовании Windows PowerShell пользователи массово узнали после выхода Windows 10. Однако, эта программа появилась в составе пакета Windows XP еще в 2006 году. Ее расположили в пакете стандартных программ, пользовались возможностями PowerShell только продвинутые владельцы ПК.
Что такое PowerShell?
PowerShell является неотъемлемой частью всех операционных систем линейки Windows, начиная от SP2 XP. Эта программа напоминает командную строку и поддерживает скриптовый язык.
Изначально она разрабатывалась для клиентов, которые строили на базе компьютеров Windows корпоративную сеть, то есть для решения задач бизнеса.
Использование PowerShell позволяло автоматизировать рабочие процессы по управлению удаленными машинами и серверами.
Сейчас эта программа часто используется и обычными пользователями. С ее помощью можно управлять:
- настройками;
- аккаунтами пользователей;
- процессами;
- службами;
- файлами.
Команды формируются на английском языке и состоят из глагола и существительного. Именно создание скриптов затрудняет общение пользователей с программой.
Как запустить программу?
Приведем все возможные способы, позволяющие Windows PowerShell запустить. Их можно использовать на разных системах:
- Во всех версиях Windows в меню «Пуск» есть строка поиска. Введите в нее PowerShell, чтобы найти нужную программу. Это самый простой рабочий способ поиска. Верхний результат в списке и будет искомая утилита.
- Легче всего найти эту программу в Windows 10. В этой версии операционной системы командную строку для скриптового языка добавили во все папки. Для этого в верхней строке найдите контекстный раздел «Файл», щелкните по нему. В выпавшем меню найдите строку «Запустить Windows PowerShell». При этом у вас будет вда варианта: запустить программу как простому пользователю или от имени администратора. Последний доступен тем, кто работает на ПК с основной учетной записи, дающей большие полномочия.
- PowerShell Windows 7 проще найти при помощи панели «Выполнить». Вызовите ее сочетанием клавиш Win+R. Введите в появившейся строке PowerShell, а затем нажмите кнопку «Ок». В результате утилита будет запущена.
Если вы не смогли найти утилиту на вашем ПК, то необходимо ее скачать или установить вместе с обновлениями пакета Windows. Такое случается крайне редко, поэтому мы не будем останавливаться подробно на установке утилиты, она не имеет особенностей.
Особенности использования программы
При помощи этой программы можно автоматизировать рутинные процессы, связанные с использованием операционной системы Windows. Также вы сможете исправить некоторые ошибки системы. Опытные пользователи называют эту стандартную утилиту «современным аналогом командной строки». Приведем самые частые варианты использования PowerShell у обычных пользователей:
- Очистка корзины. Это действие не сложно произвести вручную, но если вы захотите автоматизировать процесс, то вам потребуется команда PowerShell Clear-RecycleBin с:. После того как вы это сделаете, вам нужно будет подтвердить свои действия кнопкой Y, а затем завершить действие клавишей Enter. Можно заставить скрипт не выводить на экран лишний подтверждений, если вы наберете сразу после команды слово «-Force».
- Управление архивацией и распаковкой файлов. Для этого вам необходимо выбрать одну из двух команд «Compress-Archive» (заархивировать) или «Expand-Archive» (распаковать). После нее нужно будет прописать путь к нужной папке и указать место, куда системе нужно будет записать результат. Например, Compress-Archive -LiteralPath C: est -DestinationPath C:archive est2.zip. При этом система автоматически запакует папку test, а затем создаст в директории archive сжатую папку test2 с расширением zip.
Аналогично работают и другие команды. Как видите, использование PowerShell ничем не отличается от командной строки.
Наиболее популярные команды PowerShell
Самые востребованные в Windows PowerShell команды связаны с использованием самой утилиты:
- Get-Help – выведение на экран справки, если вместо первого слова использовать Update, то вы обновите информацию;
- Get-Command – поиск доступных команд;
- Get-History – просмотр списка команд, которые выи вводили в этой сессии;
- Format-List – выведение на экран результата выполнения команд в виде списка свойств;
- Export-Clixml – экспорт данных в таблицу в формате xml, для ее просмотра нужно будет поставить офисную утилиту Excel или ей аналогичную.
Большинство пользователей работает с компьютером без утилиты PowerShell. Если вы хотите освоить ее, то с полным списком команд можно ознакомиться при помощи команды: Get-Command -CommandType cmdlet.
Как остановить утилиту?
Некоторые пользователи не в восторге от использования утилиты, так как она может находить ошибки в компонентах многих программ и затруднять работу с компьютером.
Такие проблемы чаще всего встречаются у пользователей операционных систем Windows 8 и 10 версии.
В этом случае необходимо получить дополнительные сведения о Windows PowerShell – как отключить эту утилиту. Есть несколько способов:
- Отключить ее на время. Для этого запустите PowerShell и введите команду: Start-Sleep 1000. В этом примере 1000 – количество секунд, в течение которых не будет работать утилита, поставить можно любое значение.
- Отключение временное или постоянное для Windows 8 и 10. Зайдите в раздел “Панель управления”, затем выберите “Программы и компоненты”, далее найдите пункт “Включение и отключение компонентов Windows”. В списке найдите Windows Powershell и уберите маркер рядом с этой строчкой.
- Запустите «Командную строку» от имени администратора. Введите в ней Stop-Process-name powershell. После этого утилита будет остановлена до следующей перезагрузки операционной системы.
Лучше всего потратить время на настройку компонентов операционной системы, если вы решили не пользоваться утилитой некоторое время.
Теперь вы знаете, как запустить утилиту, чтобы при помощи PowerShell была выполнена любая команда. Windows дает своим пользователям широкие возможности, о части из них вы узнали из этой статьи, поделитесь ею с друзьями. Свои вопросы вы можете задавать в комментариях.
Знакомство с утилитой PowerShell в системах Windows 7, 8 и 10
Опытные пользователи операционной системы Windows 10 могли слышать об утилите командной строки PowerShell. Также с ней могут быть знакомы имеющие опыт работы с Windows 7 и 8.1. После многих лет использования приложения командной строки Windows и файлов формата .bat пришло время познакомиться с более функциональным инструментом.
PowerShell является ценным пополнением списка инструментов Windows и его масштаб может отпугнуть некоторых пользователей. Что это — скриптовый язык или командная оболочка? Не стоит беспокоиться: несмотря на обширные возможности, освоить PowerShell по силам каждому.
Шаг 1: установка
Для начала нам необходима сама утилита PowerShell. Если вы работаете с Windows 10, у вас уже установлена версия PowerShell 5. Обновление Windows 10 Anniversary Update использует версию 5.1, но разница незаметна. В Windows 8 и 8.
1 применяется PowerShell 4, чего тоже вполне достаточно. Установка PowerShell на Windows 7 не доставит проблем, но всё же пару лишних шагов придется сделать. В частности, нужно дополнительно установить .Net Framework.
Можно установить Windows Management Framework, в состав которого входит PowerShell.
У PowerShell есть два интерфейса. Опытные пользователи могут выбрать полноценный графический интерфейс, известный как Integrated Scripting Environment (ISE). Новичкам лучше использовать консоль PowerShell, простой текстовый интерфейс в стиле командной строки Windows или даже DOS 3.2.
Для запуска PowerShell от имени администратора в Windows 10 нажмите на кнопку «Пуск» и прокрутите список приложений до Windows PowerShell. В Windows 8.1 ищите Windows PowerShell в папке System в Windows. В Windows 7 оболочка располагается в папке Accessories. В качестве обычного пользователя PowerShell можно запустить точно так же, используя левую кнопку мыши вместо правой.
В любой версии Windows можно применить поиск. Для удобства дальнейшего использования можно закрепить PowerShell на панели задач.
Шаг 2: старые команды Windows
Синтаксис команд Windows в PowerShell работает привычным образом. Например, cd меняет папки, dir показывает список всех файлов и папок внутри текущей папки.
В зависимости от метода запуска консоли PowerShell можно начать в c:Windowssystem32 или в c:Users. В примере на скриншоте используется команда cd .. (с пробелом) для перехода на один уровень вверх за раз, затем запускается команда dir для отображения списка файлов и папок в директории C:.
Шаг 3: установка файлов помощи
Команды вроде cd и dir не являются активными командами оболочки PowerShell. Это так называемые псевдонимы (aliases) — замены настоящих команд PowerShell. Псевдонимы удобны для тех, кто имеет большой опыт работы с командной строкой. Однако они не затрагивают глубин PowerShell.
Чтобы начать знакомиться с возможностями PowerShell, наберите help и нужную вам команду. На скриншоте показана команда help dir.
Команда help говорит, что dir является псевдонимом команды PowerShell Get-ChildItem. Если набрать get-childitem в PS C:>, увидите то же самое, что и при использовании команды dir.
Как указано внизу скриншота, файлы помощи для PowerShell не устанавливаются автоматически. Для их получения запустите PowerShell от имени администратора и наберите update-help.
Установка файлов помощи займёт несколько минут, ряд модулей могут отсутствовать — например, в данном случае не установились Help for NetWNV и SecureBoot.
Когда всё готово, полная система помощи всегда будет давать нужные подсказки.
Теперь наберите команду get-help и любую интересующую вас команду («cmdlet» на языке PowerShell, по-русски командлеты), будет показано её описание. Например, get-help get-childitem выдаёт список опций get-childitem. Также можно вывести разные возможные варианты. Например
get-help get-childitem -examples
выдает семь подробных примеров использования get-childitem. Команда
get-help get-childitem -detailed
включает в себя эти семь примеров и подробные разъяснения каждого параметра в командлете get-childitem.
Шаг 4: получение помощи по параметрам
На скриншоте help dir вы могли заметить два списка под SYNTAX для get-childitem. Наличие двух разных синтаксисов означает возможность применения двух способов запуска командлет. Как держать синтаксис отдельно друг от друга и что означают параметры? Ответ простой, если знать трюк.
Для получения подробностей относительно параметров командлеты get-childitem или любой другой используйте параметр -full:
get-help get-childitem -full
Это выдает список того, что вы можете сделать с командлетой и что случится. Смотрите на скриншот.
Просмотр описания параметров позволяет заметить, что get-childitem даёт возможность получить объект child (вроде названия подпапки или имени файла) в указанном месте, с совпадением определённых символов или без. Например:
get-childItem “*.txt” -recurse
возвращает список файлов «*.txt» в текущей папке и всех подпапках (из-за параметра -recurse). Тогда как
get-childitem “HKLM:Software”
возвращает список всех ключей реестра верхнего уровня в HKEY_LOCAL_MACHINESoftware.
Если вы когда-нибудь пытались попасть в реестр при помощи командной строки Windows или файлов .bat, вы сможете оценить функциональность этого варианта доступа.
Шаг 5: изучение имён
Есть причина того, почему показанные до сих пор командлеты выглядят сходным образом: get-childitem, update-help, get-help используют единую схему глагол-существительное. Это соглашение применяют все командлеты PowerShell, в них глагол стоит перед единственным существительным. Это понравится тем, кто в своё время пострадал от непостоянства названий команд в языках VB и VBA.
Взгляните на самые распространенные командлеты:
set-location: устанавливает текущую рабочий локацию на определённую локацию
get-content: получает содержимое файла
get-item: получает файлы и папки
copy-item: копирует объект из одной локации в другую
remove-item: удаляет файлы и папки
get-process: получает процессы, запущенные на локальном или удаленном компьютере
get-service: получает сервисы, запущенные на локальном или удаленном компьютере
invoke-webrequest: получает содержимое с веб-страницы в интернете
Для просмотра работы определённой командлеты используйте get-help как в случае
get-help copy-item -full
На основе описания в помощи можно понять, что необходимо командлете. Например, если вы хотите копировать все файлы и папки из Documents в c: emp, используйте
copy-item c:users[username] documents* c: emp
Введя эту команду, вы увидите несколько интересных возможностей окружения PowerShell. Например, если набрать copy-i и нажать кнопку Tab, PowerShell заполнит Copy-Item. Если неправильно набрать командлету и PowerShell не может распознать её, даётся полное описание того, что было сделано не так.
Попробуйте данную командлету:
invoke-webrequest askwoody.com
Вы получите краткий список заголовков, изображений, ссылок и прочего содержимого веб-страницы. Обратите внимание в get-help на список invoke-webrequest, который «возвращает коллекцию форм, ссылок, изображений и прочие важные элементы HTML» — именно то, что должно показываться на экране.
Некоторые командлеты помогают управлять самим PowerShell:
get-command: список всех доступных командлет
get-verb: список всех доступных глаголов
clear-host: очистка экрана программы-хоста
Разные параметры позволяют уменьшать команды и сужать круг полезных опций. Например, для просмотра списка всех командлет, работающих с сервисами Windows, введите
get-command *-service
Будут показаны все глаголы, доступные с существительным service. Вот их список:
Get-Service
New-Service
Restart-Service
Resume-Service
Set-Service
Start-Service
Stop-Service
Suspend-Service
Можно объединять эти командлеты с другими.
Шаг 6: использование труб
Если вы знакомы с командной строкой Windows или пакетными файлами, то знаете о перенаправлении и трубах. Перенаправление (символ >) и трубы (символ |) берут результат действия и прикрепляют его в другое место. Например, можно перенаправить результат команды dir в текстовый файл или передать результат команды ping в команду find для фильтрования интересных результатов, вроде
dir > temp.txt
ping askwoody.com | find “packets” > temp2.txt
Здесь во второй команде find ищет строку packets, взятую из адреса askwoody.com командой ping и объединяет все совпадающие строки в файл под названием temp2.txt.
Первая из этих команд отлично работает в PowerShell. Для запуска второй команды потребуется нечто вроде
ping askwoody.com | select-string packets | out-file temp2.txt
Использования перенаправления и труб значительно расширяет возможности командной строки Windows: вместо бесконечного прокручивания вниз по экрану в поиске текстовой строки можно отфильтровывать нужные команды Windows.
Powershell обладает поддержкой pipe, причём она не ограничена текстом. PowerShell позволяет передавать целый объект из одной командлеты в другую, где объект представляет собой комбинацию данных (называемых свойствами) и действий (методов), которые могут использовать эти данные.
Сложная часть начинается при выстраивании объектов. Поставляемые одним командлетом объекты должны совпадать с типом объектов, принимаемых получающим командлетом. Текст является весьма простым типом объектов, так что если вы работаете с текстом, выравнивание объектов является простой задачей. Остальные объекты не такие элементарные.
Как это понять? Используйте командлету get-member. Если вы хотите знать, какой тип объекта обрабатывает командлета, проведите её через get-member. Например, если вы пытаетесь понять запущенные на компьютере процессы и сузили опции до командлеты get-process, вот как узнать результат командлеты:
get-process | get-member
Запуск этой командлеты выдаёт длинный список свойств и методов для get-process, но в самом начале списка можно увидеть тип объекта, который создает get-process:
TypeName: System.Diagnostics.Process
Нижеприведенный скриншот также показывает свойства get-process под названием get-process Handles, Name, NPM, PM, SI, VM и WS.
Если вы хотите манипулировать результатом get-process для работы с этим командлетом (вместо отображения длинного списка активных процессов на мониторе), нужно найти другую команду, которая в качестве вводных данных принимает System.Diagnostics.Process. Для поиска нужной командлеты снова используйте возможности PowerShell:
get-command -Parametertype System.Diagnostics.Process
Эта командлета выдает список командлет, которые могут обрабатывать System.Diagnostics.Process.
Некоторые командлеты известны тем, что принимают почти любой вид данных. Главной среди них является where-object. Эта командлета пропускает через себя каждый посылаемый по трубе объект, один за одним, и применяет к нему заданной критерии выбора. Существует специальный маркер под названием $_, который позволяет использовать каждый предмет в трубе, один за раз.
Допустим, вы хотите получить список всех запущенных на компьютере процессов с названием «svchost», то есть хотите сопоставить свойство Name процессу svchost. Используйте команду:
get-process | where-object {$_.Name -eq “svchost”}
Командлета where-object смотрит на каждый объект System.Diagnostics.Process, сравнивает .Name этого объекта с «svchost»; если есть совпадения, они выдаются на монитор. Смотрите на скриншот.
Шаг 7: анализ полезных команд PowerShell
К настоящему времени вы уже знаете достаточно много, чтобы суметь нанести урон компьютеру, так что будьте осторожны. Посмотрим, например, часто запрашиваемые команды PowerShell.
Эти команды работают только в Windows 10 и только при запуске PowerShell от лица администратора. Они предназначены для переустановки предустановленных приложений Windows 10 и могут пригодиться тем, кто сначала удалил эти программы, а затем решил вернуть их. Команды выглядит следующим образом:
Get-AppXPackage | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)AppXManifest.xml”}
Если запустить эту команду, игнорируйте обозначенные красным цветом предупреждения, и когда команда выполнена, перезагрузите компьютер; все предустановленные программы в Windows 10 появятся на своих местах.
Вот как работает данная команда. Get-AppXPackage проверяет все пакеты приложений в профиле пользователя. Даже если вы удалили приложение, оно остается в списке профиля пользователя.
Командлета Get-AppXPackage возвращает объект TypeName Microsoft.Windows.Appx.PackageManager.Commands.AppxPackage, который включает в себя полное имя пакета приложения и местонахождения соответствующего файла манифеста XML. Если запустить командлету get-appxpackage, вы увидите длинный список пакетов приложений. Скриншот показывает описание приложения Xbox.
Командлета Foreach посредством цикла проходит через каждый объект в AppXPackage, отправляя их командлету Add-AppxPackage. Согласно get-help для Add-AppxPackage, тут есть два ключевых переключателя:
- Переключатель -Register используется для регистрации существующих установок пакетов приложений, можно задать параметры DisableDevelopmentMode и Register
- Переключатель -DisableDevelopmentMode говорит Windows заново зарегистрировать существующий пакет приложения, который был отключён, не зарегистрирован или повреждён.
Строка «$($_.InstallLocation)AppXManifest.xml» описывает, где расположен файл manifest.xml. Если посмотреть на файлы AppXManifest.xml, вы увидите сложный список идентификаторов приложений, исполняемых файлов и большое количество визуальных элементов, связанных с приложением.
После перезагрузки все добавленные пакеты приложений скачиваются и устанавливаются из магазина Windows Store.
Управляем службами Windows с помощью PowerShell
Начинаем серию переводов, посвященную управлению службами Windows с помощью PowerShell 2.0 и 3.0.
В данном посте будут рассмотрены следующие вопросы управления службами Windows:
- Получаем статус службы на локальном компьютере
- Получаем статус службы на удаленном компьютере
- Осуществляем фильтрацию служб (например, остановленные службы)
- Зависимые службы
Обозначим начальные условия: Вы работаете под Windows 7 и выше и у Вас имеются права администратора. Все команды рекомендуются выполнять в лабораторной или виртуальной среде, перед тем, как применять в “полевых условиях”.
Давайте начнем с того, что просто получим статус всех служб, запущенных на локальном компьютере. Используем для этого командлет Get-Service.
PS C:> get-service
PowerShell, как правило, не чувствителен к регистру. Вывод приведен на скриншоте ниже.
Каждая строка представляет собой объект службы (service object).Каждый сервисный объект, как правило, имеет свои свойства. Вы можете открыть их, просто передав эти объекты в другую команду, Get-Member.
PS C:> get-service | get-member
Результаты приведены на скриншоте ниже.
Параметр Typename сверху говорит о том, что за объект перед нами; в данном случае это System.ServiceProcess.ServiceController. На скриншоте также обведены свойства объекта. Это атрибуты, которые описывают этот тип объекта. Хотя большинство из них не используются при отображении по умолчанию, вы можете использовать их, если вы их знаете.
Например, нам интересно посмотреть информацию только о Windows Update. Через Get-Service получим информацию только о некоторых ее свойствах.PS C:> get-service wuauserv | select Displayname,Status,Can*
DisplayName : Windows Update
Status : Stopped
CanPauseAndContinue : False
CanShutdown : False
CanStop : False Как я узнал, что могу напечатать имя службы? Посмотрел с помощью Get-Service. PS C:> help get-serviceВы можете получить полную справочную информацию, напечатав:PS C:> help get-service –full
Информацию о службе можно получить по ее имени или даже начальным буквам имени.PS C:> get-service wi*
Status Name DisplayName
—— —- ———–
Stopped WiaRpc Still Image Acquisition Events
Running WinDefend Windows Defender Service
Running WinHttpAutoProx… WinHTTP Web Proxy Auto-Discovery Se…
Running Winmgmt Windows Management Instrumentation
Running WinRM Windows Remote Management (WS-Manag…
Или если вам удобнее работать с отображаемыми именами, используйте параметр –Displayname.
PS C:> get-service -DisplayName “windows a*”
Status Name DisplayName
—— —- ———–
Stopped AllUserInstallA… Windows All-User Install Agent
Running AudioEndpointBu… Windows Audio Endpoint Builder
Running Audiosrv Windows Audio Я должен использовать имя параметра, чтобы PowerShell воспринимал значения в качестве отображаемого имени, а не фактического имени службы. Команда будет выглядеть так:PS C:> get-service “windows a*”
Параметр –Name можно не печатать.
До этого нас интересовало получение информации о статусе служб на локальном компьютере. Однако управление службами осуществляется на удаленных компьютерах. Если посмотреть справку по Get-Service, то можно увидеть наличие у этого командлета параметра –Computername.
В данном случае подключение к удаленным компьютерам осуществляется без включения функции удаленного управления PowerShell. Если вы можете управлять службами, используя инструменты командной строки (sc.exe или консоль управления Service Manager), вы можете использовать PowerShell.
Давайте взглянем на пример:
PS C:> get-service spooler -ComputerName novo8
Status Name DisplayName
—— —- ———–
Running spooler Print Spooler
Любая команда, которую я демонстрировал, можно использовать для передачи удаленному компьютеру. Даже нескольким компьютерам, если у вас есть соответствующие права на удаленном компьютере. Если вы используете PowerShell v3, то можно легко выбрать одну службу на множестве компьютеров.PS C:> get-service wuauserv -ComputerName chi-dc01,chi-dc02,chi-dc03
Status Name DisplayName
—— —- ———–
Running wuauserv Windows Update
Stopped wuauserv Windows Update
Running wuauserv Windows Update
Для наглядности представления отформатируем вывод.PS C:> get-service wuauserv -ComputerName chi-dc01,chi-dc02,chi-dc03 | format-table Name,Status,Machinename -autosize
Name Status MachineName
—- —— ———–
wuauserv Running chi-dc03
wuauserv Stopped chi-dc02
wuauserv Running chi-dc01 Тот же самый результат, но в PowerShell v2.PS C:> 'chi-dc01','chi-dc02','chi-dc03'| foreach {get-service wuauserv -computername $_} | Format-Table Name,Status,Machinename -AutoSize
Name Status MachineName
—- —— ———–
wuauserv Running chi-dc01
wuauserv Stopped chi-dc02
wuauserv Running chi-dc03
Фильтрация служб осуществляется с помощью командлета Where-Object (where – сокращение для командлета). Все, что нам нужно от PowerShell в этом случае, так это получить только те службы, у которых статус равен “stopped”.
PS C:> get-service | where {$_.status -eq 'stopped'}
PowerShell получает информацию обо всех службах и передает их (с помощью “|”) в следующую команду, которая осуществляет просмотр каждого объекта. Если свойство статуса объекта равно “stopped”, она остается в конвейере (pipeline), в противном случае она из него исключается. В конце выражение PowerShell отображает те объекты, которые остались в конвейере. Результаты приведены ниже.Теперь давайте попробуем найти одну службу на нескольких машинах. Вывод отформатируем в таблицу.PS C:> get-service -computername @('chi-dc01','chi-dc02','chi-dc03') | where {$_.name -eq 'wuauserv'} | format-table Name,Status,Machinename -autosize
Name Status MachineName
—- —— ———–
wuauserv Running chi-dc02
wuauserv Running chi-dc01
wuauserv Running chi-dc03
Мы даже можем комбинировать запрос отдельных служб с их фильтрацией.PS C:> get-service “win*” -comp chi-dc03 | where {$_.status -eq 'running'}
Status Name DisplayName
—— —- ———–
Running Winmgmt Windows Management Instrumentation
Running WinRM Windows Remote Management (WS-Manag…
Эта команда находит все службы на компьютере CHI-DC03, которые начинаются с ‘WIN’, но отображает только те, которые запущены. Также можно сгруппировать объекты по свойству статуса (status property).PS C:> $dc03 = get-service -computername chi-dc03 | Group-Object -Property Status
Переменная $dc03 является объектом GroupInfo.PS C:> $dc03
Count Name Group
—– —- —–
64 Running {System.ServiceProcess.ServiceController, Sy…
79 Stopped {System.ServiceProcess.ServiceController, Sy…
Свойство Group представляет собой коллекцию связанных служб.
PS C:> $dc03.Get(0).group
Написанное выше проще понять, если взглянуть на скриншот.Что касается меня, то я бы предпочел использовать хеш-таблицу.PS C:> $hash = get-service -computername chi-dc03 | Group-Object -Property Status -AsHashTable
PS C:> $hash
Name Value
—- —–
Running {System.ServiceProcess.ServiceController, Sys…
Stopped {System.ServiceProcess.ServiceController, Sys…
Теперь каждое имя представляет собой свойство в хеш-таблице. Если у вас имеется опыт работы с PoweShell, вы, возможно, подумываете сделать сделующее:PS C:> $hash.running.count
Однако ничего не произойдет. Потому что свойство Status является просто перечислением (enumeration) для [System.ServiceProcess.ServiceControllerStatus] .NET клас и такие свойства, как Running и Stopped представляют собой целые числа. PowerShell осуществляет конвертацию, чтобы представить в более наглядной форме.PS C:> $hash = get-service -computername chi-dc03 | Group-Object -Property Status –AsHashTable –AsString
В чем суть параметра –AsString, на мой взгляд, достаточно очевидно. Теперь работать с хеш-таблицей стало проще.PS C:> $hash.running.count
62
PS C:> $hash.running[0..3]
Status Name DisplayName
—— —- ———–
Running ADWS Active Directory Web Services
Running AppHostSvc Application Host Helper Service
Running BFE Base Filtering Engine
Running BrokerInfrastru… Background Tasks Infrastructure Ser…
Следующей задачей на повестке дня является проверка зависимостей сервера (server dependencies). PowerShell позволяет просто получить статус всех служб, которые требуется для данной службы, даже на удаленном компьютере.PS C:> get-service dns -ComputerName chi-dc03 –RequiredServices
Status Name DisplayName
—— —- ———–
Running Afd Ancillary Function Driver for Winsock
Running Tcpip TCP/IP Protocol Driver
Running RpcSs Remote Procedure Call (RPC)
Running NTDS Active Directory Domain Services
Параметр –RequiredServices передаст объект в конвейер для каждой требуемой службы. Вы можете даже пойти дальше и проверить требуемые службы для работы данной службы.
PS C:> get-service dns -ComputerName chi-dc03 -RequiredServices | select name,@{name=”computername”;expression={$_.machinename}} | get-service -RequiredServices
Status Name DisplayName
—— —- ———–
Running RpcEptMapper RPC Endpoint Mapper
Running DcomLaunch DCOM Server Process Launcher
Параметр –Computername командлета Get-Service возьмет вывод, но только для тех объектов, у которых есть объект свойство Computername – именно поэтому я использую хеш-таблицу с Select-Object. Как мы видим проблем со службой DNS на компьютере CHI-DC03 нет.
Мы можем сделать то же самое с зависимыми службами. Если таковых не имеется, в конвейер ничего передано не будет.
PS C:> get-service dns -ComputerName chi-dc03 -DependentServices
PS C:> get-service lanmanworkstation -ComputerName chi-dc03 -DependentServices
Status Name DisplayName
—— —- ———–
Stopped SessionEnv Remote Desktop Configuration
Running Netlogon Netlogon
Running Dfs DFS Namespace
Running Browser Computer Browser Требуемые и зависимые службы также являются частью каждого объекта службы.PS C:> get-service rpcss | Select *services
RequiredServices DependentServices
—————- —————–
{RpcEptMapper, DcomLaunch} {WwanSvc, wuauserv, WSearch, wscsvc…}
А пока Вы можете получить все зависимости для всех служб, следующая командаPS C:> get-service –DependentServices
Это не даст вам особо полезную информацию, поэтому я рекомендую осуществлять запрос по конкретным службам. Команда работает гораздо лучше PowerShell v3.PS C:> get-service dns -comp chi-dc01,chi-dc03 -RequiredServices | Sort Machinename,Name | Format-table -GroupBy machinename
Результаты видны на скриншоте ниже.Чтобы получить подобные результаты в PowerShell v2, вам придется передать имена компьютеров (computernames) в Get-Service.PS C:> “chi-dc01″,”chi-dc03” | foreach { get-service dns -comp $_ -RequiredServices} | Sort Machinename,Name | format-table -GroupBy machinename
В следующей статье будет рассмотрен запуск, остановка и перезапуск служб. Конец перевода.
Upd:
В посте приведены переводы статей с портала 4sysops.com
Managing Services the PowerShell way – Part 1
Managing Services the PowerShell way – Part 2
P.S. Хотим также поделиться нашей бесплатной программой для управления службами Windows – NetWrix Service Monitor.
Программа отслеживает все автоматически запускаемые службы на группе серверов и в случае внезапного сбоя одной или нескольких из них отправляет уведомления по электронной почте.
Функция перезапуска гарантирует, что все подконтрольные службы будут работать без простоев. Программа проста в настройке: устанавливаем, вводим имена компьютеров и указываем нужный адрес электронной почты.