Обновление версии powershell в windows

В этой статье мы рассмотрим, как обновить версию Windows PowerShell до актуальной 5.1 и установить (обновить) PowerShell Core 7.0. В предыдущей статье мы

PowerShell включает конвейерPowerShell has a pipeline

Пожалуй, конвейеры являются наиболее полезной концепцией в интерфейсах командной строки.Pipelines are arguably the most valuable concept used in command-line interfaces. При правильном использовании конвейеры упрощают работу со сложными командами и отслеживание потока выполнения.When used properly, pipelines reduce the effort of using complex commands and make it easier to see the flow of work. Каждая команда в конвейере передает свои выходные данные, элемент за элементом, следующей команде.Each command in a pipeline passes its output, item by item, to the next command. Команды обрабатывают только один объект за раз.Commands don’t have to handle more than one item at a time. Это снижает потребление ресурсов и позволяет получать выходные данные немедленно.The result is reduced resource consumption and the ability to get output immediately.

Эта нотация конвейера похожа на нотацию, которая используется в других оболочках.The notation used for pipelines is similar to the notation used in other shells. На первый взгляд не совсем понятно, чем отличаются конвейеры в PowerShell.At first glance, it may not be apparent how pipelines are different in PowerShell. Хотя вы видите на экране текст, PowerShell передает по конвейеру между командами не текст, а объекты.Although you see text on the screen, PowerShell pipes objects, not text, between commands.

Например, вы можете использовать командлет для принудительного постраничного отображения выходных данных из другой команды. На экране эти данные будут показаны как обычный текст, разбитый на страницы:For example, if you use the cmdlet to force a page-by-page display of output from another command, the output looks just like the normal text displayed on the screen, broken up into pages:

Разбиение на страницы также снижает потребление ресурсов ЦП, так обработку продолжает командлет , когда он получает всю страницу для отображения.Paging also reduces CPU utilization because processing transfers to the cmdlet when it has a complete page ready to display. Командлет, стоящий в конвейере выше, приостанавливает выполнение, пока не будет готова следующая страница выходных данных.The cmdlets that precede it in the pipeline pause execution until the next page of output is available.

Объекты в конвейереObjects in the pipeline

При запуске командлета в PowerShell вы видите выходные данные в виде текста — именно так в окне консоли и должны отображаться объекты.When you run a cmdlet in PowerShell, you see text output because it is necessary to represent objects as text in a console window. В текстовом представлении могут отображаться не все свойства выводимого объекта.The text output may not display all of the properties of the object being output.

Например, рассмотрим командлет .For example, consider the cmdlet. Эти выходные данные в виде текста содержат сводную информацию, а не полное представление объекта, возвращаемого командлетом .The text output is a summary of information, not a complete representation of the object returned by . Процесс, который форматирует данные для отображения на экране, добавляет к выходным данным заголовок.The heading in the output is added by the process that formats the data for onscreen display.

При передаче выходных данных по конвейеру в командлет отображаются сведения об объекте, возвращаемом .Piping the output to the cmdlet displays information about the object returned by .

Командлет возвращает объект PathInfo, который содержит текущий путь и другие сведения. returns a PathInfo object that contains the current path and other information.

Стандартные способ запуска

Пожалуй, самый простой способ запустить программу Windows PowerShell это воспользоваться меню «Выполнить». Как в Windows 7, так и в случае Windows 10, меню «Выполнить» можно вызвать при помощи комбинации клавиш Win-R. После нажатия данной комбинации клавиш появляется небольшое окно с текстовым полем для ввода команды. Чтобы запустить данную программу введите команду «powershell» и нажмите на клавишу ввода.

Еще один простой способ запуска Windows PowerShell – это поиск в меню «Пуск». Чтобы воспользоваться данным вариантом просто откройте меню «Пуск» и введите в поиск название программы. После этого операционная система найдет нужную программу и предложит ее открыть.

После этого программу можно запустить, просто кликнув по ней в результатах поиска. Оба этих способа одинаково работают что в Windows 7, что в Windows 10.

Сохранение и отзыв последних расположений (Push-Location и Pop-Location)Saving and Recalling Recent Locations (Push-Location and Pop-Location)

При изменении расположения полезно отслеживать свое предыдущее расположение и иметь возможность вернуться к нему.When changing locations, it is helpful to keep track of where you have been and to be able to return to your previous location. Командлет Push-Location в Windows PowerShell создает упорядоченный журнал («стек») путей к каталогам, которые вы открывали, чтобы можно было вернуться по нему на шаг назад, используя дополнительный командлет Pop-Location.The Push-Location cmdlet in Windows PowerShell creates a ordered history (a «stack») of directory paths where you have been, and you can step back through the history of directory paths by using the complementary Pop-Location cmdlet.

Например, Windows PowerShell обычно запускается в корневом каталоге пользователя.For example, Windows PowerShell typically starts in the user’s home directory.

Примечание

Слово стек имеет специальное значение во многих параметрах программирования, включая .NET Framework.The word stack has a special meaning in many programming settings, including .NET Framework. Например, в физическом стеке элементов последний элемент, помещенный в стек, является первым элементом, который можно извлечь из него.Like a physical stack of items, the last item you put onto the stack is the first item that you can pull off the stack. Добавление элемента в стек в разговорной речи называется «проталкиванием» элемента в стек.Adding an item to a stack is colloquially known as «pushing» the item onto the stack. Извлечение элемента из стека в разговорной речи называется «выводом» элемента из стека.Pulling an item off the stack is colloquially known as «popping» the item off the stack.

Чтобы передать текущее расположение в стек, а затем переместить его в папку локальных параметров, введите:To push the current location onto the stack, and then move to the Local Settings folder, type:

После этого можно передать расположение локальных параметров в стек и переместить его в папку Temp, введя следующее:You can then push the Local Settings location onto the stack and move to the Temp folder by typing:

Чтобы убедиться, что каталоги изменены, введите команду Get-Location.You can verify that you changed directories by entering the Get-Location command:

После этого можно перейти в последний открытый каталог, введя команду Pop-Location, и проверить изменение, введя команду Get-Location.You can then pop back into the most recently visited directory by entering the Pop-Location command, and verify the change by entering the Get-Location command:

Как и в случае с командлетом Set-Location, можно включить параметр -PassThru при вводе командлета Pop-Location, чтобы открыть указанный каталог.Just as with the Set-Location cmdlet, you can include the -PassThru parameter when you enter the Pop-Location cmdlet to display the directory that you entered:

Кроме того, можно использовать командлеты расположения с сетевыми путями.You can also use the Location cmdlets with network paths. Если у вас есть сервер FS01 с общей папкой Public, можно изменить расположение, введяIf you have a server named FS01 with an share named Public, you can change your location by typing

или диспетчер конфигурации службor

Чтобы изменить расположение на любой доступный диск, можно использовать команды Push-Location и Set-Location.You can use the Push-Location and Set-Location commands to change the location to any available drive. Например, если у вас есть локальный дисковод компакт-дисков с буквой диска D, содержащий компакт-диск с данными, вы можете изменить расположение на него, введя команду Set-Location D: .For example, if you have a local CD-ROM drive with drive letter D that contains a data CD, you can change the location to the CD drive by entering the Set-Location D: command.

Если дисковод пуст, вы получите следующее сообщение об ошибке:If the drive is empty, you will get the following error message:

В интерфейсе командной строки проводник неудобно использовать для просмотра свободных физических дисков.When you are using a command-line interface, it is not convenient to use File Explorer to examine the available physical drives. Также в проводнике будут показаны не все диски PowerShell.Also, File Explorer would not show you the all of the Windows PowerShell drives. Windows PowerShell предоставляет набор команд для управления дисками Windows PowerShell, о которых речь пойдет далее.Windows PowerShell provides a set of commands for manipulating Windows PowerShell drives, and we will talk about these next.

Запуск 32-разрядной версии Windows PowerShellStarting the 32-Bit Version of Windows PowerShell

При установке Windows PowerShell на 64-разрядном компьютере в дополнение к 64-разрядной версии устанавливается Windows PowerShell (x86) — 32-разрядная версия Windows PowerShell.When you install Windows PowerShell on a 64-bit computer, Windows PowerShell (x86), a 32-bit version of Windows PowerShell is installed in addition to the 64-bit version. При открытии Windows PowerShell по умолчанию запускается 64-разрядная версия.When you run Windows PowerShell, the 64-bit version runs by default.

Однако в некоторых случаях нужно запустить Windows PowerShell (x86) , например при использовании модуля, которому требуется 32-разрядная версия, или при удаленном подключении к 32-разрядному компьютеру.However, you might occasionally need to run Windows PowerShell (x86), such as when you’re using a module that requires the 32-bit version or when you’re connecting remotely to a 32-bit computer.

Для запуска 32-разрядной версии Windows PowerShell воспользуйтесь любой из следующих процедур.To start a 32-bit version of Windows PowerShell, use any of the following procedures.

Windows Server 2012 R2In Windows Server 2012 R2

  • На экране Пуск щелкните Windows PowerShell (x86) .On the Start screen, type Windows PowerShell (x86). Щелкните плитку Windows PowerShell x86.Click the Windows PowerShell x86 tile.
  • Выберите пункт Windows PowerShell (x86) в меню Сервис диспетчера сервера.In Server Manager, from the Tools menu, select Windows PowerShell (x86).
  • На рабочем столе переместите курсор в правый верхний угол, щелкните элемент Поиск, введите PowerShell x86 и выберите Windows PowerShell (x86) .On the desktop, move the cursor to the upper right corner, click Search, type PowerShell x86 and then click Windows PowerShell (x86).
  • В командной строке введите следующее: Via command line, enter:

Windows Server 2012In Windows Server 2012

  • На экране Пуск введите PowerShell и выберите Windows PowerShell (x86) .On the Start screen, type PowerShell and then click Windows PowerShell (x86).
  • Выберите пункт Windows PowerShell (x86) в меню Сервис диспетчера сервера.In Server Manager, from the Tools menu, select Windows PowerShell (x86).
  • На рабочем столе переместите курсор в правый верхний угол, щелкните элемент Поиск, введите PowerShell и выберите Windows PowerShell (x86) .On the desktop, move the cursor to the upper right corner, click Search, type PowerShell and then click Windows PowerShell (x86).
  • В командной строке введите следующее: Via command line, enter:

Windows 8.1In Windows 8.1

  • На экране Пуск щелкните Windows PowerShell (x86) .On the Start screen, type Windows PowerShell (x86). Щелкните плитку Windows PowerShell x86.Click the Windows PowerShell x86 tile.
  • Если вы используете средства удаленного администрирования сервера для Windows 8.1, можно также открыть Windows PowerShell x86 из меню Сервис диспетчера сервера.If you’re running Remote Server Administration Tools for Windows 8.1, you can also open Windows PowerShell x86 from the Server ManagerTools menu. Выберите Windows PowerShell (x86) .Select Windows PowerShell (x86).
  • На рабочем столе переместите курсор в правый верхний угол, щелкните элемент Поиск, введите PowerShell x86 и выберите Windows PowerShell (x86) .On the desktop, move the cursor to the upper right corner, click Search, type PowerShell x86 and then click Windows PowerShell (x86).
  • В командной строке введите следующее: Via command line, enter:

Windows 8In Windows 8

  • На экране Пуск переместите курсор в правый верхний угол, щелкните Параметры, Плитки, а затем переместите ползунок Показать средства администрирования в значение Да.On the Start screen, move the cursor to the upper right corner, click Settings, click Tiles, and then move the Show Administrative Tools slider to Yes. Введите PowerShell и выберите Windows PowerShell (x86) .Then, type PowerShell and click Windows PowerShell (x86).
  • Если вы используете средства удаленного администрирования сервера для Windows 8, можно также открыть Windows PowerShell x86 из меню Сервис диспетчера сервера.If you’re running Remote Server Administration Tools for Windows 8, you can also open Windows PowerShell x86 from the Server ManagerTools menu. Выберите Windows PowerShell (x86) .Select Windows PowerShell (x86).
  • На экране Пуск или рабочем столе введите PowerShell (x86) и выберите Windows PowerShell (x86) .On the Start screen or the desktop, type PowerShell (x86) and then click Windows PowerShell (x86).
  • В командной строке введите следующее: Via command line, enter:

Требования к Microsoft .NET FrameworkMicrosoft .NET Framework requirements

В следующей таблице приведены требования к .NET Framework для Windows PowerShell.The following table shows the .NET Framework requirements for Windows PowerShell.

ВерсияVersion Требование к .NET.NET requirement
Windows PowerShell 5.1Windows PowerShell 5.1 Требует полную установку Microsoft .NET Framework 4.5.Requires the full installation of Microsoft .NET Framework 4.5. Windows 8.1 и Windows Server 2012 R2 включают Microsoft .NET Framework 4.5 по умолчанию.Windows 8.1 and Windows Server 2012 R2 include Microsoft .NET Framework 4.5 by default.
Windows PowerShell 5.0Windows PowerShell 5.0 Требует полную установку Microsoft .NET Framework 4.5.Requires the full installation of Microsoft .NET Framework 4.5. Windows 8.1 и Windows Server 2012 R2 включают Microsoft .NET Framework 4.5 по умолчанию.Windows 8.1 and Windows Server 2012 R2 include Microsoft .NET Framework 4.5 by default.
Windows PowerShell 4.0Windows PowerShell 4.0 Требует полную установку Microsoft .NET Framework 4.5.Requires the full installation of Microsoft .NET Framework 4.5. Windows 8.1 и Windows Server 2012 R2 включают Microsoft .NET Framework 4.5 по умолчанию.Windows 8.1 and Windows Server 2012 R2 include Microsoft .NET Framework 4.5 by default.
Windows PowerShell 3.0Windows PowerShell 3.0 Требует полную установку Microsoft .NET Framework 4.Requires the full installation of Microsoft .NET Framework 4. Windows 8 и Windows Server 2012 содержат Microsoft .NET Framework 4.5 по умолчанию, что удовлетворяет этому требованию.Windows 8 and Windows Server 2012 include Microsoft .NET Framework 4.5 by default, which fulfills this requirement.

Используйте следующие ссылки, чтобы загрузить Microsoft .NET Framework из центра загрузки Майкрософт.Use the following links to download Microsoft .NET Framework from the Microsoft Download Center.

ВерсияVersion СсылкаLink
.NET Framework 4.5 ().NET Framework 4.5 () Microsoft .NET Framework 4.5Microsoft .NET Framework 4.5
.NET Framework 4 ().NET Framework 4 () Microsoft .NET Framework 4 (веб-установщик)Microsoft .NET Framework 4 (Web Installer)

Как разрешить запуск скриптов PowerShell с помощью Execution Policy?

Чтобы изменить текущее значение политики запуска PowerShell скриптов, используется командлет Set-ExecutionPolicy.

Например, разрешим запуск локальных скриптов:

Подтвердите изменение политики запуска PS1 скриптов, нажав Y или A.

Чтобы запрос не появлялся, можно использовать параметр Force.

Если вы установили значение политики PowerShell Execution Policy в Unrestricted, то при запуске удаленных скриптов из сетевых каталогов по UNC пути, скачанных из интернета файлов, все равно будет появляться предупреждение:

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the
Unblock-File cmdlet to allow the script to run without this warning message.
Do you want to run?
 Do not run  Run once  Suspend  Help (default is "D")

Как PowerShell различает локальные и удаленные скрипты? Все дело в идентификаторе зоны ZoneId, которую выставляет браузер в альтернативном потоке при загрузке файла (см. статью “Как Windows определяет, что файл скачан из Интернета?”). Вы можете разблокировать такой файл, поставив галку “Разблокирвать” в его свойствах или очиститься метку зоны с помощью комадлета  Unblock-File.

Также следует различать различные области действия политик выполнения скриптов PowerShell (scopes):

  • MachinePolicy – действует для всех пользователей компьютера, настраивается через GPO;
  • UserPolicy – действует на пользователей компьютера, также настраивается через GPO;
  • Process — настройки ExecutionPolicy действует только для текущего сеанса PowerShell.exe (сбрасываются при закрытии процесса);
  • CurrentUser – политика ExecutionPolicy применяется только к текущему пользователю (параметр из ветки реестра HKEY_CURRENT_USER);
  • LocalMachine – политика для всех пользователей компьютера (параметр из ветки реестра HKEY_LOCAL_MACHINE);

Область применения политики можно указать с помощью параметр Scope командлета Set-ExecutionPolicy. Например:

Проверим текущие настройки ExecutionPolicy для всех областей:

Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Bypass
CurrentUser Undefined
LocalMachine RemoteSigned

Значение политики выполнения, которые вы задаете с помощью командлета Set-ExecutionPolicy для областей CurrentUser и LocalMachine, хранятся в реестре. Например, выполните командлет:

Откройте ветку реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell и проверьте значение REG_SZ параметра ExecutionPolicy. Оно изменилось на Restricted (допустимые значения параметра Restricted, AllSigned, RemoteSigned, Bypass, Unrestricted и Undefined).

Аналогичные настройки для области CurrentUser находятся в разделе реестра пользователя HKEY_CURRENT_USER\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell.

Т.е. вы можете распространить нужные настройки политики исполнения скриптов через реестр с помощью Group Policy Preferences.

Отметим, что чаще всего в корпоративной среде используется ExecutionPolicy со значением AllSigned на уровне LocalMachine. Это обеспечивает максимальный баланс между безопасностью и удобством. Для личного пользования на компьютере можно использовать RemoteSigned. Ну а Bypass политику лучше использовать только для запуска отдельных задач (например для запуска скриптов через GPO или заданий планировщика).

Windows Service Control Manager

Службы управляются Windows Service Control Manager (SCM). SCM отвечает за конфигурирование служб, их запуск и остановку и т. д.

Панель управления SCM доступна через Control Panel | System and Security | Administrative Tools | Services. Как показано на рис. 1, она отображает список всех сконфигурированных служб с их названиями, описаниями, состоянием, типом запуска и именем пользователя.

Рис. 1. Windows Service Control Manager GUI в Windows 10

Для SCM также имеются интерфейсы командной строки.

  • Старая утилита net.exe с хорошо известными командами net start и net stop, корнями уходящая аж в MS-DOS! Несмотря на такое название, ее можно использовать для запуска и остановки любой службы, а не только сетевых служб. Введите net help, чтобы получить подробное описание.
  • Более мощная утилита, sc.exe, введенная в Windows NT, дает тонкий контроль над всеми аспектами управления службами. Введите sc /?, чтобы получить подробное описание.

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

Подвох Как net.exe, так и sc.exe используют «короткие» имена служб в одно слово, которые, к сожалению, не совпадают с более описательными названиями, отображаемыми в панели управления SCM. Чтобы получить соответствие между двумя именами, используйте команду get-service из Windows PowerShell.

Новые возможности редактораNew editor features

Другие возможности редактирования в интегрированной среде сценариев Windows PowerShell:Other Windows PowerShell ISE editing features include:

  • Цветовая разметка синтаксиса XML. Теперь в интегрированной среде сценариев Windows PowerShell синтаксис XML выделяется цветами, как в Windows PowerShell.XML syntax coloring — Windows PowerShell ISE now colors XML syntax in the same way as it colors Windows PowerShell syntax.
  • Парные фигурные скобки. В интегрированной среде сценариев Windows PowerShell реализованы контроль соответствия и подсветка скобок (например, команда Перейти к совпадению или клавиши CTRL+ позволяют найти закрывающую скобку, если выделена открывающая скобка).Brace matching — Windows PowerShell ISE includes brace matching and highlighting, and can be used in the following ways: (for example, using the Go to Match command or Ctrl+ locates the closing brace, if you have an opening brace selected).
  • Режим структуры. Область сценариев теперь поддерживает режим структуры, который позволяет сворачивать и разворачивать фрагменты кода, щелкая знаки «минус» или «плюс» на левом поле.Outline view The Script Pane supports outlining, which allows collapsing or expanding sections of code by clicking plus or minus signs in the left margin. Обозначить начало и конец сворачиваемого фрагмента кода можно с помощью скобок или тегов и .You can use braces or the and tags to mark the beginning or end of a collapsible section. Чтобы развернуть или свернуть все области, нажмите клавиши CTRL+M.To expand or collapse all regions, press Ctrl+M.
  • Перетаскивание текста при правке. Теперь интегрированная среда сценариев Windows PowerShell поддерживает перетаскивание текста при правке.Drag and drop text editing — Windows PowerShell ISE now supports drag and drop text editing. Можно выбрать любой блок текста и перетащить его в другое место в редакторе или консоли.You can select any block of text and drag that text to another location in the editor or the console to move the text. Если при перетаскивании удерживать нажатой клавишу CTRL, текст копируется в новое расположение.If you hold down the Ctrl key while you drag the selected text, when you release the mouse button the text is copied to the new location. В этой версии интегрированной среды сценариев Windows PowerShell при перетаскивании файла в интегрированную среду сценариев Windows PowerShell этот файл открывается.In this version of Windows PowerShell ISE, when you drag and drop files onto Windows PowerShell ISE, Windows PowerShell ISE opens the file.
  • Отображение ошибок анализа. Ошибки анализа подчеркиваются красным цветом.Parse error display — Parse errors are indicated with red underlines. При наведении указателя мыши на подчеркнутую ошибку отображается подсказка, поясняющая суть обнаруженной проблемы.When you hover over an indicated error, tooltip text displays the problem that was found in the code.
  • Масштаб. Устанавливать масштаб отображения содержимого консоли в процентах можно с помощью соответствующего ползунка (в правом нижнем углу окна интегрированной среды сценариев Windows PowerShell) или команды в области консоли.Zoom — The zoom percentage of the console’s content can be set by using the zoom slider (in the lower right corner of Windows PowerShell ISE window), or by entering the command in the Console Pane.
  • Копирование и вставка форматированного текста. Теперь при копировании в буфер обмена интегрированной среды сценариев Windows PowerShell сохраняется исходное начертание, размер и цвет шрифта выделенного текста.Rich text copy and paste — Copying to the clipboard in Windows PowerShell ISE preserves the font, size, and color information of the original selection.
  • Выделение блока. Можно выделить блок текста, удерживая клавишу ALT при выделении текста мышью в области сценариев или нажимая клавиши ALT+SHIFT+СТРЕЛКА.Block selection — You can select a block of text by holding down the ALT key while selecting text in the Script Pane with your mouse, or by pressing Alt+Shift+Arrow.

Какой эффект дает это изменение?What value does this change add?

Дополнительные возможности редактирования помогают получить более согласованную и эффективную среду редактирования.The additional editing features provide a more consistent and powerful editing environment.

Что работает иначе?What works differently?

Эти усовершенствования редактирования отсутствовали в интегрированной среде сценариев Windows PowerShell 2.0.These editing enhancements weren’t present in Windows PowerShell ISE 2.0.

Собираем все воедино

Возможности PSService.ps1 На основе всего того, что мы обсудили на данный момент, я могу создать ту службу Windows PowerShell, о которой я мечтал, — скрипт PSService.ps1, который:

  • может сам себя устанавливать и удалять (используя функции Windows PowerShell для управления службами);
  • может сам себя запускать и останавливать (используя тот же набор функций);
  • включает короткий фрагмент C#-кода, создающий PSService.exe для SCM (с помощью команды Add-Type);
  • делает обратный вызов из заглушки PSService.exe в скрипт PSService.ps1 для выполнения реальной операции службы (в ответ на события OnStart, OnStop и др.);
  • управляется из панели SCM и всех утилит командной строки (благодаря заглушке PSService.exe);
  • является отказоустойчивым и успешно обрабатывает любую команду, находясь в любом состоянии. Например, он может автоматически остановить службу перед ее удалением или ничего не делать, если ему поступит запрос запустить уже выполняемую службу;
  • поддерживает Windows 7 и все более поздние версии Windows (используя функциональность только Windows PowerShell v2).

Заметьте, что в этой статье я затронул лишь критически важные части проекта и реализации PSService.ps1. Скрипт-пример также содержит отладочный код и в какой-то мере поддерживает необязательную функциональность служб, но их описание здесь усложнило бы пояснения безо всякой необходимости.

Архитектура PSService.ps1 Скрипт организуется в серию разделов:

  • комментарий-заголовок, описывающий файл;
  • справочный блок в виде комментариев;
  • блок Param, определяющий ключи командной строки;
  • глобальные переменные;
  • вспомогательные процедуры: Now и Log;
  • блок исходного кода на C# для создания заглушки PSService.exe;
  • основную процедуру, обрабатывающую все ключи командной строки.

Основные командлеты PowerShell для управления службами Windows

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

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

  • Get-Service — позволяет получить службы на локальном или удаленном компьютере, как запущенные, так и остановленные;
  • New-Service – создать службу. Создает в реестре и базе данных служб новую запись для службы Windows;
  • Restart-Service – перезапустить службу. Передает сообщение об перезапуске службы через Windows Service Controller
  • Resume-Service – возобновить службы. Отсылает сообщение о возобновлении работы диспетчеру служб Windows;
  • Set-Service — изменить параметры локальной или удаленной службы, включая состояние, описание, отображаемое имя и режим запуска. Этот командлет также можно использовать для запуска, остановки или приостановки службы;
  • Start-Service – запустить службу;
  • Stop-Service – остановить службу (отсылает сообщение об остановке диспетчеру служб Windows);
  • Suspend-Service приостановить службу. Приостановленная служба по-прежнему выполняется, однако ее работа прекращается до возобновления работы службы, например с помощью командлета Resume-Service.

Получить подробное описание и примеры использования конкретного командлета можно через Get-help:

Get-Service: получаем список служб и их состояние

Получить список и состояние (Running/Stopped) службы на локальном или удаленном компьютере можно с помощью командлета Get-Service. Параметр -Name позволяет делать отбор по имени службы. Имя службы можно задать с использованием подстановочного символа *.

Если вы не знаете точное имя службы, есть возможность найти службы по отображаемому имени с помощью параметра –DisplayName. Можно использовать список значений и подстановочные знаки.

.

Командлет Get-Service можно использовать для получения состояния служб на удаленных компьютерах, указав параметр -ComputerName. Можно опросить статус службы сразу на множестве удаленных компьютеров, их имена нужно перечислить через запятую. Например, приведенная ниже команда получает состояние службы Spooler на удаленных компьютерах RM1 и RM2.

Status Name DisplayName
------ ---- -----------
Running spooler Print Spooler
Stopped spooler Print Spooler

Вывести все свойства службы позволит командлет Select-Object:

Командлет Select-Object позволит вывести определенные свойства службы. Например, нам нужно вывести имя, статус и доступные возможности службы Spooler:

Командлет Get-Service имеет два параметра, которые позволяют получить зависимости служб:

  • Параметр -DependentServices позволяет вывести службы, которые зависят от данной службы;
  • Параметр -RequiredServices позволяет вывести службы, от которых зависит данная служба.

Приведенная ниже команда выводит службы, необходимые для запуска службе Spooler:

Следующая команда выводит службы, которые зависят от службы Spooler:

При необходимости найти службы с определенным состоянием или параметрами, используйте командлет Where-Object. Например, получим список запущенных служб со статусом Running:

Для вывода служб с типом запуска Manual, выполните команду

Проверить, что в системе имеется указанная служба:

Кто обычно использует PowerShell?

Без всякого сомнения, PowerShell является выбором многих ИТ-администраторов. И не зря, ведь инструмент колоссально упрощает операции управления и снижает объем работы в крупных корпоративных сетях.

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

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

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

Запуск

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

  1. Пользователь (администратор) запускает первый экземпляр: PSService.ps1 –Start.
  2. Этот первый экземпляр сообщает SCM запустить службу: Start-Service $serviceName.
  3. SCM выполняет PSService.exe. Ее процедура Main создает объект службы, а затем вызывает его метод Run.
  4. SCM вызывает метод OnStart объекта службы.
  5. C#-метод OnStart запускает второй экземпляр скрипта: PSService.ps1 –Start.
  6. Этот второй экземпляр, теперь выполняемый в фоне как системный пользователь, запускает третий экземпляр, который останется в памяти как настоящая служба: PSService.ps1 –Service. Этот экземпляр и работает как служба.

В итоге будут выполняться две задачи: PSService.exe и экземпляр PowerShell.exe, выполняющий PSService.ps1 –Service.

За управление службами отвечает SCM.

Все это реализуется тремя частями кода в скрипте.

Определение ключа –Start в блоке Param в начале скрипта:

В процедуре Main в конце скрипта блок if обрабатывает ключ –Start:

Фрагмент исходного кода на C#, процедура Main и обработчик для OnStart, который выполняет команду PSService.ps1 –Start, как показано на рис. 4.

Рис. 4. Обработчик стартового кода

Программирование для Windows PowerShellProgramming for Windows PowerShell

Windows PowerShell определяет свой код для команд, поставщиков и других программных модулей с помощью .NET Framework.Windows PowerShell defines its code for commands, providers, and other program modules using the .NET Framework. Вы не ограничены использованием Microsoft Visual Studio при создании настроенных модулей для Windows PowerShell, хотя в этом средстве известно, что примеры, приведенные в этом разделе, будут выполняться в этом инструменте.You are not confined to the use of Microsoft Visual Studio in creating customized modules for Windows PowerShell, although the samples provided in this guide are known to run in this tool. Можно использовать любой язык .NET, который поддерживает наследование классов и использование атрибутов.You can use any .NET language that supports class inheritance and the use of attributes. В некоторых случаях API Windows PowerShell требует, чтобы язык программирования мог получить доступ к универсальным типам.In some cases, Windows PowerShell APIs require the programming language to be able to access generic types.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделитесь с друзьями:
Технарь
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.