Get Help Windows 10 — что это за программа и нужна ли она?

Приветствую. Windows регулярно обновляется — добавляются не только критические обновления для исправлений уязвимостей, но и новые функции, компоненты, приложения.
Некоторые приложения созданы для помощи пользователям, об одном таком — пойдет речь.
Get Help в Windows 10 — что это такое?
Приложение нужно для получения помощи от виртуального помощника. Который например способен подсказать как сбросить пароль к учетке Microsoft:

Можете написать помощнику открыть панель управления (open control panel) — помощник подскажет:

Запустить Get Help можно написав название в поиск возле пуска:

На официальном сайте Microsoft присутствует другое описание приложения, немного странное — Get Help отправляет сообщение на сервер Open-Dispatch. Сервер может отправить сообщение по электронной почте соединяться с IFTTT чтобы отправить информацию о вашем местоположении во все сети.
Get-Help в PowerShell
Также Get-Help является командой вызова справки консоли PowerShell. Можно посмотреть примеры использования и детальное описание параметров любой команды PowerShell.
Чтобы получить список всех команд, которые работают со службами, достаточно прописать:
PS C:\> Get-Help Service

По каждой можно получить справку — достаточно прописать ключ -Name, например:
PS C:\> Get-Help -Name Get-Service

Заключение
- Get Help — программа для получения справки от виртуального ассистента.
- Также команда в PowerShell (пишется через дефис) получения справки.
Глава 2. Справочная система
Двум группам ИТ-специалистов предложили выполнить письменный тест без доступа к компьютеру на определение уровня их квалификации с помощью PowerShell. Начинающие пользователи PowerShell были определены в одну группу, опытные пользователи — в другую. На основе полученных результатов теста уровень квалификации между двумя группами почти не отличался. Обе группы получили второй тест, подобный первому. На этот раз пользователям был предоставлен доступ к компьютеру с помощью PowerShell без доступа к Интернету. Результаты второго теста показали большое различие в уровне квалификации между двумя группами. Опытные пользователи не всегда знают ответы, но они знают, как их найти.
Чем отличались результаты первого и второго тестов между двумя группами?
Результаты тестов были разными потому, что опытные пользователи не запоминают, как использовать тысячи команд в PowerShell, а эффективно умеют пользоваться справочной системой PowerShell. Это позволяет им при необходимости находить нужные команды и использовать их.
Я слышал, как автор PowerShell Джеффри Сновер рассказывал подобную историю несколько раз.
Овладение справочной системой — важное условие для успешной работы с PowerShell.
Возможность обнаружения
Скомпилированные команды в PowerShell называются командлетами. В оригинале слово cmdlet произносится полностью: «командлет». Имена командлетов соответствуют форме отдельных команд «глагол — существительное», что позволяет легко их находить. Например, командлет Get-Process определяет выполняемые процессы, а командлет Get-Service получает список служб и их состояний. В PowerShell существуют другие типы команд, например псевдонимы и функции, которые будут рассмотрены далее в этом пособии. Команда PowerShell — это универсальное понятие, которое часто используется для ссылки на любой тип команды в PowerShell, независимо от того, является ли он командлетом, функцией или псевдонимом.
Три основных командлета в PowerShell
- Get-Command
- Get-Help
- Get-Member (рассматривается в главе 3)
Вопрос, который мне часто задают: как вы различаете команды в PowerShell? Для определения команд можно использовать командлеты Get-Command и Get-Help .
Get-Help
Get-Help — это многоцелевая команда. Get-Help помогает научиться использовать найденные команды. Get-Help также можно использовать для поиска команд, но, по сравнению с Get-Command , другим, менее прямым способом.
Если для поиска команд используется Get-Help , сначала выполняется поиск совпадений с подстановочными знаками имен команд на основе предоставленных входных данных. Если командлет не находит совпадение, выполняется поиск по самим разделам справки, и, если совпадений не найдено, ошибка возвращается. Вопреки распространенному мнению, Get-Help можно использовать для поиска команд, не содержащих разделов справки.
Первое, что нужно знать о справочной системе PowerShell, — как использовать командлет Get-Help . Следующая команда позволяет вывести раздел справки для Get-Help .
Get-Help -Name Get-Help
Do you want to run Update-Help? The Update-Help cmdlet downloads the most current Help files for Windows PowerShell modules, and installs them on your computer. For more information about the Update-Help cmdlet, see http://go.microsoft.com/fwlink/?LinkId=210614. [Y] Yes [N] No [S] Suspend [?] Help (default is "Y"):
Начиная с PowerShell версии 3, справка PowerShell не поставляется вместе с операционной системой. При первом запуске Get-Help для команды выводится предыдущее сообщение. Если вместо командлета Get-Help используется функция help или псевдоним man , этот запрос не появится.
При согласии нажатием клавиши Y запускается командлет Update-Help , который по умолчанию требует доступа к Интернету. Y можно указать в верхнем или нижнем регистре.
После загрузки справки и завершения обновления для указанной команды будет возвращен раздел справки.
Get-Help -Name Get-Help
Попробуйте выполнить этот пример на компьютере, просмотрите выходные данные и запишите, как группируются сведения.
- NAME
- Краткий обзор
- SYNTAX
- DESCRIPTION
- Связанные ссылки
- ПРИМЕЧАНИЯ
Как вы видите, разделы справки могут содержать большой объем информации, причем это даже не весь раздел справки.
Хотя это и не относится к PowerShell, параметр — это способ предоставления команде входных данных. Get-Help имеет много параметров, которые можно указать для возврата всего раздела справки или его подмножества.
В разделе синтаксиса раздела справки, который отображается в предыдущем наборе результатов, приводится список всех параметров Get-Help . На первый взгляд кажется, что одинаковые параметры приведены шесть раз по-разному. Каждый из этих блоков раздела синтаксиса представляет собой набор параметров. Это означает, что командлет Get-Help имеет шесть разных наборов параметров. Если посмотреть более внимательно, можно заметить, что в каждом наборе по крайней мере один параметр отличается.
Эти наборы параметров являются взаимоисключающими. После использования уникального параметра, который существует только в одном из наборов, можно использовать только те параметры, которые содержатся в этом наборе. Например, не удалось одновременно указать параметры Full и Detailed, так как они находятся в разных наборах.
Каждый из следующих параметров находится в разных наборах.
- Полное
- Подробно
- Примеры
- Справка в Интернете
- Параметр
- ShowWindow
Любые непонятные синтаксические конструкции в разделе синтаксиса, например квадратные и угловые скобки, имеют определенное значение и будут рассматриваться в приложении А к этому пособию. При всей важности непонятных синтаксических конструкций их обычно трудно запоминать тем, кто не работал с PowerShell и не использует их ежедневно.
Дополнительные сведения о том, как распознать непонятные синтаксические конструкции, см. в Приложение А.
Для начинающих пользователей существует простой способ вычислять аналогичную информацию, кроме обычного языка.
При указании параметра Full в значении Get-Help возвращается весь раздел справки.
Get-Help -Name Get-Help -Full
Попробуйте выполнить этот пример на компьютере, просмотрите выходные данные и запишите, как группируются сведения.
- NAME
- Краткий обзор
- SYNTAX
- DESCRIPTION
- PARAMETERS
- Входные данные
- Выходные данные
- ПРИМЕЧАНИЯ
- Примеры
- Связанные ссылки
Заметьте, что использование параметра Full привело к возврату нескольких дополнительных разделов, один из которых представляет собой раздел ПАРАМЕТРОВ, содержащий больше данных, чем раздел СИНТАКСИСА с непонятными конструкциями.
Параметр Full является параметром-переключателем, то есть тем, который не требует указывать значение. Если параметр-переключатель указывается, его значение будет верным, а если не указывается, значение будет неверным.
Работая над этой главой в консоли PowerShell, вы заметили, что предыдущая команда для вывода полного раздела справки для Get-Help показалась на экране очень быстро и ее нельзя было прочитать. Для этого существует более эффективный способ.
Help — это функция, передающая Get-Help функции с именем more , которая является оболочкой для исполняемого файла more.com в Windows. В консоли PowerShell командлет help открывает одну страницу справки за один раз. В интегрированной среде сценариев этот командлет работает так же, как Get-Help . Я рекомендую использовать функцию help вместо командлета Get-Help , так как она удобнее и меньше по длине.
При этом вводить меньше символов не всегда оказывается полезным. Сохраняя команды в виде сценария или отправляя их другим пользователям, обязательно используйте полные имена командлетов и параметров. Полные имена являются самодокументируемыми, поэтому их легче распознавать. Всегда помните о том, кому придется читать и распознавать ваши команды. Этим человеком можете оказаться вы. Ваши сотрудники и вы сами будете за это благодарны.
Попробуйте выполнить следующие команды в консоли PowerShell на компьютере с Windows 10 в лабораторной среде.
Get-Help -Name Get-Help -Full help -Name Get-Help -Full help Get-Help -Full
Появились ли различия в выходных данных приведенных выше команд после их запуска на компьютере с Windows 10 в лабораторной среде?
Кроме последних двух параметров, которые возвращают результаты по одной странице за один раз, эти выходные данные ничем не отличаются. ПРОБЕЛ используется для вывода следующей страницы содержимого с помощью функции Help , а Ctrl + C отменяет команды, выполняемые в консоли PowerShell.
В первом примере используется командлет Get-Help , во втором — функция Help , в третьем параметр Name исключается с помощью функции Help . Name является позиционным параметром и используется в этом примере позиционно. То есть это значение можно указать без имени параметра, если само это значение указано в правильном положении. Как узнать, в каком положении указывать значение? Свериться со справкой, как показано в следующем примере.
help Get-Help -Parameter Name
-Name Gets help about the specified command or concept. Enter the name of a cmdlet, function, provider, script, or workflow, such as Get-Member, a conceptual article name, such as about_Objects, or an alias, such as ls. Wildcard characters are permitted in cmdlet and provider names, but you can't use wildcard characters to find the names of function help and script help articles. To get help for a script that isn't located in a path that's listed in the $env:Path environment variable, type the script's path and file name. If you enter the exact name of a help article, Get-Help displays the article contents. If you enter a word or word pattern that appears in several help article titles, Get-Help displays a list of the matching titles. If you enter a word that doesn't match any help article titles, Get-Help displays a list of articles that include that word in their contents. The names of conceptual articles, such as about_Objects, must be entered in English, even in non-English versions of PowerShell. Required? false Position? 0 Default value None Accept pipeline input? True (ByPropertyName) Accept wildcard characters? true
Заметьте, что в предыдущем примере параметр Parameter использовался вместе с функцией справки только для того, чтобы вернуть данные из раздела справки для параметра Name. Так намного точнее, чем пытаться вручную проверять то, что напоминает раздел справки в сто страниц.
На основе полученных результатов вы увидите, что параметр Name является позиционным и его нужно указать в нулевом положении (первое положение), если он используется позиционно. Если указывается имя параметра, порядок указания параметров не имеет значения.
Еще одна важная деталь: в параметре Name значение типа данных должно быть указано одной строкой, которая обозначается . Если допускается несколько строк, тип данных будет приведен как
Может быть так, что вам не нужно выводить для команды весь раздел справки. Помимо параметра Full, существуют другие параметры, которые можно указать с помощью Get-Help или Help . Попробуйте выполнить следующие команды на компьютере с Windows 10 в лабораторной среде.
Get-Help -Name Get-Command -Full Get-Help -Name Get-Command -Detailed Get-Help -Name Get-Command -Examples Get-Help -Name Get-Command -Online Get-Help -Name Get-Command -Parameter Noun Get-Help -Name Get-Command -ShowWindow
Как правило, вместе с help я использую параметр Full или Online. Если мне нужно посмотреть только примеры, я использую параметр Examples, а если мне нужно получить только конкретный параметр, я использую параметр Parameter. Параметр ShowWindow открывает раздел справки в отдельном окне с возможностью поиска, которое можно открыть на другом мониторе, если их у вас несколько. Я стараюсь не использовать параметр ShowWindow, потому что он содержит всем известную ошибку, при которой не выводится весь раздел справки.
Если нужно открыть справку в отдельном окне, рекомендую использовать параметры Online или Full и передать результаты в Out-GridView , как показано в следующем примере.
help Get-Command -Full | Out-GridView
Для использования командлета Out-GridView и параметра ShowWindow командлета Get-Help требуется операционная система с графическим интерфейсом пользователя (GUI). Они выводят сообщение об ошибке при попытке использовать любой из них в Windows Server, который установлен с помощью варианта установки Server Core (без GUI).
Чтобы использовать Get-Help для поиска команд, используйте подстановочный знак звездочки ( * ) вместе с параметром Name. Укажите термин, в котором выполняется поиск команд, в качестве значения параметра Name, как показано в следующем примере.
help *process*
Name Category Module Synopsis ---- -------- ------ -------- Enter-PSHostProcess Cmdlet Microsoft.PowerShell.Core Connects to and . Exit-PSHostProcess Cmdlet Microsoft.PowerShell.Core Closes an intera. Get-PSHostProcessInfo Cmdlet Microsoft.PowerShell.Core Debug-Process Cmdlet Microsoft.PowerShell.M. Debugs one or mo. Get-Process Cmdlet Microsoft.PowerShell.M. Gets the process. Start-Process Cmdlet Microsoft.PowerShell.M. Starts one or mo. Stop-Process Cmdlet Microsoft.PowerShell.M. Stops one or mor. Wait-Process Cmdlet Microsoft.PowerShell.M. Waits for the pr. Get-AppvVirtualProcess Function AppvClient . Start-AppvVirtualProcess Function AppvClient .
В предыдущем примере подстановочные знаки * добавлять необязательно, без них результат будет одинаковым. Get-Help автоматически добавляет подстановочные знаки в фоновом режиме.
help process
Предыдущая команда выдает те же результаты, что и при указании подстановочного знака * при каждом завершении процесса.
Я предпочитаю добавлять подстановочные знаки, так как этот вариант всегда работает стабильно. В остальных случаях именно эти знаки, а не какие-либо другие необходимо использовать в определенных сценариях. Если добавить подстановочный знак в середину значения, он больше не будет к нему автоматически добавляться в фоновом режиме.
help pr*cess
Эта команда не возвращает результаты, если подстановочный знак * добавляется в начало, конец или в начало и конец командлета pr*cess .
Если указанное значение начинается с тире, создается ошибка, так как PowerShell интерпретирует его как имя параметра, а имени параметра для командлета Get-Help не существует.
help -process
При попытке найти команды, которые заканчиваются на -process , нужно в начало значения добавить только подстановочный знак * .
help *-process
При поиске команд PowerShell с помощью Get-Help нужно указывать менее точные параметры поиска.
При предыдущем поиске командлета process были найдены только те команды, которые содержали в имени process и возвращали только эти результаты. Если командлет Get-Help будет использоваться для поиска processes , он не найдет совпадений для имен команд, поэтому будет выполнять поиск каждого раздела справки в PowerShell в системе и возвращать все найденные совпадения. Это приведет к возврату большого количества результатов.
Get-Help processes
Name Category Module Synopsis ---- -------- ------ -------- Disconnect-PSSession Cmdlet Microsoft.PowerShell.Core Disconnects from. Enter-PSHostProcess Cmdlet Microsoft.PowerShell.Core Connects to and . ForEach-Object Cmdlet Microsoft.PowerShell.Core Performs an oper. Get-PSSessionConfiguration Cmdlet Microsoft.PowerShell.Core Gets the registe. New-PSTransportOption Cmdlet Microsoft.PowerShell.Core Creates an objec. Out-Host Cmdlet Microsoft.PowerShell.Core Sends output to . Where-Object Cmdlet Microsoft.PowerShell.Core Selects objects . Clear-Variable Cmdlet Microsoft.PowerShell.U. Deletes the valu. Compare-Object Cmdlet Microsoft.PowerShell.U. Compares two set. Convert-String Cmdlet Microsoft.PowerShell.U. Formats a string. ConvertFrom-Csv Cmdlet Microsoft.PowerShell.U. Converts object . ConvertTo-Html Cmdlet Microsoft.PowerShell.U. Converts Microso. ConvertTo-Xml Cmdlet Microsoft.PowerShell.U. Creates an XML-b. Debug-Runspace Cmdlet Microsoft.PowerShell.U. Starts an intera. Export-Csv Cmdlet Microsoft.PowerShell.U. Converts objects. Export-FormatData Cmdlet Microsoft.PowerShell.U. Saves formatting. Format-List Cmdlet Microsoft.PowerShell.U. Formats the outp. Format-Table Cmdlet Microsoft.PowerShell.U. Formats the outp. Get-Random Cmdlet Microsoft.PowerShell.U. Gets a random nu. Get-Unique Cmdlet Microsoft.PowerShell.U. Returns unique i. Group-Object Cmdlet Microsoft.PowerShell.U. Groups objects t. Import-Clixml Cmdlet Microsoft.PowerShell.U. Imports a CLIXML. Import-Csv Cmdlet Microsoft.PowerShell.U. Creates table-li. Measure-Object Cmdlet Microsoft.PowerShell.U. Calculates the n. Out-File Cmdlet Microsoft.PowerShell.U. Sends output to . Out-GridView Cmdlet Microsoft.PowerShell.U. Sends output to . Select-Object Cmdlet Microsoft.PowerShell.U. Selects objects . Set-Variable Cmdlet Microsoft.PowerShell.U. Sets the value o. Sort-Object Cmdlet Microsoft.PowerShell.U. Sorts objects by. Tee-Object Cmdlet Microsoft.PowerShell.U. Saves command ou. Trace-Command Cmdlet Microsoft.PowerShell.U. Configures and s. Write-Output Cmdlet Microsoft.PowerShell.U. Sends the specif. Debug-Process Cmdlet Microsoft.PowerShell.M. Debugs one or mo. Get-Process Cmdlet Microsoft.PowerShell.M. Gets the process. Get-WmiObject Cmdlet Microsoft.PowerShell.M. Gets instances o. Start-Process Cmdlet Microsoft.PowerShell.M. Starts one or mo. Stop-Process Cmdlet Microsoft.PowerShell.M. Stops one or mor. Wait-Process Cmdlet Microsoft.PowerShell.M. Waits for the pr. Get-Counter Cmdlet Microsoft.PowerShell.D. Gets performance. Invoke-WSManAction Cmdlet Microsoft.WSMan.Manage. Invokes an actio. Remove-WSManInstance Cmdlet Microsoft.WSMan.Manage. Deletes a manage. Get-WSManInstance Cmdlet Microsoft.WSMan.Manage. Displays managem. New-WSManInstance Cmdlet Microsoft.WSMan.Manage. Creates a new in. Set-WSManInstance Cmdlet Microsoft.WSMan.Manage. Modifies the man. about_Arithmetic_Operators HelpFile Describes the op. about_Arrays HelpFile Describes arrays. about_Debuggers HelpFile Describes the Wi. about_Execution_Policies HelpFile Describes the Wi. about_ForEach-Parallel HelpFile Describes the Fo. about_Foreach HelpFile Describes a lang. about_Functions HelpFile Describes how to. about_Language_Keywords HelpFile Describes the ke. about_Methods HelpFile Describes how to. about_Objects HelpFile Provides essenti. about_Parallel HelpFile Describes the Pa. about_Pipelines HelpFile Combining comman. about_Preference_Variables HelpFile Variables that c. about_Remote HelpFile Describes how to. about_Remote_Output HelpFile Describes how to. about_Sequence HelpFile Describes the Se. about_Session_Configuration_Files HelpFile Describes sessio. about_Variables HelpFile Describes how va. about_Windows_PowerShell_5.0 HelpFile Describes new fe. about_WQL HelpFile Describes WMI Qu. about_WS-Management_Cmdlets HelpFile Provides an over. about_ForEach-Parallel HelpFile Describes the Fo. about_Parallel HelpFile Describes the Pa. about_Sequence HelpFile Describes the Se.
С помощью Help для поиска process вернулось 10 результатов, а для поиска processes — 68. Если найден только один результат, вместо списка команд будет отображаться раздел справки.
get-help *hotfix*
NAME Get-HotFix SYNOPSIS Gets the hotfixes that have been applied to the local and remote computers. SYNTAX Get-HotFix [-ComputerName ] [-Credential ] [-Description ] [] Get-HotFix [[-Id] ] [-ComputerName ] [-Credential ] [] DESCRIPTION The Get-Hotfix cmdlet gets hotfixes (also called updates) that have been installed on either the local computer (or on specified remote computers) by Windows Update, Microsoft Update, or Windows Server Update Services; the cmdlet also gets hotfixes or updates that have been installed manually by users. RELATED LINKS Online Version: http://go.microsoft.com/fwlink/?LinkId=821586 Win32_QuickFixEngineering http://go.microsoft.com/fwlink/?LinkID=145071 Get-ComputerRestorePoint Add-Content REMARKS To see the examples, type: "get-help Get-HotFix -examples". For more information, type: "get-help Get-HotFix -detailed". For technical information, type: "get-help Get-HotFix -full". For online help, type: "get-help Get-HotFix -online"
Теперь давайте развеем миф о том, что Help в PowerShell может находить только команды, содержащие разделы справки.
help *more*
NAME more SYNTAX more [[-paths] ] ALIASES None REMARKS None
Заметьте, в предыдущем примере more не содержит раздела справки, но системе Help в PowerShell удалось ее найти. Система нашла только одно совпадение и вернула основные сведения о синтаксисе, которые будут отображаться, если команда не содержит раздела справки.
PowerShell содержит множество концептуальных разделов справки («О программе»). Следующая команда используется для возврата списка всех разделов О программе в системе.
help About_*
При ограничении результатов одним из разделов справки «О программе» вместо возврата списка отображается действительный раздел.
help about_Updatable_Help
Для отображения разделов справки О программе справочную систему в PowerShell необходимо обновлять. Если по какой-либо причине не удалось выполнить первоначальное обновление системы справки на компьютере, эти файлы будут недоступны, пока командлет Update-Help не будет успешно выполнен.
Get-Command
Get-Command облегчает поиск команд. Выполнение Get-Command без указания параметров возвращает список всех команд в системе. В приведенном ниже примере показано использование командлета Get-Command , который определяет команды, работающие с процессами.
Get-Command -Noun Process
CommandType Name Version Source ----------- ---- ------- ------ Cmdlet Debug-Process 3.1.0.0 Microsof. Cmdlet Get-Process 3.1.0.0 Microsof. Cmdlet Start-Process 3.1.0.0 Microsof. Cmdlet Stop-Process 3.1.0.0 Microsof. Cmdlet Wait-Process 3.1.0.0 Microsof.
Заметьте: в предыдущем примере, где выполнялся командлет Get-Command , используется параметр Noun, а командлет Process указан в качестве значения для параметра Noun. Что делать, если вы не знаете, как использовать командлет Get-Command ? Get-Help можно использовать для вывода раздела справки для Get-Command .
Параметры Name, Noun и Verb поддерживают добавление подстановочных знаков. В приведенном ниже примере показаны подстановочные знаки, используемые с параметром Name.
Get-Command -Name *service*
CommandType Name Version Source ----------- ---- ------- ------ Function Get-NetFirewallServiceFilter 2.0.0.0 NetSecurity Function Set-NetFirewallServiceFilter 2.0.0.0 NetSecurity Cmdlet Get-Service 3.1.0.0 Microsof. Cmdlet New-Service 3.1.0.0 Microsof. Cmdlet New-WebServiceProxy 3.1.0.0 Microsof. Cmdlet Restart-Service 3.1.0.0 Microsof. Cmdlet Resume-Service 3.1.0.0 Microsof. Cmdlet Set-Service 3.1.0.0 Microsof. Cmdlet Start-Service 3.1.0.0 Microsof. Cmdlet Stop-Service 3.1.0.0 Microsof. Cmdlet Suspend-Service 3.1.0.0 Microsof. Application AgentService.exe 10.0.14. C:\Windo. Application SensorDataService.exe 10.0.14. C:\Windo. Application services.exe 10.0.14. C:\Windo. Application services.msc 0.0.0.0 C:\Windo. Application TieringEngineService.exe 10.0.14. C:\Windo.
Я стараюсь не использовать подстановочные знаки с параметром Name для Get-Command , так как он возвращает и исполняемые файлы, которые не являются собственными командами PowerShell.
При использовании подстановочных знаков с параметром Name рекомендую ограничить результаты с помощью параметра CommandType.
Get-Command -Name *service* -CommandType Cmdlet, Function, Alias
Оптимально использовать параметр Verb или Noun либо оба этих параметра, так как только команды PowerShell состоят из глаголов и существительных.
Что делать, есть в разделе справки найдены ошибки? Можете не волноваться: материалы разделов справки в PowerShell открыты и доступны в репозитории PowerShell-Docs на сайте GitHub. Исправив неверную информацию, вы поможете не только себе, но и другим пользователям. Для этого разместите репозиторий документации PowerShell на сайте GitHub, обновите раздел справки и отправьте запрос на включение внесенных изменений. После того как этот запрос будет принят, исправленный документ появится в общем доступе.
Обновление справки
Локальная копия разделов справки PowerShell была ранее впервые обновлена с помощью запрошенной команды. Рекомендуется периодически обновлять справочную систему, так как содержимое справки может обновляться. Для обновления разделов справки используется командлет Update-Help . Для этого требуется доступ к Интернету по умолчанию, а вам необходимо запустить PowerShell с повышенными правами администратора.
Update-Help
Update-Help : Failed to update Help for the module(s) 'BitsTransfer' with UI culture(s) : Unable to retrieve the HelpInfo XML file for UI culture en-US. Make sure the HelpInfoUri property in the module manifest is valid or check your network connection and then try the command again. At line:1 char:1 + Update-Help + + CategoryInfo : InvalidOperation: (:) [Update-Help], Exception + FullyQualifiedErrorId : InvalidHelpInfoUri,Microsoft.PowerShell.Commands.UpdateHel pCommand Update-Help : Failed to update Help for the module(s) 'NetworkControllerDiagnostics, StorageReplica' with UI culture(s) : Unable to retrieve the HelpInfo XML file for UI culture en-US. Make sure the HelpInfoUri property in the module manifest is valid or check your network connection and then try the command again. At line:1 char:1 + Update-Help + + CategoryInfo : ResourceUnavailable: (:) [Update-Help], Exception + FullyQualifiedErrorId : UnableToRetrieveHelpInfoXml,Microsoft.PowerShell.Commands. UpdateHelpCommand
Два модуля вернули распространенные ошибки. Если на компьютере отсутствует доступ к Интернету, можно использовать командлет Save-Help на другом компьютере с доступом к Интернету, чтобы сначала сохранить обновленную справочную информацию в общей папке, а затем использовать параметр SourcePath для Update-Help , чтобы указать это сетевое расположение для разделов справки.
Для периодического обновления содержимого справки на компьютере настройте запланированную задачу или добавление логики в скрипт профилирования в PowerShell. Сценарии профилирования будут рассматриваться в следующей главе.
Сводка
В этой главе вы узнали, как найти команды с помощью командлетов Get-Help и Get-Command . Кроме того, вы научились пользоваться справочной системой, которая позволяет использовать найденные команды. Мы также рассмотрели, как обновлять содержимое разделов справки при доступных обновлениях.
Мне нужно, чтобы вы изучали по одной команде PowerShell в день.
Get-Command | Get-Random | Get-Help -Full
Просмотр
- Является ли параметр DisplayName Get-Service позиционным?
- Сколько наборов параметров содержится в командлете Get-Process ?
- Какие команды PowerShell используются для работы с журналами событий?
- Какая команда PowerShell возвращает список процессов PowerShell, запущенных на компьютере?
- Как обновить содержимое справки PowerShell, сохраненное на компьютере?
Рекомендуем прочесть
Если вы хотите более подробно изучить темы, описанные в этой главе, рекомендую ознакомиться со следующими разделами справки по PowerShell.
В следующей главе вы узнаете о командлете Get-Member , а также об объектах, свойствах и методах.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Что такое Windows PowerShell и с чем его едят? Часть 1: основные возможности
Windows PowerShell позволяет системным администраторам автоматизировать большинство рутинных задач. С ее помощью можно менять настройки, останавливать и запускать сервисы, а также производить обслуживание большинства установленных приложений. Воспринимать синее окошко как еще один интерпретатор команд было бы неправильно. Такой подход не отражает сути предложенных корпорацией Microsoft инноваций. На самом деле возможности Windows PowerShell гораздо шире: в небольшом цикле статей мы попробуем разобраться, чем решение Microsoft отличается от более привычных нам средств.
Основные возможности
Разумеется Windows PowerShell — это в первую очередь командная оболочка с языком сценариев, изначально созданная на основе платформы .NET Framework, а позднее — на .NET Core. В отличие от принимающих и возвращающих текстовые данные оболочек, Windows PowerShell работает с классами .NET, у которых есть свойства и методы. PowerShell позволяет выполнять обычные команды, а также дает доступ к объектам COM, WMI и ADSI. В ней используются различные хранилища, вроде файловой системы или реестра Windows, для доступа к которым созданы т.н. поставщики (providers). Стоит отметить возможность встраивания исполняемых компонентов PowerShell в другие приложения для реализации различных операций, в т.ч. через графический интерфейс. Верно и обратное: многие приложения для Windows предоставляют доступ к своим интерфейсам управления через PowerShell.
Windows PowerShell позволяет:
- Менять настройки операционной системы;
- Управлять службами и процессами;
- Настраивать роли и компоненты сервера;
- Устанавливать программное обеспечение;
- Управлять установленным ПО через специальные интерфейсы;
- Встраивать исполняемые компоненты в сторонние программы;
- Создавать сценарии для автоматизации задач администрирования;
- Работать с файловой системой, реестром Windows, хранилищем сертификатов и т.д.
Оболочка и среда разработки
Существует Windows PowerShell в двух ипостасях: помимо эмулятора консоли с командной оболочкой есть интегрированная среда сценариев (Integrated Scripting Environment — ISE). Чтобы получить доступ к интерфейсу командной строки достаточно выбрать соответствующий ярлык в меню Windows или запустить powershell.exe из меню «Выполнить». На экране появится синее окошко, заметно отличающееся по возможностям от допотопного cmd.exe. Там есть автодополнение и другие фишки, привычные пользователям командных оболочек для Unix-систем.

Для работы с оболочкой нужно запомнить некоторые сочетания клавиш:
- Стрелки вверх и вниз прокручивают историю для повтора ранее набранных команд;
- Стрелка вправо в конце строки перенабирает предыдущую команду посимвольно;
- Ctrl+Home удаляет набранный текст от позиции курсора до начала строки;
- Ctrl+End удаляет текст от курсора до конца строки.

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

Командлеты
В Windows PowerShell появились т.н. командлеты (cmdlets). Это специализированные классы .NET, в которые заложена разнообразная функциональность. Именуются они по принципу «Действие-Объект» (или «Глагол-Существительное, если вам так больше нравится), а разделенная дефисом связка напоминает сказуемое и подлежащее в предложениях естественных языков. Например, Get-Help буквально означает «Получить-Помощь» или в контексте PowerShell: «Показать-Справку». По сути это аналог команды man в Unix-системах и мануалы в PowerShell нужно запрашивать именно так, а не вызывая командлеты с ключом —help или /. Не стоит забывать и об онлайн-документации по PowerShell: у Microsoft она достаточно подробная.
Помимо Get в командлетах для обозначения действий используются и другие глаголы (и не только глаголы, строго говоря). В списке ниже мы приведем несколько примеров:
Add — добавить;
Clear — очистить;
Enable — включить;
Disable — выключить;
New — создать;
Remove — удалить;
Set — задать;
Start — запустить;
Stop — остановить;
Export — экспортировать;
Import — импортировать.
Есть системные, пользовательские и опциональные командлеты: в результате выполнения все они возвращают объект или массив объектов. К регистру они не чувствительны, т.е. с точки зрения интерпретатора команд нет разницы между Get-Help и get-help. Для разделения используется символ ‘;’, но ставить его обязательно только если в одной строке выполняется несколько командлетов.
Командлеты Windows PowerShell группируются в модули (NetTCPIP, Hyper-V и т.д.), а для поиска по объекту и действию существует командлет Get-Command. Показать справку по нему можно так:
Get-Help Get-Command

По умолчанию команда отображает краткую справку, но в командлеты при необходимости передаются параметры (аргументы). С их помощью можно, например, получить детальную (параметр -Detailed) или полную (параметр -Full) справку, а также вывести на экран примеры (параметр -Examples):
Get-Help Get-Command -Examples
Справка в Windows PowerShell обновляется командлетом Update-Help. Если строка команд получается слишком длинной, аргументы командлета можно перенести на следующую, написав служебный символ ‘`’ и нажав Enter — просто закончить писать команду на одной строке и продолжить на другой не получится.
Ниже приведем несколько примеров распространенных командлетов:
Get-Process — показать запущенные в системе процессы;
Get-Service — показать службы и их статус;
Get-Content — вывести содержимое файла.
Для часто используемых командлетов и внешних утилит в Windows PowerShell есть короткие синонимы — алиасы (от англ. Alias). Например, dir — алиас Get-ChildItem. Есть в списке синонимов и аналоги команд из Unix-систем (ls, ps и т.д.), а командлет Get-Help вызывается командой help. Полный список синонимов можно посмотреть с помощью командлета Get-Alias:

Сценарии, функции, модули и язык PowerShell
Скрипты Windows PowerShell хранятся в виде обычных текстовых файлов с расширением .ps1. Запустить их двойным кликом нельзя: нужно правой кнопкой мыши вызвать контекстное меню и выбрать пункт «Запустить в PowerShell». Из консоли придется либо указать полный путь к скрипту, либо перейти в соответствующий каталог и написать имя файла. Запуск сценариев также ограничен системной политикой, а для проверки текущих настроек можно использовать командлет Get-ExecutionPolicy, который выдаст одно из следующих значений:
Restricted — запуск сценариев запрещен (по умолчанию);
AllSigned — разрешен только запуск подписанных доверенным разработчиком сценариев;
RemoteSigned — разрешен запуск подписанных и собственных сценариев;
Unrestricted — разрешен запуск любых сценариев.
У администратора есть два варианта действий. Наиболее безопасный предполагает подписание скриптов, но это довольно серьезное колдунство — мы будем разбираться с ним в следующих статьях. Сейчас пойдем по пути наименьшего сопротивления и поменяем политику:
Set-ExecutionPolicy RemoteSigned

PowerShell для этого придется запустить от имени администратора, хотя с помощью специального параметра можно изменить политику и для текущего пользователя.
Пишутся скрипты на объектно-ориентированном языке программирования, команды которого именуются по тому же принципу, что и рассмотренные ранее командлеты: «Действие-Объект» («Глагол-Существительное»). Основное его предназначение — автоматизация задач администрирования, но это полноценный интерпретируемый язык, в котором есть все необходимые конструкции: условный переход, циклы, переменные, массивы, объекты, обработка ошибок и т.д. Для написания сценариев годится любой текстовый редактор, но удобнее всего запустить Windows PowerShell ISE.
В скрипт можно передавать параметры, делать их обязательными, а также задавать значения по умолчанию. Кроме того Windows PowerShell позволяет создать функции и вызывать их точно так же, как и командлеты: для этого используется конструкция Function и фигурные скобки. Сценарий с функциями называется модулем и имеет расширение .psm1. Модули должны храниться в каталогах, определенных в переменных окружения PowerShell. Посмотреть их можно при помощи следующей команды:
Get-ChildItem Env:\PSModulePath | Format-Table -AutoSize
Конвейеры
В последнем примере мы применили знакомую пользователям оболочек для Unix-систем конструкцию. В Windows PowerShell вертикальная черта также позволяет передать выход одной команды на вход другой, но в реализации конвейера есть и существенная разница: речь здесь идет уже не о наборе символов или каком-то тексте. Встроенные командлеты или пользовательские функции возвращают объекты или массивы объектов, а также могут получать их на входе. Как в Bourne shell и его многочисленных последователях, в PowerShell с помощью конвейера упрощается выполнение сложных задач.
Простейший пример конвейера выглядит так:
Get-Service | Sort-Object -property Status

Сначала выполняется командлет Get-Service, а потом все полученные им службы передаются на сортировку по свойству Status командлету Sort-Object. В какой именно аргумент передается результат работы предыдущего участка конвейера, зависит от его типа — обычно это InputObject. Подробнее этот вопрос будет рассматриваться в посвященной языку программирования PowerShell статье.
При желании цепочку можно продолжить и передать результат работы Sort-Object еще одному командлету (выполняться они будут слева направо). Кстати, пользователям Windows доступна и привычная всем юниксоидам конструкция для постраничного вывода:
Get-Service | Sort-Object -property Status | more
Запуск задач в фоновом режиме
Довольно часто бывает нужно запустить некую команду в фоне, чтобы не дожидаться результата ее выполнения в сессии оболочки. В Windows PowerShell есть несколько командлетов на такой случай:
Start-Job — запуск фоновой задачи;
Stop-Job — остановка фоновой задачи;
Get-Job — просмотр списка фоновых задач;
Receive-Job — просмотр результата выполнения фоновой задачи;
Remove-Job — удаление фоновой задачи;
Wait-Job — перевод фоновой задачи обратно в консоль.
Для запуска фоновой задачи мы используем командлет Start-Job и в фигурных скобках указываем команду или набор команд:
Start-Job

Фоновыми задачами в Windows PowerShell можно манипулировать, зная их имена. Для начала научимся их отображать:
Get-Job

Теперь покажем результат работы задания Job1:
Receive-Job Job1 | more

Всё довольно просто.
Удаленное выполнение команд
Windows PowerShell позволяет выполнять команды и сценарии не только на локальном, но и на удаленном компьютере и даже на целой группе машин. Для этого существует несколько способов:
- У многих командлетов есть параметр -ComputerName , но таким способом не получится, например, создать конвейер;
- Командлет Enter-PSSession позволяет создать на удаленной машине интерактивный сеанс;
- С помощью командлета Invoke-Command можно выполнять команды или сценарии на одном или нескольких удаленных компьютерах.
Версии PowerShell
С момента первого релиза в 2006 году PowerShell серьезно изменился. Инструмент доступен для множества систем, работающих на разных аппаратных платформах (x86, x86-64, Itanium, ARM): Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008/2008 R2, Windows 7, Windows 8, Windows 8.1, Windows RT, Windows RT 8.1, Windows Server 2012/2012 R2, Windows 10, Windows Server 2016, GNU/Linux и OS X. Последний релиз 6.2 выпущен 10 января 2018 года. Написанные для более ранних версий скрипты с высокой вероятностью будут работать в более поздних, а вот с обратным переносом могут возникнуть проблемы, поскольку за годы развития в PowerShell появилось большое количество новых командлетов. Узнать версию установленной на компьютере командной оболочки можно с помощью свойства PSVersion встроенной переменной $PSVersionTable:
$PSVersionTable.PSVersion

Также можно воспользоваться командлетом:
Get-Variable -Name PSVersionTable –ValueOnly

То же самое делается и с помощью командлета Get-Host. На самом деле вариантов множество, но для их применения нужно изучить язык программирования PowerShell, чем мы и займемся в следующей статье.
Итоги
Корпорации Microsoft удалось создать действительно мощную командную оболочку с удобной интегрированной средой для разработки скриптов. От привычных нам по миру Unix средств ее отличает глубокая интеграция с операционными системами семейства Windows, а также с программным обеспечением для них и платформой .NET Core. PowerShell можно назвать объектно ориентированной оболочкой, потому что командлеты и пользовательские функции возвращают объекты или массивы объектов и могут получать их на входе. Думаем, этим инструментом должны владеть все администраторы серверов на Windows: прошло время, когда они могли обойтись без командной строки. Продвинутая консольная оболочка особенно необходима на наших недорогих VPS, работающих под управлением Windows Server Core, но это уже совсем другая история.
Основы Windows PowerShell
Рассказали, о технологии Windows PowerShell и как начать с ней работать.

Рассказываем про Windows PowerShell — технологию для автоматизации рутинных задач, пришедшую на смену bat-файлам.
Работа с консолью Microsoft Windows
Ранее мы рассматривали командные интерпретаторы COMMAND.CMD и CMD.EXE, обеспечивающие автоматизацию задач в семействе операционных систем Microsoft Windows. Фактически данные интерпретаторы не получали обновлений с начала 2000-х годов и существуют в современных операционных системах для обеспечения совместимости.
Хотя современные операционные системы предлагают богатый на функции графический интерфейс, ряд однотипных задач быстрее решается через консоль. Более того, серверные редакции ОС не предоставляют графический интерфейс по умолчанию, поэтому интерпретатор командной строки является неотъемлемой частью практически любой операционной системы.
Помимо отсутствия обновлений, CMD.EXE имеет ограниченный функционал. Он не позволяет писать сложную логику и полностью отказаться от использования графического интерфейса. Корпорация Microsoft пыталась решить эти проблемы с помощью инструмента под названием Microsoft Script Host, который имел интеграцию со скриптовыми языками JScript и VBScript.
Однако Microsoft Script Host имел ряд собственных проблем:
- плохо интегрировался с командной оболочкой операционной системы,
- сопровождался скудной документацией,
- разные версии Windows имели командные интерпретаторы с разным набором команд,
- инструмент становился отличным вектором для атак.
Все это побуждало Microsoft сделать командный интерпретатор с нуля.
Новый командный интерпретатор Windows PowerShell
В 2003 году корпорация Microsoft начала разработку нового инструмента — Microsoft Shell (MSH), или Monad. Спустя три года и три бета-версии Monad была официально выпущена под новым названием Windows PowerShell 1.0 на Windows XP и Windows Vista. По ходу развития командная оболочка меняла свои названия на PowerShell Core и PowerShell.
При создании PowerShell разработчики задались целью создать инструмент, который позволил бы с легкостью использовать множество разнородных интерфейсов, предоставляемых операционной системой. Новый инструмент должен быть консистентным и легким для администратора, несмотря на количество технологий «под капотом». Например, PowerShell предоставляет доступ к API .NET-фреймворка, но не требует от администратора знания .NET.
Как и любой командный интерпретатор, PowerShell умеет запускать исполняемые файлы и имеет встроенные команды. Однако у PowerShell встроенные команды имеют название «командлет», появившееся от английского cmdlet.
Что такое командлет?
В основе взаимодействия с PowerShell лежат объекты, а не текст, как у CMD.EXE и командных интерпретаторов в *nix-системах. Такой подход меняет взгляд на организацию встроенных команд.
Командлет — это встроенная команда в PowerShell, выполняющая одну задачу и реализованная на .NET. Имя командлета соответствует правилу Глагол-Существительное, которое можно читать как Действие-Объект.
Самый важный командлет, о котором необходимо узнать в первую очередь, — Get-Help. Он отображает справочную информацию о PowerShell и командлетах.
# Получить общую справку по PowerShell Get-Help # Получить справку по командлету Get-Content Get-Help Get-Content # Получить справку по командлету Get-Help Get-Help Get-Help
Если вам кажется, что использовать большие буквы в названии командлетов — это перебор, для вас есть хорошие новости. Все команды в PowerShell являются регистронезависимыми. Иными словами, перечисленные ниже написания эквивалентны:
Get-Help Get-Help get-help get-help GET-HELP GET-HELP GeT-hElP gEt-HeLp
Хотя Windows PowerShell нечувствительна к регистру в именах и параметрах, внешние программы, которые вызываются через оболочку, могут не обладать такими возможностями.
В первой версии PowerShell все командлеты были реализованы на .NET, но начиная с версии 2.0 появилась возможность писать командлеты с использованием синтаксиса PowerShell.
Основы программы PowerShell
Перейдем к практике. PowerShell является кроссплатформенным инструментом и может быть запущена на Linux и macOS, но в данной статье будет рассматриваться только «родное» окружение — Windows.
Как запустить?

Запуск PowerShell можно произвести из меню поиска около кнопки Пуск, набрав powershell.

Аналогично можно запустить PowerShell через диалоговое окно Выполнить…, которое открывается через сочетание клавиш Windows + R.
Если по каким-то причинам у вас не установлен PowerShell, то необходимо сделать это, следуя инструкции в базе знаний Microsoft.

В случае успеха откроется синее окно. Windows PowerShell готов к вашим командам.
Синтаксис
Синтаксис PowerShell похож на синтаксис других командных интерпретаторов. Сначала команда, а затем аргументы команды. Несколько команд в одной строке разделяются точкой с запятой. Рассмотрим на примере.
Get-Help Get-Command -Online
Данная команда откроет в браузере вкладку с описанием командлета Get-Command в базе знаний Microsoft. Разберем подробнее:
- Get-Help – команда, в данном случае командлет,
- Get-Command – первый позиционный аргумент, который передается командлету,
- -Online – ключ, то есть именованный аргумент.
Обратите внимание, что в CMD.EXE именованные аргументы, то есть ключи, для встроенных команд начинались с символа слэш (/). У командлетов аргументы начинаются со знака минус. Использование знака / в PowerShell недопустимо и будет интерпретировано как ошибка.
Хотя PowerShell во многом похож на CMD.EXE, он имеет несколько существенных отличий. Во-первых, обращение к переменным производится через символ доллар, а не через знак процента. Во-вторых, PowerShell позволяет определять функции. Например:
function Get-Version
Данный код объявит функцию Get-Version, которая обращается к системной переменной (объекту) PSVersionTable и возвращает значение поля PSVersion. Проще говоря, выводит версию PowerShell.
Именование командлетов может быть неочевидным для администраторов с опытом работы с другими командными интерпретаторами. Поэтому рассмотрим основные команды Windows PowerShell.
Основные команды языка Windows PowerShell
В следующей таблице перечислены основные команды PowerShell и их аналоги в *nix-подобных системах и CMD.EXE. В версии PowerShell 7 количество командлетов превышает полторы тысячи!
| Командлет (псевдоним) | Команда в *nix | Команда в CMD.exe | Описание |
| Get-Location (pwd) | pwd | Выводит путь до текущего каталога | |
| Set-Location (cd) | cd | cd | Меняет текущий каталог |
| Get-ChildItem (ls) | ls | dir | Выводит содержимое текущего каталога |
| Get-ChildItem | find | find | Производит поиск файлов по заданным критериям |
| Copy-Item (cp) | cp | cp | Копирует файл |
| Remove-Item (rm) | rm | rm | Удаляет файл |
| New-Item (mkdir) | mkdir | mkdir | Создает каталог |
| New-Item | touch | Создает пустой файл | |
| Get-Content (cat) | cat | Выводит файлы | |
| Get-Content | tail | Выводит последние 10 строк | |
| Where-Object | grep | Производит фильтрацию | |
| Create-Volume Format-Volume |
mkfs | Форматирует раздел | |
| Test-Connection | ping | ping.exe | Отправляет ICMP-запросы, «пингует» |
| Get-Help (man) | man | help | Показывает справку |
После работы в консоли *nix командлет для популярного действия, смены каталога, выглядит громоздко и непривычно. К счастью, командлеты имеют псевдонимы (алиасы), которые могут не следовать правилу именования командлетов. Список известных псевдонимов можно получить с помощью командлета Get-Alias.
Хотя таблица, представленная выше, значительно облегчит назначение командлетов, не стоит ожидать от командлетов поведения как в *nix-системах. Так, например, в PowerShell командлет Get-Content создан для вывода содержимого одного файла на экран, в то время как на *nix-системах утилита cat изначально использовалась для конкатенации (процесса соединения) нескольких файлов с последующим выводом на экран.
Очевидно, что возможности PowerShell значительно больше, чем CMD.exe. Опытный администратор знает, что некоторые задачи из таблицы можно решить в CMD.exe, несмотря на отсутствие специальных команд. Однако эти команды требуют опыта или смекалки.

Отдельно хочется отметить командлет Test-Connection, который делает то же самое, что утилита ping, но не имеет такого алиса. Разница между утилитой и командлетом в формате вывода: утилита выводит текст, а командлет возвращает объект, который можно использовать в конвейерах.
Конвейер PowerShell: особенности и параметры
По своей задумке конвейеры в PowerShell не отличаются от конвейеров в *nix-системах: они перенаправляют вывод одной команды на ввод другой. Как отмечалось ранее, в PowerShell происходит взаимодействие не с текстом, а с объектами. При выводе на экран объект трансформируется в таблицу, чтобы человеку было удобнее читать, но не всегда таблица выводит все поля объекта.
Особенность конвейеров PowerShell заключается в том, что конвейер передает результат не целиком, а по одному объекту. Командлет Test-Connection выводит четыре объекта: по одному на каждый ICMP-запрос. Если подключить командлет к конвейеру, то можно увидеть подтверждение этому тезису. Воспользуемся командлетом Select-Object, чтобы выбрать колонку со временем запроса.
Test-Connection selectel.ru | Select-Object ‘Time(ms)’
После запуска данной команды можно наблюдать, как с некоторой задержкой печатаются пустые строки по одной.

Но как же так? Дело в том, что отображение объекта при выводе на экран не всегда соответствует имени поля в объекте. Чтобы получить полный список полей в объекте, необходимо вызвать командлет Get-Member.
PS C:\Users\sun> Test-connection selectel.ru | Get-Member TypeName: System.Management.ManagementObject#root\cimv2\Win32_PingStatus Name MemberType Definition ---- ---------- ---------- PSComputerName AliasProperty PSComputerName = __SERVER Address Property string Address BufferSize Property uint32 BufferSize NoFragmentation Property bool NoFragmentation PrimaryAddressResolutionStatus Property uint32 PrimaryAddressResolutionStatus ProtocolAddress Property string ProtocolAddress ProtocolAddressResolved Property string ProtocolAddressResolved RecordRoute Property uint32 RecordRoute ReplyInconsistency Property bool ReplyInconsistency ReplySize Property uint32 ReplySize ResolveAddressNames Property bool ResolveAddressNames ResponseTime Property uint32 ResponseTime ResponseTimeToLive Property uint32 ResponseTimeToLive RouteRecord Property string[] RouteRecord RouteRecordResolved Property string[] RouteRecordResolved SourceRoute Property string SourceRoute SourceRouteType Property uint32 SourceRouteType StatusCode Property uint32 StatusCode Timeout Property uint32 Timeout TimeStampRecord Property uint32[] TimeStampRecord TimeStampRecordAddress Property string[] TimeStampRecordAddress TimeStampRecordAddressResolved Property string[] TimeStampRecordAddressResolved TimestampRoute Property uint32 TimestampRoute TimeToLive Property uint32 TimeToLive TypeofService Property uint32 TypeofService __CLASS Property string __CLASS __DERIVATION Property string[] __DERIVATION __DYNASTY Property string __DYNASTY __GENUS Property int __GENUS __NAMESPACE Property string __NAMESPACE __PATH Property string __PATH __PROPERTY_COUNT Property int __PROPERTY_COUNT __RELPATH Property string __RELPATH __SERVER Property string __SERVER __SUPERCLASS Property string __SUPERCLASS ConvertFromDateTime ScriptMethod System.Object ConvertFromDateTime(); ConvertToDateTime ScriptMethod System.Object ConvertToDateTime(); IPV4Address ScriptProperty System.Object IPV4Address
Можно визуально оценить список и найти поле ResponseTime. Также в начале указан тип данного объекта, Win32_PingStatus, информацию о котором можно поискать в базе знаний Microsoft. В документации не только перечислены поля, но и их назначение. Таким образом, конечный вид конвейера будет таким:
Test-connection selectel.ru | Select-Object ResponseTime
Хотя PowerShell побуждает к интерактивной работе, его основное предназначение — автоматизировать рутинные задачи. Значит, необходимо писать скрипты.
Используйте PowerShell в работе с выделенным сервером
Соберите сервер в конфигураторе под свои задачи. Или выберите из более 100 готовых.
Интегрированная среда разработки

Если вы запускали PowerShell через поиск, вероятно, вы могли заметить приложение Windows PowerShell ISE.
PowerShell-скрипты — это текстовые файлы с расширением .ps1.
Windows PowerShell ISE — это интегрированная среда сценариев PowerShell, включающая в себя:
- редактор PowerShell-скриптов с автодополнением,
- окно для интерактивного выполнения командлетов в скрипте,
- список доступных командлетов с поиском.


Обратите внимание, что модуль ISE предоставляет графический интерфейс для генерации аргументов командлета. Помимо генерации команд, в функции модуля также входит вызов «справочника» по командлетам, аналогичного Get-Help, только в графическом интерфейсе.
После написания своего первого PowerShell-скрипта вы столкнетесь с некоторыми ограничениями. Во-первых, файл с расширением ps1 нельзя запустить «двойным кликом» по файлу. Необходимо открыть контекстное меню с помощью правой клавиши мыши и выбрать Запустить с помощью PowerShell.
Во-вторых, скрипт не запустится со следующей ошибкой:
Невозможно загрузить файл C:\Users\sun\Documents\HelloWorld.ps1, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https:/go.microsoft.com/fwlink/ ?LinkID=135170. + CategoryInfo : Ошибка безопасности: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : UnauthorizedAccess
По умолчанию запуск PowerShell-скриптов ограничен соответствующей политикой безопасности. Посмотреть текущее значение политики безопасности можно с помощью командлет Get-ExecutionPolicy:
PS C:\Users\sun> Get-ExecutionPolicy Restricted
Список возможных значений:
- Restricted — запуск запрещен,
- AllSigned — разрешен только запуск подписанных доверенным разработчиком скриптов,
- RemoteSigned — разрешен запуск подписанных и собственных скриптов,
- Unrestricted — разрешен запуск любых скриптов.
По умолчанию стоит значение Restricted. В идеале необходимо подписывать скрипты, но для собственных нужд можно ограничиться значением RemoteSigned:
Set-ExecutionPolicy RemoteSigned
Для выполнения данной команды необходимо запустить PowerShell от имени администратора.
Выполнение задач в фоне

PowerShell позволяет выполнять задачи в фоновом режиме, эту функциональность обеспечивают командлеты с существительным Job:
- Start-Job — запустить команду или командлет в фоновом режиме,
- Get-Job — показать состояние фоновых команд,
- Wait-Job — дождаться завершения выполнения фоновой команды,
- Receive-Job — получить результат выполнения команды.
Командлет Start-Job возвращает информацию о запущенном фоновом задании. Идентификатор, обозначенный в поле Id, является уникальным для сессии PowerShell.
Настройка удаленного выполнения
PowerShell позволяет реализовать удаленное выполнение командлетов, скриптов, но только на платформе Windows. Для включения возможности удаленного управления необходимо выполнить командлет Enable-PSRemoting с правами администратора.
Командлет Enter-PSSession запустит удаленную интерактивную сессию, а Invoke-Command выполнит команду на одном или нескольких удаленных компьютерах.
PowerShell – актуальные версии программы
PowerShell — мощный инструмент, пришедший на смену пакетным файлам. Он более функциональный и современный, а документация и различные руководства Windows PowerShell по работе делают его подходящим как для начинающих, так и продолжающих пользователей. В тексте мы составили описание PowerShell, — рассмотрели основные возможности программы, понятия, связанные с ней, синтаксис PowerShell и структуру языка.
На момент написания статьи актуальная версия PowerShell — 7.2. Используйте этот текст в качестве краткого справочника по Windows PowerShell, администрирование систем со скриптами в этой программе будет довольно простым.