Mini-ats102.ru

ООО “Мультилайн”
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Работа с исполняемыми файлами в оболочке PowerShell

Работа с исполняемыми файлами в оболочке PowerShell

Оболочка Windows PowerShell построена с использованием интерактивного интерфейса командной строки (CLI). Одна из основных задач интерфейса CLI – предоставить пользователям возможность запускать программы. Однако я не раз сталкивался с такими вопросами как: «Необходимо запустить такую-то утилиту командной строки в оболочке PowerShell. Я безуспешно пытался различными способами заключить параметры в кавычки. Как заставить программу корректно работать в оболочке PowerShell?»

Выполнение исполняемого файла с корректной расстановкой кавычек в оболочке Cmd.exe не представляет трудности, ведь процесс Cmd.exe не проводит дополнительный синтаксический анализ командной строки с исполняемым файлом. Если вы пишете сценарий для оболочки Cmd.exe (то есть пакетный файл), запускаемый как исполняемый файл, то можете увидеть, как будет выглядеть командная строка исполняемого файла, просто добавив к этой командной строке префикс Echo, который дает оболочке Cmd.exe команду не выполнять полученную строку, а вывести ее на экран. Это простая и эффективная техника отладки.

Однако в оболочке PowerShell задача немного усложняется, поскольку синтаксический анализатор командной строки здесь сложнее, чем в оболочке Cmd.exe. Команда Echo в оболочке PowerShell на самом деле является псевдонимом команды Write-Host, поэтому вы не можете задействовать ее в оболочке PowerShell для просмотра полной командной строки, как в оболочке Cmd.exe. В оболочке PowerShell отсутствует встроенный механизм просмотра полной командной строки для исполняемого файла.

Чтобы обойти данное ограничение, я написал короткую программу для командной строки, ShowArgs.exe. Цель этой программы — вывести на экран переданные ей параметры командной строки без анализа или интерпретации. Заменив ShowArgs.exe программу, которую вы пытаетесь запустить (но сохраняя параметры вашей программы), вы сможете увидеть именно те параметры командной строки, которые будет использовать оболочка PowerShell.

Используя приложение ShowArgs.exe (доступно для загрузки на нашем сайте), я покажу, как справляться с наиболее распространенными проблемами типа «как правильно заключить выражение в кавычки» при запуске исполняемых файлов в оболочке PowerShell. Для примеров, приведенных в этой статье, я создал каталог с именем C:Sample Tools и скопировал файл ShowArgs.exe в него.

Запуск исполняемых файлов в оболочке PowerShell

Для запуска исполняемого файла в оболочке PowerShell достаточно просто указать его имя. Точно так же запускаются исполняемые файлы в оболочке Cmd.exe. На экране 1 приведены два примера запуска приложения ShowArgs.exe напрямую в оболочке PowerShell. На экране 1 для запуска приложения ShowArgs.exe требуется префикс «.», так как оболочка PowerShell по умолчанию не запускает исполняемые файлы из текущего каталога.

Запуск исполняемого файла в PowerShell
Экран 1. Запуск исполняемого файла в PowerShell

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

Использование оператора вызова в некоторых случаях не является обязательным
Экран 2. Использование оператора вызова в некоторых случаях не является обязательным

Однако вы не можете использовать оператор & для вызова командной строки целиком. На экране 3 показана эта распространенная ошибка. Первая команда на экране 3 завершается с ошибкой, потому что строка, заключенная в кавычки, после оператора вызова не является именем файла (о чем и сообщает система). Вторая команда на экране 3 исправляет эту ошибку. В этой команде в кавычки помещается только имя исполняемого файла, а параметры выносятся в конец команды.

Общие ошибки при использовании оператора вызова
Экран 3. Общие ошибки при использовании оператора вызова

Как показано на экране 4, вы можете сохранить результаты выполнения исполняемого файла в переменную. Первая команда на экране запускает файл Find.exe с параметром «/?» и сохраняет результат в переменную $findHelp. Вторая команда показывает, что переменная содержит массив, а последняя выводит на экран содержимое массива. Если программа возвращает только одну строку, переменная будет содержать отдельную строку, а не массив.

Сохранение результатов выполнения исполняемого файла в переменную
Экран 4. Сохранение результатов выполнения исполняемого файла в переменную

Командная строка исполняемого файла: заключение параметров в кавычки

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

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

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

Читайте так же:
Гаджеты погоды на рабочий стол windows 7

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

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

Инструкция 2. Если в качестве параметра исполняемого файла вы хотите передать переменную, то можете просто поместить переменную в командную строку с исполняемым файлом. Ниже приведен пример:

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

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

Аналогичная ситуация возникает, если между параметром и аргументом находится разделительный символ, например двоеточие (:) или знак равенства (=). Другими словами, следующие две команды эквивалентны:

Следующие две команды также эквивалентны:

Как и в предыдущих примерах, добавление дополнительных кавычек не обязательно.

Инструкция 4. Если вы используете переменную в качестве аргумента параметра, не требуется добавлять дополнительные кавычки, даже если содержимое переменной включает пробелы. Например, все перечисленные ниже команды будут работать корректно:

Инструкция 5. Если параметр начинается с дефиса (-), аргумент параметра связан с параметром (не отделен пробелом) и аргумент параметра хранится в переменной, необходимо либо поставить перед дефисом в начале параметра знак обратной кавычки (`) либо взять в кавычки параметр целиком или только его связанный аргумент. Например, следующая команда не будет работать корректно:

Вместо нее необходимо использовать одну из команд:

Это правило применяется, когда параметр и аргумент либо связаны напрямую (например, -name$name) или через символ (такой как: или =), стоящий между ними. Однако оно неприменимо, если аргумент параметра не хранится в переменной. Например, следующие две команды эквивалентны:

Если вы не знаете наверняка, командную строку какого вида оболочка PowerShell будет использовать, замените имя исполняемого файла приложением ShowArgs.exe, и вы увидите именно те параметры командной строки, которые оболочка PowerShell будет использовать для запуска исполняемого файла.

Получение кода завершения исполняемого файла

Оболочка Cmd.exe использует динамическую переменную окружения ERRORLEVEL для хранения кода завершения последнего запущенного исполняемого файла. Оболочка PowerShell для этих целей использует переменную $LASTEXITCODE. Обычно можно проверить, возникли ли ошибки при выполнении исполняемого файла, выяснив, равна ли переменная $LASTEXITCODE нулю.

Формирование командной строки исполняемого файла, использующей логические операторы

Если требуется сформировать командную строку, зависящую от логических операторов, вам может потребоваться дополнительная гибкость. Например, рассмотрим сценарий Test.ps1 в листинге 1.

Если вы запустите сценарий Test1.ps1 с параметром -Test, оболочка PowerShell выполнит команду:

Однако на самом деле необходимо, чтобы оболочка PowerShell выполнила команду:

Другими словами, мы хотим, чтобы оболочка PowerShell интерпретировала параметр $params как командную строку целиком, а не как отдельный строковый параметр исполняемого файла.

Одно решение заключается в использовании команды Start-Process (см. листинг 2). У команды Start-Process есть параметр -ArgumentList, который представляет собой массив параметров командной строки. Оболочка PowerShell автоматически не расставляет кавычки для этих параметров, так что вам придется вставить кавычки там, где нужно.

У использования команды Start-Process есть ряд недостатков:

  • Если вы хотите перехватить выходные данные исполняемого файла, необходимо задействовать параметр -RedirectStandardOutput. Сценарий Test3.ps1 в листинге 3 иллюстрирует этот подход. Данный сценарий создает временный файл, запускает исполняемый файл (перенаправляя выходные данные во временный файл) и возвращает выходные данные с помощью команды Get-Content.
  • Команда Start-Process не обновляет переменную $LASTEXITCODE.

Чтобы добавить еще немного гибкости, вы можете задействовать функцию Start-Executable, описанную в листинге 4. Функция Start-Executable не использует временный файл и обновляет переменную $LASTEXITCODE. Параметр -ArgumentList данной функции работает аналогично параметру -ArgumentList команды Start-Process.

Читайте так же:
Гибернация что это такое windows

Включение и отключение компонентов Windows 10

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

Начнем с того, что существует два основных способа работы с компонентами (они еще называются features) — утилита DISM и командлеты Powershell. И то и другое встроено в Windows 10, в отличие от Windows 7, где dism можно было добавить или установив пакет Windows ADK, или руками скопировав dism.exe с другого компьютера.

Сразу отмечу, что утилиту dism и среду powershell для работы с системой необходимо запускать от имени администратора, даже если ваш аккаунт уже находится в группе локальных админов. Итак, вы или находите cmd или windows powershell в меню и, кликнув правой кнопкой мышки, выбираете «Запуск от имени администратора«.

В Windows 10 есть понятие Features и Capabilities. Первое — это привычные нам компоненты, которые можно найти в Панели управления -> Программы и компоненты -> Включение и отключение компонентов Windows. То есть это встраиваемые модули, которые выполняют определенный сервисный функционал.

Capabilities — это дополнительные возможности, которые расширяют возможности интерфейса и увеличивают удобство пользователя. Среди них — Language packs, наборы шрифтов. Да, Microsoft удалил часть нестандартных шрифтов, которые теперь вынесены в опциональные компоненты. Скачать эти компоненты можно в виде ISO файла с сайта Volume Licensing Service Center или напрямую через Internet и графический интерфейс Windows. Такую концепцию Microsoft назвала Features on Demand (FOD). Их в более ранних версия Windows не было.

Работаем с Windows Features

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

Dism /online /Get-Features

Вот как в Powershell можно получить список всех компонентов командлетами Get-WindowsFeature (для Windows Server) или Get-WindowsOptionalFeature (Windows 10):

Чтобы получить список отключенных компонентов, введите:

Get-WindowsOptionalFeature -Online | ? state -eq ‘disabled’ | select featurename

Этот список также можно вывести в файл (для windows Server):

Get-WindowsFeature | Where-Object <[H1toH2] .Installed -match “True”>| Select-Object -Property Name | Out-File C:TempWindowsFeatures.txt

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

Dism /online /Enable-Feature /FeatureName:TFTP /All

ключ /All позволяет включить также все дочерние компоненты;

Установка компонентов через Powershell выполняется командой Enable-WindowsOptionalFeature.

Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell

Параметр -All включает все дочерние компоненты.

Dism /online /Disable-Feature /FeatureName:TFTP

Аналогично, через Powershell это можно сделать командой Disable-Windowsoptionalfeature -online -featureName [feature name].

Обратите внимание, некоторые фичи имеют разные названия в Windows 7 и Windows 10. Например, RSAT в Windows 7 — это RemoteServerAdministrationTools, а в Windows 10 — RSATclient.

Управление Features on Demand (FOD)

Если вы устанавливаете их через графический интерфейс, то вам необходимо пройти “System –> App & features –> Manage optional features” и нажать знак + напротив необходимых компонентов.

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

DISM.EXE /Online /Get-Capabilities

или на Powershell:

Как и прежде, запомните название необходимых вам компонентов, чтобы включить их командой (на примере .Net Framework 3):

DISM.EXE /Online /Add-Capability /CapabilityName:NetFx3

или на Powershell:

Add-WindowsCapability –Online -Name NetFx3

Если же у вас нет доступа в Интернет, то есть выход. Итак, вы скачиваете ISO образ диска с FOD компонентами с сайта Volume Licensing Service Center. Файлы будут разные для разных релизов Windows 10 — 1511, 1607, 1703, 1709. Важно помнить, что компоненты одного релиза не подходят к другому. Если вы сделаете in-place upgrade (установка одного релиза поверх другого через обновление), то несовместимые установленные компоненты будут удалены без вашего желания! Да, Microsoft удаляет то, что считает несовместимым при обновлении.

Так вот, ISO файл содержит набор неизвестных и сложных для понимания файлов с расширением cab. Вот чудесный файлик на сайта Microsoft, который обясняет назначение каждого файла. Итак, существуют следующие типы FOD:

  • Microsoft-Windows-LanguageFeatures-Basic — проверка правописания для различных языков и раскладок клавиатуры;
  • Microsoft-Windows-LanguageFeatures-Fonts — национальные шрифты, например, азиатские
  • Microsoft-Windows-LanguageFeatures-OCR — средства для распознавания шрифтов
  • Microsoft-Windows-LanguageFeatures-Handwriting — средства для распознавания рукописного ввода
  • Microsoft-Windows-LanguageFeatures-TextToSpeech — средства преобразования текста в голос, используемые подсказчиком Cortana
  • Microsoft-Windows-LanguageFeatures-Speech — распознавание голоса
  • Microsoft-Windows-InternationalFeatures — пакеты национальных настроек, например, для Тайваня
Читайте так же:
Вылетает wifi на ноутбуке windows 10

Итак, для добавления таких FOD компонентов, используйте команды вида (замените имя компонента):

Dism /Online /Add-Capability /CapabilityName:Language.Basic

Для удаления FOD:

Dism /Online /Remove-Capability /CapabilityName:Language.Basic

Установка и переустановка пакетов языков (Language Interface Packs, LIP)

Язык интерфейса Windows можно поменять, установив так называемые LIP. ранее они назывались MUI (Multi user interface). Файлы LIP выглядят так: Microsoft-Windows-Client-Language-Pack_x64_es-es.cab для испанского языка. Выглядеть установка будет примерно так:

Dism /Add-Package /online /PackagePath:"C:LanguagesMicrosoft-Windows-Client-Language-Pack_x64_fr-fr.cab"

Dism /Remove-Package /online /PackageName:Microsoft-Windows-Client-LanguagePack-Package

В следующей статье мы поговорим как с помощью DISM и Powershell управлять так называемыми Modern-приложениями AppX.

[Посещений: 14 978, из них сегодня: 2][/H1toH2]

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

Допустим, что стороннее ПО, даже с подписью Microsoft из набора sysinternals, строго запрещено службой безопасности и/или блокируется политиками. Однако с правами администратора можно создавать и выполнять задания в планировщике для запуска команд и скриптов.

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

Шаг 1 — Создайте простое задание на разовый запуск программы

В качестве действия укажите:

  • Команда: powershell
  • Параметры для выполнения команды: -ExecutionPolicy Bypass -Noprofile -Command ваша_команда
    или
    Параметры для выполнения скрипта: -ExecutionPolicy Bypass -Noprofile -File путь_к_файлу.ps1

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

За неимением утилиты используем PowerShell — считаем и складываем размер всех файлов во всех папках (конечно, я не рекомендую применять этот подход ко всему диску :).

Шаг 2 — Настройте задание на запуск от имени системы

На вкладке Общие нажмите Изменить и введите SYSTEM или СИСТЕМА в зависимости от локализации.

Запуск от имени системы средствами Windows

Автоматизацию создания таких запланированных задач я разбирал с помощью schtasks и PowerShell. Остается запустить задание и открыть созданный файл. Все просто!

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

Изменение политики безопасности PowerShell — Выполнение сценариев

Находим нужную политику: Конфигурация Компьютера — Административные шаблоны — Компоненты Windows — Windows PowerShell и открываем политику: «Включить выполнение сценариев»

По умолчанию она выключена, а это значит, что выполнение скриптов ЗАПРЕЩЕНО!

Включая — нам становятся доступны опции политики выполнения и если вас не интересует подпись сертификатов — вы выбираете «Разрешить все сценарии«.

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

Для проверки текущей политики безопасности существует командлет:

Get-ExecutionPolicy

Restricted — блокируются любые скрипты.

AllSigned — разрешены только те, которые имеют цифровую подпись

RemoteSigned — скрипты, на локальном компьютере, можно запускать без ограничений. Скрипты, загруженные из интернета — только при наличии цифровой подписи.

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

Bypass — ничего не блокируется, никакие предупреждения и запросы не появляются.

Последний вариант часто используют в пакетниках, вызывая доверенные ps1 скрипты, для беспроблемного запуска. Например:

powershell.exe -executionpolicy bypass -File C:scriptsbackup.ps1

Кстати запуск из cmd или bat — Это еще один наиболее простой запуск ps1 скрипта без заморочки на политику безопасности и подписании скриптов 🙂

Jump Start в PowerShell (часть I)

В качестве хобби и при наличии времени преподаю студентам в УКИТ (бывший Московский государственный колледж информационных технологий). На данный момент у меня мало времени, чтобы уделить его группе студентов, зато вполне достаточно, чтобы подготовить пост здесь, на Хабре.

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

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

Внимание: PowerShell вызывает привыкание.

Читайте так же:
Где находятся временные файлы в windows 7

Введение

Выглядеть среда PowerShell может так, как командная строка:


powershell.exe

Или в виде приложения:


powershell_ise.exe

Powershell_ise.exe называется интегрированной средой сценариев — Windows PowerShell ISE. Позволяет работать с языком в удобной среде с подсветкой синтаксиса, конструктором команд, автозаполнением команд по нажатию TAB и прочими прелестями. Идеальна для создания и тестирования сценариев.

Для запуска среды powershell.exe или powershell_ise.exe достаточно набрать аналогичное название в строке выполнить.

Файл сценария PowerShell имеет расширение .ps1.

Сценарий не получится запустить двойным ЛКМ. Это сделано специально для того, чтобы не нанести вред системе случайно запущенным скриптом.

Для запуска, по клику ПКМ следует выбрать «Выполнить с помощью PowerShell»:

Помимо того, что существует ограничение по запуску сценариев ЛКМ, по умолчанию выполнение сценариев в системе запрещено, опять же, по описанной выше причине — не нанести вред системе. Для проверки текущей политики выполнения выполним команду:

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

  • Restricted — Сценарии не могут быть запущены;
  • AllSigned — Могут быть запущены только сценарии, подписанные доверенным издателем. Перед выполнением сценария доверенного издателя будет запрашиваться подтверждение;
  • RemoteSigned — Разрешено выполнять созданные нами сценарии и скачанные сценарии, подписанные доверенным издателем;
  • Unrestricted — Никаких ограничений, все скрипты могут быть запущены.

Для выполнения и тестирования понизим политику до RemoteSigned выполнив команду:

Приступаем к работе

Командлет
  • Командлетами называются команды PowerShell, в которых заложена различная функциональность;
  • Командлеты могут быть как системными, так и пользовательскими, созданные кем-либо;
  • Командлеты именуются по правилу Глагол-Существительное, что упрощает их запоминание;
  • Командлеты выводят результаты в виде объектов или их коллекций;
  • Командлеты могут как получать данные для обработки, так и передавать данные по конвейеру (про конвейеры позже);
  • Командлеты не чувствительны к регистру (можно написать и get-process, и Get-Process, и GeT-pRoCeSs);
  • После командлетов не обязательно ставить «;«, за исключением, когда мы выполняем несколько командлетов в одну строку (Get-Process; Get-Services).

Например, для получения текущих процессов, мы выполним команду:

И получим результат:

Попробуйте самостоятельно выполнить:

Не обязательно знать наизусть все командлеты. Get-Help спасёт ситуацию.
Информацию о всех доступных командлетах можно получить, введя следующую команду:

Если мы используем PowerShell ISE, мы облегчаем процесс разработки.
Достаточно ввести знак тире «» после того, как ввели командлет, и мы получим все возможные варианты параметров и их типы:

Если, всё же, мы забудем какие свойства есть у того или иного командлета, прогоним его через Get-Member:

Недостаточно информации? Обратимся к справке с параметром -Examples:

Получаем описание Get-Process, да ещё и с примерами использования:

  • Командлеты могут иметь сокращённые названия — алиасы. Например, вместо Get-Help можно использовать просто Help. Для получения всех сокращений выполните Get-Alias.

Что аналогично записи:

А теперь остановим процесс:

Немногим ранее мы сказали, что командлеты именуются по правилу Глагол-Существительное. Уточню, что глагол не обязательно должен быть Get. Помимо того, что мы можем получать, мы можем задавать Set (помните, Set-ExecutionPolicy), запускать Start, останавливать Stop, выводить Out, создавать New и многие другие. Название командлета ни чем не ограничивается и, когда мы будем с вами создавать свой собственный, сможем назвать его так, как душе угодно.

Попробуем выполнить вывод в файл:

Кстати, аналогично можно записать так:

Комментарии

Мы все знаем, использовать комментарии является хорошим тоном.

Комментарии в PowerShell бывают строчные — # и блочные — <##>:

Обратим внимание, на код из примера:

Для тех, кто знаком с WMI, кто делает это на старом добром VBScript, помните, сколько кода надо написать?

Конвейер

Конвейер (|) — передаёт выходные данные одной команды во входные данные на обработку другой команде. Мы использовали конвейер ранее, получая все свойства объекта или, в предыдущем примере, выбирая из набора данных только поле Caption.

Чтобы понять принцип конвейера, давайте выполним код:

Что произойдёт: получаем все службы (Get-Service), передаём все полученные службы на сортировку в командлет Sort-Object и указываем, что хотим отсортировать их по параметру Status. На выводе мы получим сначала все службы со статусом Stop, а потом все службы со статусом Running.

В примере ниже мы сначала получим все запущенные службы. После первого конвейера проходимся по каждому элементу, выбираем только те службы, у которых статус Running и на втором конвейере выбираем, что хотим на выводе увидеть только displayname служб:

Читайте так же:
Где находится java в windows 10

В примере мы используем [H1toH2]
. Данная запись означает текущий элемент в конвейере.

Послесловие

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

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

[/H1toH2]

Примеры, как это реализовано у нас

1. Перезапуск пула приложения на IIS

Для перезапуска пула ранее мы использовали класс ServerManager. Но скорость его работы не подходит под наши требования.

Решением было переписать механизм на использование PowerShell.

Перезапуск пула состоит из следующих этапов:

1. Поиск названия пула приложения на IIS по относительному пути публикации

2. Проверка состояния пула на наличие запущенных рабочих процессов w3wp

3. Остановка пула и ожидание остановки

4. Запуск пула и ожидание запуска

Рассмотрим каждый этап

Поиск названия пула

где PublishSiteName — название сайта публикации
AcDbPublishPath — относительный путь публикации.

В результате получаем объект PSObject у которого в свойствах есть поле applicationPool — название пула приложения.

Проверка состояния пула

где AppPoolName — название пула приложения, полученное из предыдущего шага.

В результате получаем собственный объект PSObject, в который записываем только необходимые нам значения. А именно название, состояние и количество рабочих процессов.

Остановка пула и ожидание остановки

image-7

Данный скрипт запускает остановку пула, ожидает его остановку и ничего не возвращает.

Запуск пула и ожидание запуска

image-8

Данный скрипт работает аналогичным образом, как и при остановке.

2. Закрытие открытых файлов информационных баз на удаленных файловых хранилищах

Данная операция нужна для завершения сессий в пользовательских базах 1С.

Выполняется она следующей командой

где AcDbPath — относительный путь к файлам базы 1С.

PowerShell подключается к удаленному файловому хранилищу и выполняет аналогичные действия, как и при ручном закрытии открытых файлов через “Управление компьютером” -> “Общие папки” -> “Открытые файлы”

Большой плюс PowerShell — это простота и удобство использования за счет синтаксиса и возможностей удаленного управления серверами. А интеграция с C# дает хороший прирост в производительности в сравнении с другими утилитами. Мы имеем мощный инструмент для реализации огромного количества задач администрирования. Начиная от перезапуска и конфигурации системы до обеспечения доступа к ресурсам удаленной машины (файлам, папкам, программам).

Что делать, если он не открывается

Проще всего найти PowerShell через Поиск. Пользователю нужно лишь написать в поисковой строке название искомого приложения на английском. Опция Поиск есть во всех версиях Виндовса. С ее помощью удается отыскать любой элемент ОС. В некоторых продуктах Win Поиск закреплен в списке меню Пуск. Именно эта опция позволяет за считанные секунды отыскать ПоверШелл. Запустить утилиту разрешается на пользовательских и администраторских правах.

Иногда, после установки очередного пакета обновлений, ПоверШелл может не открыться. В этом случае рекомендуется откатить систему назад (через точку восстановления). Можно просто удалить последние установленные на ПК обновления Виндовса и посмотреть на результат.

screenshot_19

Если утилита ПоверШелл перестала работать, рекомендуется:

  • Активировать полное сканирование и проверку безопасности. Иногда инструмент не открывается из-за атаки вредоносного ПО. В первую очередь, рекомендуется просканировать ПК на вирусы из безопасного режима. Чаще всего причиной неполадок с утилитой является вирус Несущий угрозу файл обычно носит название: dllhst3g.exe * 32 или dllhost.exe * 32. Остановить вирус можно из Диспетчера задач.

screenshot_20

  • Инициировать чистую загрузку:
  • активировать «Выполнить»;
  • в строчке «Открыть» написать: «msconfig»;

screenshot_21

  • появится окошко «Конфигурация системы»;
  • перейти в «Общие»;

screenshot_22

  • в подпункте «Выборочный запуск» убрать галочку около «Загружать элементы запуска»;

screenshot_23

  • перейти в «Услуги»;
  • активировать опцию «Скрыть все службы Майкрософт» и нажать «Отключить все»;
  • перейти в «Автозагрузка»;
  • активировать «Открыть диспетчер задач»;
  • войти в «Диспетчер…» и отключить все автозагрузки;

screenshot_24

  • сохранить изменения, закрыть окна, перезагрузить ПК.
  • Отключить и еще раз включить приложение:
  • одновременно нажать на «Win» и «X»;
  • активировать «Панель управления»;
  • перейти в подраздел «Категория»;

screenshot_25

  • потом активировать «Программы»;

screenshot_26

  • отыскать PowerShell и отключить опцию;

screenshot_27

  • выполнить перезагрузку ПК и опять включить утилиту.

Создать новую учетную запись «Майкрософт». Иногда приложение не открывается или прекращает работу, если повреждена учетная запись. В таком случае рекомендуется создать новый аккаунт (из раздела «Настройки»). Перед созданием еще одной учетной записи рекомендуется сделать резервную копию своих файлов.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector