Windows powershell modules что это за программа

Исторически утилиты командной строки в Unix-системах развиты лучше чем в Windows, однако с появлением нового решения ситуация изменилась. Windows PowerShell поз...

Исторически утилиты командной строки в Unix-системах развиты лучше чем в Windows, однако с появлением нового решения ситуация изменилась.

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 удаляет текст от курсора до конца строки.

F7 показывает окно с набранными командами и позволяет выбрать одну из них. В консоли также работает выделение текста мышью, копипаст, позиционирование курсора, удаление, backspace — все как мы любим.

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 {Get-Service}

Фоновыми задачами в 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, но это уже совсем другая история.

Часть 2: введение в язык программирования Windows PowerShell
Часть 3: передача параметров в скрипты и функции, создание командлетов
Часть 4: Работа с объектами, собственные классы

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

Какие темы стоит в первую очередь затронуть в следующих статьях цикла?


53.52%
Программирование в PowerShell
152


40.49%
Функции и модули PowerShell
115


21.83%
Как подписывать собственные скрипты?
62


10.21%
Работа с хранилищами через поставщиков (providers)
29


54.58%
Автоматизация администрирования компьютеров с помощью PowerShell
155


30.63%
Управление программным обеспечением и встраивание исполняемых компонентов PowerShell в сторонние продукты
87

Проголосовали 284 пользователя.

Воздержались 53 пользователя.

Обновлено 28.02.2022

PowerShell logo

Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов в рунете Pyatilistnik.org. Ранее я вас научил производить установку Windows 11, показал где брать установочный образ. В данной новой ОС есть много новых командлетов PowerShell и еще больше дополнительных модулей, расширяющих функционал. Сегодня я вам покажу, как устанавливать и управлять модулями PowerShell, как их сохранять и переносить на другой компьютер. Думаю, что многие из вас найдут для себя много полезной информации.

Что такое модуль PowerShell?

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

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

Различные типы модулей PowerShell

Существует 4 различных типа модулей PowerShell:

  • Скриптовые модули — Самый распространенный тип модуля, не требующий знания C#, в основном любые файлы PSM1, содержащие в основном функции и код, используемые разработчиками скриптов и администраторами.
  • Бинарные модули — Содержат скомпилированный код на основе сборки .NET Framework (DLL), используемый разработчиками командлетов для создания модулей, содержащих командлеты, поставщиков и т. д.
  • Модули манифеста — Скриптовые модули, содержащие манифест, например, с информацией об авторе и т. д.
  • Динамические модули — Специальный тип модуля, который никогда не записывается на диск и существует только в памяти. Элементы динамического модуля (функции/переменные) сразу же доступны в сеансе PowerShell, пока сеанс не будет закрыт.

Где хранятся модули PowerShell

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

  • C:WindowsSystem32WindowsPowerShellv1.0Modules
  • C:Program FilesWindowsPowerShellModules (По умолчанию все установленные модули для всех пользователей помещаются в папку модуля)
  • C:Program Files (x86)VMwareInfrastructurePowerCLIModules
  • C:UsersИмя пользователяDocumentsWindowsPowerShellmodules (Например в случае с PSTerminalServices)

Где хранятся модули PowerShell

Установка модулей PowerShell

Установка модулей очень простой процесс. Чтобы найти установленные, но еще не запущенные модули, запустите теперь известную команду Get-Module -ListAvailable.

список доступных модулей PowerShell

Чтобы получить список только импортированных модулей в текущем сеансе, просто запустите Get-Module.

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

Далее при наличии на компьютере интернета произведем поиск нужного модуля, например VMware.PowerCLI. Для этого есть командлет Find-Module. Выполним команду:

Find-Module -Name VMware.PowerCLI

Find-Module в powershell

Можно найти модули с похожими именами. например все, что связано с Vmware.

Find-Module -Name VMware*

найти модули с похожими именами

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

Find-Module -Name VMware.PowerCLI -MinimumVersion 12.5.0.19195797

Find-Module -Name VMware.PowerCLI -RequiredVersion 12.5.0.19195797

найти модуль по минимальной версии или по конкретной версии

Дополнительные ключи смотрите по ссылке — https://docs.microsoft.com/en-us/powershell/module/powershellget/find-module?view=powershell-7.2.

Далее найдя нужный модуль, установим его, выполните команду.

Install-Module -Name VMware.PowerCLI

установка модуля powershell

Еще можно объединять команды:

Find-Module -Name VMware.PowerCLI -MinimumVersion 12.5.0.19195797 | Install-Module

Дополнительные ключи смотрите по ссылке — https://docs.microsoft.com/en-us/powershell/module/powershellget/install-module?view=powershell-7.2

Как сохранить модули PowerShell

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

Save-Module -Name xRobocopy,Pscx -Path C:TempModule-PowerShell

сохранение модуля powershell

После переноса не забываем импортировать модуль, и если потребуется, то подкрутить политику ExecutionPolicy. Чтобы импортировать удаленный модуль, сначала необходимо создать PSSession (через New-PSSession ). Следующим шагом является импорт модуля, доступного на удаленном устройстве.

Import-Module -Name ActiveDirectory -PSSession $AdminServer -Prefix ‚Rmt’)

Чтобы удалить модуль, команда Remove-Module  выполняет эту работу. После удаления все команды, которые когда-то был добавлен модулем, удаляются из сеанса, это работает как реверсия импорта модуля. Обратите внимание, что из локальной сессии будет удален только модуль, но без удаления файлов модуля.  

Удаленное использование модуля с другого компьютера

Вам никто не мешает создать некий такой репозиторий модулей PowerShell на отдельной виртуальной машине и обращаться к ним удаленно. Установим для начала сессию с удаленным компьютером.

$session = New-PSSession -ComputerName w10-module

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

Get-Module -PSSession $session –ListAvailable

Импорт модуля PowerShell с удаленного компьютера

импортируем теперь в свою текущую сессию нужный модуль с удаленного сервера:

Import-Module -PSsession $session -Name VMware.PowerCLI

После завершите сеанс, когда закончите:

Remove-PSSession $session

Еще можно использовать командлет Invoke-Command. Тут вы подключаетесь к удаленному серверу и импортируете модуль.

$session = New-PSSession -ComputerName w10-module
Invoke-Command {Import-Module VMware.PowerCLI} -Session $session

Сохраним на локальный компьютер нужный нам модуль.

Export-PSSession -Session $s -CommandName *-PowerCLI* -OutputModule RemSQLServer -AllowClobber

Данная команда создаст на вашем компьютер новый PowerShell модуль VMware.PowerCLI (в каталоге C:Program FilesWindowsPowerShellModules ). Сами командлеты при этом не копируются. Далее закройте сессию.

Remove-PSSession $session

Теперь его можно локально импортировать и использовать.

Как удалить модуль PowerShell

Для удаления модуля со всеми файлами есть командлет Uninstall-Module. Выполните команду:

Uninstall-Module -Name xRobocopy

Где найти сторонние модули и скрипты PowerShell?

Помимо предустановленных модулей самой Windows PowerShell, существует огромное количество сторонних модулей. Для поиска конкретных модулей я рекомендую PowerShellGallery. Он функционирует как центральный репозиторий для обмена и получения кода PoSh, такого как модули, скрипты и многое другое. В основном они распространяются через PSRepository, которые обычно представляют собой веб-серверы, на которых можно публиковать файлы, тогда как эти PSRepos можно размещать у себя или использовать с помощью онлайн-опций, таких как PowerShellGallery. Get-PSRepository  откроет список доступных PSRepositories, помеченных информацией о том, публикует ли источник код, одобренный Microsoft или нет ( trusted/untrusted ). Чтобы изменить состояние доверия PowerShellGallery, например, используйте:

Get-PSRepository -Name PSGallery | Set-PSRepository -InstallationPolicy Trusted

Где найти сторонние модули и скрипты PowerShell

На этом у меня все. Мы с вами разобрали полный цикл управления модулями PowerShell. С вами был Иван Сёмин. автор и создатель IT портала Pyatilistnik.org.

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

Профили

У каждого пользователя Powershell есть свой профиль. Профиль выглядит как обычный файл со скриптом формата ps1. Открывая консоль Powershell вы автоматически запускаете этот файл и все значения, перечисленные в файле профиля, становятся видимыми для вас. Кроме этого профиль не ограничивается одним пользователем и может использоваться для всех.

Создание

Каждый профиль пользователя хранится в файле «.ps1» и путь до него можно посмотреть используя встроенную переменную:

$Profile

Расположение профиля пользователя в Powershell

Вы можете открыть этот файл и вписать в него любую команду. Я использую команду, которая проверит соединение с DNS сервером Google:

Test-NetConnection -ComputerName 8.8.8.8 -Hops 1

Скрипт срабатывающий при открытии консоли Powershell

Теперь, каждый запуск консоли будет выводить следующее, дополнительное, сообщение:

Скрипт срабатывающий при открытии консоли Powershell

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

Вам может не будет требоваться отображать подобный результат при каждом запуске. Вы можете поместить эти данные в переменную и затем вызывать ее по мере работы в консоли:

$result = Test-NetConnection -ComputerName 8.8.8.8 -Hops 1

Загрузка Powershell с переменной

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

function MyJob(){
    Test-NetConnection -ComputerName 8.8.8.8 -Hops 1
}

Использование функции при загрузке консоли Powershell

Типы профилей

Если посмотреть содержание переменной $Profile более детально, то мы увидим 4 типа профилей:

$Profile | select *

Типы профилей для работы в Powershell

В выведенной информации можно увидеть понятие ‘host’. Под «хостом» подразумевается программа, которая хостит Powershell. Это может быть стандартная консоль, редактор ISE, VisualStudio и т.д. 

Мы так же увидим следующие профили:

  • AllUsersAllHosts — профиль для всех пользователей и для всех хостов;
  • AllUsersCurrentHost — профиль для всех пользователей и только для текущего хоста;
  • CurrentUserAllHosts — профиль для текущего пользователя и для всех хостов;
  • CurrentUserCurrentHost — профиль для текущего пользователя и только для этого хоста.

Указанный путь — это место, где уже есть или может быть создан файл. При каждом запуске Powershell проверяет эти пути и читает данные.

Наиболее просто будет понять разницу работы профилей на примере. В каждый файл профиля я поместил команду соответствующую его названию:

echo "AllUsersAllHosts"
echo "AllUsersCurrentHost"
echo "CurrentUserAllHosts"
echo "CurrentUserCurrentHost"

Запуск средства разработки Powershell ISE и обычной консоли был следующий:

Разница профилей в Powershell

Как видно, в ISE, отображаются не все профили. Связано это с тем, что консоль Powershell и редактор ISE — это разные хосты. Мы можем увидеть немного отличающиеся профили если запустить эту команду в ISE:

$Profile | select *

Профили редактора ISE в Powershell

Так же вы можете увидеть дополнительные профили если используете Powershell Core 6/7, VisualStudio и т.д..

Профиль при удаленном подключении

Прямых способов использования профилей при удаленном подключении нет. Есть косвенный способ, который заключается в возможности использования файлов со скриптами в команде «Invoke-Command». Следующий пример демонстрирует такую возможность:

Invoke-Command -ComputerName "localhost" -FilePath $Profile

На самом деле эта команда выглядит следующим образом:

$path = "C:Users%username%DocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1"
Invoke-Command -ComputerName "localhost" -FilePath $path

Модули

Модуль Powershell — это файл формата «*.psm1» объединяющий в себе одну или несколько функций (команд). Powershell проверяет папки с модулями и выводит основную информацию о них. Когда вам нужно использовать какую-то команду, то Powershell повторно обращается к файлу модуля для ее выполнения.

Отличие модуля от профиля в том, что профиль загружает все в оперативную память сразу, а модуль по требованию (обращению).

Каждая команда (функция) Powershell относится к какому-то модулю. Увидеть модули можно с помощью нескольких команд, одна из них следующая:

Get-Command

Команды и модули Powershell

Эти модули находятся в определенных директориях. Пути до этих директорий описаны в переменной глобального окружения и вывести ее можно так:

$env:PSModulePath -split ';'

Список путей для создания модулей Powershell

Вы можете поместить свой модуль в любую директорию, но в основном они делятся на следующие:

  • В папке «Windows» — хранятся модули, которые относятся к самому Powershell. Они появляются при установке Windows и могут быть написанные на других языках;
  • В «Program Files» — лежат модули, которые устанавливаются отдельно (например из какого-то репозитория);
  • «Users» — обычно пустой и подразумевается, что в нем лежат ваши личные модули.

Какие модули и где находятся можно увидеть с помощью следующей команды:

Get-Module -ListAvailable

Список модулей и их расположения Powershell

Создание

Что бы создать модуль вам нужно создать папку и файл по одному из путей полученных раннее. Папка и файл должны иметь одинаковые имена. Для примера я создал файл модуля и папку с названием «MyModule» по следующему пути:

C:Users1DocumentsWindowsPowerShellModulesMyModuleMyModule.psm1

В этот файл я поместил следующую функцию:

function Test-Me(){
    echo "hello world"
}

При открытии новой консоли Powershell мы сможем сразу использовать эту команду:

Test-Me

Использование созданного модуля Powershell

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

Манифесты и справки

Если у вас большой модуль и если им пользуетесь не только вы, то стоит его описать. В программировании, для таких вещей, чаще всего используются комментарии. В Powershell, кроме комментариев, есть еще два понятия:

  • манифест — описывает автора модуля, дату его создания, ссылку на модуль и т.д.;
  • справка — описывает принцип работы с функцией/командой.

Пример манифеста можно увидеть на примере «AppLocker» и следующей команды:

Get-Module -ListAvailable | where name -eq AppLocker | select *

Вывод манифеста модуля Powershell

Манифест подразумевает создание дополнительного файла по тому же пути что и сам модуль. Название модуля, папки и файла манифеста должны совпадать. Расширение манифеста должно быть psd1. Т.е. используя предыдущий пример мой файл манифеста и модуль будут иметь следующие пути:

# модуль
C:Users1DocumentsWindowsPowerShellModulesMyModuleMyModule.psm1
# манифест
C:Users1DocumentsWindowsPowerShellModulesMyModuleMyModule.psd1

В этом файл нужно поместить массив с вашими значениями следующего формата:

@{
Author = "Alexander Melnikov"
ModuleVersion = "0.0.1"
}

Ключи заранее определены и вы не можете использовать произвольные. Манифест можно создать скопировав его у существующего модуля (путь указан в ModuleBase со скриншота выше) либо использовать команду New-ModuleManifest. Эту команду можно использовать как генератор шаблона, так и используя ключи:

New-ModuleManifest -Path "C:Users1DocumentsWindowsPowerShellModulesMyModuleMyModule.psd1" -PassThru

Создание шаблона манифеста пользователя Powershell

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

Справка в Powershell описывает работу не модуля, а функции/команды. Справку можно увидеть в следующем примере:

Get-Help Get-Command

Создание справки Powershell

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

Get-Help Get-Command

Создание справки Powershell и описания

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

function Some-Funct(){
<#
	    .SYNOPSIS
	    Returns registry key using provided path.
	    .DESCRIPTION
	    The function uses the Get-Item command to return the information for a provided registry key.
	    .PARAMETER Path
	    The path that will be searched for a registry key.
	    .EXAMPLE
	    Get-RegistryKey -Path 'HKLM:HARDWAREDESCRIPTIONSystem'
	    .INPUTS
	    System.String
	    .OUTPUTS
	    Microsoft.Win32.RegistryKey
	    .NOTES
	    This module is an example of what a well documented function could look.
	    .LINK
	https://fixmypc.ru
	#>
   return "Pass"
}

Удаленное выполнение модулей

Самый тривиальный способ передать команду — это использование Invoke-Command:

Invoke-Command -ComputerName "localhost" -Scriptblock {Some-Funct}

Минус этого способа в том, что у вас может быть с 10-ок модулей, которые вы захотите использовать. В Powershell есть интересный способ импортировать модули с удаленного компьютера на локальный. Для этого мы должны создать сессию с New-PSSession, а затем импортировать с этой сессии модули. В примере ниже я импортировал модуль «ActiveDirectory» не имея его на локальном компьютере:

$remote_pc = New-PSSession -ComputerName $servcer -Credential (Get-Credential)
Import-Module -Name ActiveDirectory -PSSession $AdminServer -Prefix "From AD1"

Импорт модуля с удаленного хоста в Powershell

Изменение PSModulePath и добавление сетевого хранилища модулей

Еще одна не очевидная возможность — это создание сетевого пути для хранения модулей. Это может пригодится, если вы создаете свои модули в команде или используете их на множестве компьютерах. Что бы вы их могли читать — вам нужно будет изменить переменную окружения «PSModulePath» добавив в нее путь формата:

path = "\remotepathModules"

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

Этот путь можно занести в переменные окружения обычным способом через GUI либо с помощью следующих команд Powerhsell:

# сетевой путь
$new_path = $env:PSModulePath + ";\remotepathModules"
# добавление в окружение
[System.Environment]::SetEnvironmentVariable('PSModulePath', $new_path,[System.EnvironmentVariableTarget]::Machine)

Использование модуля по сетевому пути Powershell

Новое значение в PSModulePath появится после перезапуска консоли.

Переменные окружения

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

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

Чтение

Для получения переменных окружения вы можете использовать 2 способа. Первый — через встроенную переменную $env. Так это будет выглядеть на примере переменной Path:

$env:path

# более читаемый вид
$env:path -split ';'

Вывод переменных окружения Powershell

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

cd env:
ls

Вывод переменных окружения Powershell

Открыть значение любой переменно можно так же как и любой другой файл:

cat env:path

Переменные окружения делятся на несколько типов: machine -> user -> process, .

  • machine — относится к ОС и эти переменные может прочитать любой пользователь;
  • user — относятся к конкретному пользователю. Эти значения перезаписывают значения machine;
  • process — динамические переменные, которые создаются при запуске процесса. Они являются совмещением user + machine.

Используя способы выше вы видите только динамические переменные. Если у вас есть 2 одинаковых переменных на пользовательском и системном уровне вы можете использовать метод .NET для получения конкретной переменной:

# Получение значения системной переменной
[System.Environment]::GetEnvironmentVariable('PATH','machine')

# Получение значения пользовательской переменной
[System.Environment]::GetEnvironmentVariable('PATH','user')

Вывод системных переменных окружения Powershell используя метод .NET

Либо вы можете все переменные окружения конкретного типа:

# Получение всех переменных конкретного типа
[System.Environment]::GetEnvironmentVariables('User')
[System.Environment]::GetEnvironmentVariables('Process')
[System.Environment]::GetEnvironmentVariables('Machine')

Создание

Переменную окружения, которая будет жить в рамках одной сессии Powershell, можно создать следующей командой:

New-Item -Name test1 -Value value1 -Path env:

Создание временной переменной окружения Powershell

При закрытии консоли, переменна созданная выше, будет удалена. Исправить это можно использовав методы .NET. В следующем примере мы создадим переменную типа «Machine», но уже постоянную:

[System.Environment]::SetEnvironmentVariable('test1', 'value1',[System.EnvironmentVariableTarget]::Machine)

Создание постоянной системной переменной окружения в Powershell используя .NET

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

[System.Environment]::SetEnvironmentVariable('test2', 'value2',[System.EnvironmentVariableTarget]::User)

Создание постоянной пользовательской переменной окружения в Powershell используя .NET

Изменение и удаление

Изменить переменную окружения, на текущую сессию, можно следующими способом:

# вариант 1
$env:testvar += ";C:folder2"

# вариант 2
Set-Item -Path "Env:testvar" -Value ($env:testvar +"C:folder3;")

Удаление переменной окружения с Powershell на текущий сеанс

Что бы сделать изменения постоянными нужно использовать метод .NET:

# Изменим старое значение
$new_path = $env:testvar + "E:;"
[System.Environment]::SetEnvironmentVariable('testvar', $new_path, 'Process')

# Удалим переменную и значение
[System.Environment]::SetEnvironmentVariable('testvar', '', 'Process')

Удаление переменной окружения с Powershell используя .NET

Теги:

#powershell

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

Утилита полностью автоматизирована, для управления рабочими процессами понадобится минимальное вмешательство человеческого фактора. Все что для нужно — задавать правильные команды. Но прежде чем это делать, нужно разобраться в главном вопросе: Что такое Windows PowerShell, для каких целей он служит и какие функции выполняет.Использование PowerShell

Краткий обзор программы

По сути, это усовершенствованная версия MS-DOS – старейшей дисковой операционной системы от компании Microsoft, выпущенной еще в середине 80-х гг. прошлого века. Она содержала в себе приложения, с функцией интерпретаторов, далеких от совершенства, умевших задавать несколько простых команд.

Разработчики неоднократно пытались компенсировать недостатки MS-DOS дополнительными компонентами для запуска сценария, такими как MS Script Host, с языками вроде Jscript, но это решало проблему лишь частично. В 2003 г. началась разработка программы способной заменить старую оболочку, получившую название Monad, известную сейчас как PowerShell. Хотя его впервые запустили в конце 2006 года и включили в ОС Windows XP, в завершенном виде он вышел только спустя 10 лет непрерывных доработок, в 2016 г. когда получил открытый исходный код. PowerShell широко используется в Windows 7, 8 и 10.Открываем через поиск

Ответить на этот вопрос в двух словах не получится, он слишком сложный и требует детального рассмотрения. Это средство автоматизации с расширяемыми свойствами и открытым исходным кодом – оболочка, заключающая в себе интерфейс командной строки с языком сценариев для выполнения скриптов, содержащихся в ней. Набор скриптов, заключенных в системные файлы имеет расширение PS1, но для удобства пользователей запускается как обычные BAT и CMD файлы.

Таким образом, PowerShell – это не что иное, как скриптовый язык, созданный на платформе .NET для выполнения задач по части управления файлами, сохраненными на системном диске, запущенными процессами и службами. Кроме того, ему подчинено управление аккаунтами в сети Интернет и любыми настройками, от системных, до настроек функциональности отдельных приложений. Но сам по себе PowerShell только оболочка, основные функции выполняют сопутствующие элементы, наполняющие ее. Далее постараемся разобраться в PowerShell, чтобы работа с утилитой стала понятна даже «чайникам».

Командлеты

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

Это несколько отличается от запросов, вводимых в поисковой строке браузера, но имеет те же принципы. В оболочке содержится сохраненная коллекция из сотен таких команд, отвечающих за определенные задачи. Формируются командлеты по обычному принципу Глагол + Существительное, что отражает их назначение.Используем командлеты

Конвейер

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

Разработчики Microsoft при создании конвейера, использовали как наглядный пример аналог, задействованный в Linux, но не копировали его, а сделали его максимально удобным и функциональным. Если сравнивать их, общая между ними только характеристика функций, выраженная в фактически непрерывном потоке данных, содержащих миллионы символов.Как использовать конвейр

Сценарии

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

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

Дополнения

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

  1. C WS-Management, одной из опций «Remonting», появляется возможность вызова сценариев и командлетов на удаленных машинах, одной или сразу нескольких. С его помощью отслеживается состояние выполнения команд, по результатам выданным объектами сериализации и структуризации. Дополнительно возможна установка интерактивных сессий.
  2. С помощью «Фоновых работ», можно перевести вызов команд в асинхронную последовательность. Для запуска используются опции локальной машины, а при желании и сразу нескольких удаленных. Единственное неудобство – использование интерактивных командлетов становится в этом случае невозможным.
  3. Применяя опции «Модулей» намного проще становится организация сценариев и их помещение в самодостаточные модули. При этом, их коды выполняются в независимом контексте, не оказывая заметного влияния на структуру окружения, ограниченного при организации. Функциональное содержание модулей имеет 3 типа: приватное, публичное и переменное.
  4. При помощи подмножества «Языков данных» отделяются их определения от исполняемых кодов для сценариев. Благодаря этому, становится возможен импорт в процессе их выполнения локализованных строк, помещающихся в тело сценариев.
  5. С «Отладкой сценариев» удобнее установка точек прерывания, в теле их самих или в сопутствующих функциях оболочки. Точки прерывания устанавливаются в любом месте в столбцах и строках, для чтения, команд или записи. Их можно также устанавливать и контролировать, при помощи командлетов, имеющих отношение к сценариям.
  6. Функции «Событирования» направлены на прослушивание, перенаправление, выполнение действий и управление возникающих событий. Данная процедура включает оповещения о любых изменениях состояния объектов, находящихся под управлением. Кроме того, предполагает подписку сценариев на ObjectEvents, с последующей синхронной и асинхронной обработкой.
  7. Использование «Advanced Functions», упрощает разработку командлетов полноценного образца, при помощи возможностей самой программы и включенных в нее элементов.
  8. Возможности «Обработки ошибок», позволят использовать разные типы исключений каждого блока (catch) по-отдельности.Обработка ошибок

Как запустить PowerShell

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

При помощи «Поиска»

Для этого потребуется кликнуть по соответствующему значку, размещенному на панели задач, или применить комбинацию клавиш «Win + S». В отрывшемся окне, в поисковой строке набрать «powershell», а в выданном результате выбрать «Классическое предложение». Можно также вызвать контекстное меню правым кликом, где воспользоваться «Запуском от имени администратора».Используем поиск

Через меню «Пуск»

Кликом по кнопке «Пуск» открыть список приложений, в сортированной группе озаглавленной «W» выбрать папку с программой. Развернуть ее и кликнуть по приложению в верхней строчке. Здесь также в виде варианта, можно вызвать контекстное меню правой кнопкой мыши и запустить «от имени администратора».Запуск через пуск

С использованием сочетания клавиш

Этот способ подразумевает предварительное действие, заключающееся в замене командной строки оболочкой «Widows PowerShell» с функцией «Меню Win + X». После этого войти в соответствующее меню сочетанием клавиш, или через контекстное меню правым кликом по кнопке «Пуск», где выбрать нужный пункт в представленном списке.Панель параметров

Через диалог «Выполнить»

Один из простейших способов, с открытием диалогового окна «Выполнить». Для его вызова, применить сочетание клавиш «Win + R», в строке «Открыть» ввести команду с именем программы. Для ее запуска нажать на клавишу «Enter» или кнопку «Ок» на панели окна.Окно Выполнить

С помощью «Диспетчера задач»

Чтобы открыть диспетчер, применить сочетание клавиш «Ctrl + Shift + Esc», в открывшемся окне, во вкладке «Файл» выбрать вариант «Запуска новой задачи». В новом окне, напротив строки «Открыть», вписать «powershell» и нажать на «Enter». В случае если требуется создание задачи от имени администратора, отметить галочкой соответствующую опцию и подтвердить нажатием по кнопке «Ок».Запуск новой задачи

Через «Проводник»

После его открытия, потребуется указать имя папки или диска, где будет запускаться программа. На вкладке «Файл» выбрать вариант «Запустить Widows PowerShell» и нажать на нужный пункт.Запуск из проводника

Через системную папку

В поисковой строке ввести адрес программы: «C:WindowsSystem32WindowsPowerShellv1.0». В открывшемся списке выбрать папку «powershell.exe» и открыть ее двойным левым кликом. Чтобы упростить процесс в будущем, можно создать ярлык файла и закрепить в любом удобном месте: на панели задач, в меню «Пуск», или рабочем столе. При необходимости запуск оболочки будет осуществляться двойным кликом по иконке.Ищем в системной папке

Процедура использования утилиты

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

Работа с командлетами

На простом примере, команда, задающаяся как «Get-Help» — это своеобразный справочник утилиты, предоставляющий при вводе общую информацию. Если нужна справка по определенному процессу, например о подключенных дисках, нужно задать команду – «Get-Help Get-PSDrive», и так по любому вопросу, меняя только имя командлета. Для каких либо действий, к примеру, очистки корзины от файлового мусора, обычно используется «Clear-RecycleBin», применяющийся и для более важных задач в обслуживании ПК и для написания скриптов. Но отвечает он и за такой простой процесс, как очистка системных корзин. Прежде нужно указать диск, подлежащий очистке, по принципу: «Clear-RecycleBin C:» для подтверждения действия ввести символ «Y» и нажать на «Enter».Работа с командлетами

Работа с конвейером

В работе, конвейер чрезвычайно прост и удобен, чем особенно выделяется на фоне других типов команд. Например, если выводить результат Get-Process, содержащий информацию об активных процессах на ПК в командлет Soft-Object, он отсортирует их по дескрипторам. Переведя полученные значения в Where-Object, произойдет фильтрация этих процессов по заданному параметру, к примеру, наименьшего объема страничной памяти. А если и этот результат вывести в Select-Object, он выделит лишь первые 10 процессов, с учетом числа дескрипторов.

Или еще один простой пример, применяющийся для получения информации о самых тяжеловесных файлах, хранящихся на системном диске: Команда Get-ChildItem, открывает каталог для выбора объекта, Sort-Object отсортирует выбранный объект, а Select-Object укажет его нужные свойства.Выполнение конвейера

Работа со сценарием

При создании алгоритмов, часто применяется Windows PowerShell ISE, специально созданный механизм, в том числе и для использования сценариев. В нем, под  названием «Безымянный 1.ps1» вводится тело кода. Разберем на простом примере: «WMID WebMoney» в названии задать условно «wmid», сохранить файл в корне диска С. Для запуска потребуется войти в каталог, применяя команду «cd C:» имя файла должно значиться в таком ключе: «.wmid». Примечательно, что сценарии запускаются и из командной строки ОС, но для этого нужно изменить путь к нему: «powershell.exe C: wmid.ps1». При этом важно помнить, что выполнять сценарии по умолчанию запрещается, для получения разрешения на такие действия, следует задать команду Set-ExecutionPolicy.Сценарий в работе

Самые полезные командлеты PowerShell

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

Наиболее полезные в применении:

  • Get-Help – справочник по назначению командлетов и общим свойствам оболочки;
  • Update-Help — загрузка и установка обновленных справочных данных;
  • Get-Command – поисковик требуемых команд, с авто заполнением строки;
  • Get-Alias – отражает установленные псевдонимы, общим списком или с конкретикой;
  • Get-PSDrive – представляет запущенные диски и происходящие на них процессы;
  • Install-WindowsFeature – ролевой и компонентный установщик;
  • Uninstall-WindowsFeature – ролевой и компонентный деинсталлятор;
  • Get-History – отвечает за возвращение командных списков, выполненных при входе.
  • $hversion – возвращает версию утилиты

Переменные:

  • Get-Variable – показывает списком все переменные с учетом их значений;
  • New-Variable – используется для настройки ново созданных переменных;
  • Set-Variable – устанавливает новые значения, если они не значатся в списке;
  • Clear-Variable – деинсталлятор содержания, сохраняющий образ;
  • Remove-Variable — деинсталлятор командлетов и их составляющих.

Форматирование:

  • Format-List – расширенный справочник;
  • Format-Table – выводит таблицу результатов отдельных команд;
  • Format-Wide — расширенная таблица по результатам, со свойствами отдельных объектов.

Интернет:

  • Enable-NetAdapter – для включения адаптера;
  • Rename-NetAdapter – задает новое имя и представление;
  • Restart-NetAdapter – используется для перезапуска;
  • Get-NetIPAddress – предоставляет данные по конфигурации прокси-сервера;
  • Set-NetIPAddress – задает новую конфигурацию прокси-серверу;
  • New-NetIPAddress – занимается созданием и настройкой прокси-сервера;
  • Remove-NetIPAddress – деинсталлятор прокси-сервера;
  • New-NetRoute – используется для внесения дополнительных записей;
  • Get-NetIPv4Protocol — предоставляет данные по протоколу IPv4;
  • Get-NetIPInterface — отражает свойства и характеристики веб-интерфейса IP.

Элементы:

  • Get-Item — принимает элементы по заданному пути;
  • Move-Item – для перемещения элементов по другим папкам;
  • New-Item – используется для создания и оформления;
  • Remove-Item – деинсталлятор отмеченных элементов;
  • Get-Location – показывает местонахождение в настоящем времени.

Фоновые задания:

  • Start-Job – выполняет запуск;
  • Stop-Job – останавливает работу;
  • Get-Job – открывает список;
  • Receive-Job – предоставляет информацию о результатах;
  • Remove-Job – деинсталлятор фоновых задач.

Объекты:

  • Measure-Object – используется для расчета числовых агрегирующих параметров;
  • Select-Object – для выбора с указанием конкретных свойств;
  • Where-Object – отражает условия касательно выборки по значению и свойствам.

Службы и процессы:

  • Get-Process – показывает информацию об активных процессах ПК;
  • Start-Process – производит запуск на ПК;
  • Stop-Process — прекращает работу избранных;
  • Get-Service – предоставляет данные об активных службах;
  • Restart-Service – осуществляет перезапуск;
  • Start-Service – используется для подключения выбранных;
  • Stop-Service – ставит на паузу процесс;
  • Set-Service – изменяет свойства служб и режим подключения.

Компьютер и система:

  • Restart-Computer – используется для перезапуска ОС;
  • Checkpoint-Computer — для создания системной восстановительной копии для ПК;
  • Restore-Computer – отвечает за запуск восстановленной системы;
  • Remove-Computer — деинсталлирует локальный ПК из доменного имени;
  • Clear-EventLog – очищает список записей в журнале.

Контент:

  • Get-Content – принимает содержимое различных элементов;
  • Clear-Content — стирает содержимое, но сохраняет образы;
  • Set-Content – используется для перезаписи.Список команд

Что такое PowerShell ISE

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

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

Удаление программы

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

Хотя стоит заметить, что иногда необходимо удалить Windows PowerShell 1.0, поскольку операционная система может не обновляться из-за этого элемента. Сделать это можно так:

  • Запускаем системный поиск и вводим appwiz.cpl.
  • В окне выбираем – Просмотр установленных обновлений.
  • Ищем нужный компонент в списке обновлений, обычно это KB928439 и удаляем его.

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

Windows PowerShell — что это за программа? Такой вопрос довольно часто встречается среди пользователей, начинающих «глубже» изучать Windows. Рядовым пользователям такая программа вообще не нужна. «Рядовой пользователь» это тот, кто не любит настраивать операционную систему «под себя». Максимум, на что он способен, — это поменять тему рабочего стола. Таких пользователей очень много.

Windows PowerShell — это программа, которая пригодится системным администраторам Windows-серверов или тем, кто хочет «покопаться» в тонких настройках этой операционной системы. При помощи этой программы можно:

  • запускать исполнение скриптов, влияющих на работу системы;

  • настраивать, останавливать или активировать внутренние сервисы и службы;

  • конфигурировать большинство программ, установленных на компьютере.

Многие пользователи компьютеров знают или слышали, что у Linux-систем очень развита конфигурация системы через терминал и командные скрипты. У Виндовс такой способ конфигурации был слабо развит, пока не появилась программа Windows PowerShell.

Windows PowerShell — что это за программа?

Сегодняшняя статья не будет глубоким погружением в работу этой программы, так как все ее возможности описать в рамках одной статьи невозможно. Цель статьи — ответить на вопрос: «Windows PowerShell — что это за программа?», чтобы пользователи смогли решить, стоит ли им дальше ее изучать.

Windows PowerShell — это оболочка для стандартной командной строки и по совместительству язык сценариев для администрирования системы. Эта программа создана на основе «.NET Framework». По сути, эта программа нужна для автоматизирования администрирования операционной системы. Она подходит для системных администраторов и для «продвинутых» пользователей, которые не боятся самостоятельно конфигурировать ОС.

Как запустить Windows PowerShell? 

Windows PowerShell — это утилита, которая уже встроена в систему. Если у вас не «обрезанная» операционная система, тогда она уже есть в компьютере. «Обрезанная система» это операционная система, которая была «обработана» опытными пользователями. То есть они удалили все лишнее из ОС, чтобы сделать ее «легче». Как правило, «обрезанные» системы — это пиратские копии Windows.

Если у вас обычная система, тогда запустить Windows PowerShell очень просто. Воспользуйтесь любым удобным способом:

  1. Через утилиту «Выполнить». Откройте меню «Выполнить» и введите в него команду «powershell». Можно воспользоваться более «продвинутой» версией «PowerShell ISE». Для этого тут же можно ввести команду «PowerShell ISE». «ISE»-версия более предпочтительна, так как имеет более широкие возможности и более удобна.

  2. Через меню «Пуск». Откройте меню «Пуск» и спуститесь в самый низ, где расположены программы на букву «W». Найдите папку «Windows PowerShell» и выберете программу, подходящую для вас. Опять же, это может быть «чистая» «Windows PowerShell» или «Windows PowerShell ISE».

  3. Также, чтобы запустить Windows PowerShell, можно использовать «Диспетчер задач» или «Проводник». Можно запустить программу прямо из папки на диске «С». Но все это более сложные способы, первые два намного легче и проще, поэтому воспользуйтесь ими.

Как используется программа Windows PowerShell?

В Windows PowerShell есть удобный инструмент «cmdlets». По сути, это функциональные команды, которые формируются по принципу «Действия-Объекты». Например, когда нужна документационная помощь, можно воспользоваться командой «Get-Help». В ответ вы получите документацию по использованию программы Windows PowerShell. Глагол «Get» означает «получить», а в контексте программы Windows PowerShell «показать», но есть и другие глаголы, формирующие команды. Например:

  • «Add» «добавить»;

  • «Clear» «очистить»;

  • «Enable» «подключить»;

  • «Disable» «отключить»;

  • «New» «создать»;

  • «Remove» «удалить»;

  • «Set» «задать»;

  • «Start» «активировать»;

  • «Stop» «остановить»;

  • «Export» «экспортировать»;

  • «Import» «импортировать».

Функциональные команды не зависят от регистра, то есть «Start-Script» это то же самое, что и «start-script». Если нужно ввести сразу несколько команд, тогда они разделяются «точкой с запятой», например: «Start-Script; Export-File».

Внутри Windows PowerShell спрятано очень много функциональных команд. Те, которые часто используются пользователями, укомплектованы в «укороченные» команды — алиасы. Например, вместо «Get-Help» можно ввести просто «help», а вместо «Add-Content» можно использовать «ас». Другими словами, алиасы — это те же синонимы, то есть «Add-Content» и «ac» выполняют одно и то же действие, но пишутся по-разному. Весь перечень «синонимов» можно посмотреть прямо в Windows PowerShell, если ввести команду «Get-Alias».

У команд могут быть собственные аргументы. Например, если нужно остановить какой-то конкретный процесс в системе, вы не можете просто ввести команду «Stop-Process». Нужно указать, какой процесс вы хотите остановить. Хорошо, если вы знаете имя процесса. Если вы не знаете точное имя процесса, тогда посмотрите все запущенные процессы в системе при помощи команды «Get-Process». После этой команды вам откроется список всех запущенных и остановленных процессов. Находите имя процесса, который хотите остановить, и пишете вот такую команду: «Stop-Process {Имя процесса}».

Windows PowerShell: скрипты

Функциональные команды — это удобный инструмент, но Windows PowerShell интересен тем, что с его помощью можно автоматизировать настройку Windows-системы или серверов при помощи скриптов.

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

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

Заключение

Windows PowerShell — что это за программа? Это программа, которая помогает управлять серверами или операционной системой Windows. Обычному пользователю она вряд ли пригодится, но системному администратору лучше ее изучить. Она помогает автоматизировать многие операции над системой. Чтобы добиться автоматизации, придется один раз «попотеть» над скриптами, а потом запускать их в нужное время. Перед написанием скриптов нужно обязательно ознакомиться с требованиями к ним, иначе есть риск, что скрипт никогда не запустится в Windows PowerShell, а вы не будете знать почему.

Рассказываем про Windows PowerShell — технологию для автоматизации рутинных задач, пришедшую на смену bat-файлам.

Работа с консолью Microsoft Windows

Ранее мы рассматривали командные интерпретаторы COMMAND.CMD и CMD.EXE, обеспечивающие автоматизацию задач в семействе операционных систем Microsoft Windows. Фактически данные интерпретаторы не получали обновлений с начала 2000-х годов и существуют в современных операционных системах для обеспечения совместимости.

Подробнее о bat-файлах →

Хотя современные операционные системы предлагают богатый на функции графический интерфейс, ряд однотипных задач быстрее решается через консоль. Более того, серверные редакции ОС не предоставляют графический интерфейс по умолчанию, поэтому интерпретатор командной строки является неотъемлемой частью практически любой операционной системы.

Помимо отсутствия обновлений, CMD.EXE имеет ограниченный функционал. Он не позволяет писать сложную логику и полностью отказаться от использования графического интерфейса. Корпорация Microsoft пыталась решить эти проблемы с помощью инструмента под названием Microsoft Script Host, который имел интеграцию со скриптовыми языками JScript и VBScript.

Однако Microsoft Script Host имел ряд собственных проблем:

  • плохо интегрировался с командной оболочкой операционной системы,
  • сопровождался скудной документацией,
  • разные версии Windows имели командные интерпретаторы с разным набором команд,
  • инструмент становился отличным вектором для атак.

Все это побуждало Microsoft сделать командный интерпретатор с нуля.

В 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 в меню

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

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

Установка PowerShell

В случае успеха откроется синее окно. 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 {
    $PSVersionTable.PSVersion
}

Данный код объявит функцию 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, несмотря на отсутствие специальных команд. Однако эти команды требуют опыта или смекалки.

Утилита ping

Отдельно хочется отметить командлет Test-Connection, который делает то же самое, что утилита ping, но не имеет такого алиса. Разница между утилитой и командлетом в формате вывода: утилита выводит текст, а командлет возвращает объект, который можно использовать в конвейерах.

Конвейер PowerShell: особенности и параметры

По своей задумке конвейеры в PowerShell не отличаются от конвейеров в *nix-системах: они перенаправляют вывод одной команды на ввод другой. Как отмечалось ранее, в PowerShell происходит взаимодействие не с текстом, а с объектами. При выводе на экран объект трансформируется в таблицу, чтобы человеку было удобнее читать, но не всегда таблица выводит все поля объекта.

Особенность конвейеров PowerShell заключается в том, что конвейер передает результат не целиком, а по одному объекту. Командлет Test-Connection выводит четыре объекта: по одному на каждый ICMP-запрос. Если подключить командлет к конвейеру, то можно увидеть подтверждение этому тезису. Воспользуемся командлетом Select-Object, чтобы выбрать колонку со временем запроса.

Test-Connection selectel.ru | Select-Object ‘Time(ms)’

После запуска данной команды можно наблюдать, как с некоторой задержкой печатаются пустые строки по одной.

Test-connection

Но как же так? Дело в том, что отображение объекта при выводе на экран не всегда соответствует имени поля в объекте. Чтобы получить полный список полей в объекте, необходимо вызвать командлет Get-Member.

PS C:Userssun> Test-connection selectel.ru | Get-Member


   TypeName: System.Management.ManagementObject#rootcimv2Win32_PingStatus

Name                           MemberType     Definition
----                           ----------     ----------
PSComputerName                 AliasProperty  PSComputerName = __SERVER
Address                        Property       string Address {get;set;}
BufferSize                     Property       uint32 BufferSize {get;set;}
NoFragmentation                Property       bool NoFragmentation {get;set;}
PrimaryAddressResolutionStatus Property       uint32 PrimaryAddressResolutionStatus {get;set;}
ProtocolAddress                Property       string ProtocolAddress {get;set;}
ProtocolAddressResolved        Property       string ProtocolAddressResolved {get;set;}
RecordRoute                    Property       uint32 RecordRoute {get;set;}
ReplyInconsistency             Property       bool ReplyInconsistency {get;set;}
ReplySize                      Property       uint32 ReplySize {get;set;}
ResolveAddressNames            Property       bool ResolveAddressNames {get;set;}
ResponseTime                   Property       uint32 ResponseTime {get;set;}
ResponseTimeToLive             Property       uint32 ResponseTimeToLive {get;set;}
RouteRecord                    Property       string[] RouteRecord {get;set;}
RouteRecordResolved            Property       string[] RouteRecordResolved {get;set;}
SourceRoute                    Property       string SourceRoute {get;set;}
SourceRouteType                Property       uint32 SourceRouteType {get;set;}
StatusCode                     Property       uint32 StatusCode {get;set;}
Timeout                        Property       uint32 Timeout {get;set;}
TimeStampRecord                Property       uint32[] TimeStampRecord {get;set;}
TimeStampRecordAddress         Property       string[] TimeStampRecordAddress {get;set;}
TimeStampRecordAddressResolved Property       string[] TimeStampRecordAddressResolved {get;set;}
TimestampRoute                 Property       uint32 TimestampRoute {get;set;}
TimeToLive                     Property       uint32 TimeToLive {get;set;}
TypeofService                  Property       uint32 TypeofService {get;set;}
__CLASS                        Property       string __CLASS {get;set;}
__DERIVATION                   Property       string[] __DERIVATION {get;set;}
__DYNASTY                      Property       string __DYNASTY {get;set;}
__GENUS                        Property       int __GENUS {get;set;}
__NAMESPACE                    Property       string __NAMESPACE {get;set;}
__PATH                         Property       string __PATH {get;set;}
__PROPERTY_COUNT               Property       int __PROPERTY_COUNT {get;set;}
__RELPATH                      Property       string __RELPATH {get;set;}
__SERVER                       Property       string __SERVER {get;set;}
__SUPERCLASS                   Property       string __SUPERCLASS {get;set;}
ConvertFromDateTime            ScriptMethod   System.Object ConvertFromDateTime();
ConvertToDateTime              ScriptMethod   System.Object ConvertToDateTime();
IPV4Address                    ScriptProperty System.Object IPV4Address {get=$iphost = [System.Net.Dns]:...
IPV6Address                    ScriptProperty System.Object IPV6Address {get=$iphost = [System.Net.Dns]:...

Можно визуально оценить список и найти поле 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-скриптов с автодополнением,
  • окно для интерактивного выполнения командлетов в скрипте,
  • список доступных командлетов с поиском.
Перечень команд
Справка Test-Connection

Обратите внимание, что модуль ISE предоставляет графический интерфейс для генерации аргументов командлета. Помимо генерации команд, в функции модуля также входит вызов «справочника» по командлетам, аналогичного Get-Help, только в графическом интерфейсе.

После написания своего первого PowerShell-скрипта вы столкнетесь с некоторыми ограничениями. Во-первых, файл с расширением ps1 нельзя запустить «двойным кликом» по файлу. Необходимо открыть контекстное меню с помощью правой клавиши мыши и выбрать Запустить с помощью PowerShell.

Во-вторых, скрипт не запустится со следующей ошибкой:

Невозможно загрузить файл C:UserssunDocumentsHelloWorld.ps1, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https:/go.microsoft.com/fwlink/
?LinkID=135170.
    + CategoryInfo          : Ошибка безопасности: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnauthorizedAccess

По умолчанию запуск PowerShell-скриптов ограничен соответствующей политикой безопасности. Посмотреть текущее значение политики безопасности можно с помощью командлет Get-ExecutionPolicy:

PS C:Userssun> Get-ExecutionPolicy
Restricted

Список возможных значений:

  • Restricted — запуск запрещен,
  • AllSigned — разрешен только запуск подписанных доверенным разработчиком скриптов,
  • RemoteSigned — разрешен запуск подписанных и собственных скриптов,
  • Unrestricted — разрешен запуск любых скриптов.

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

Set-ExecutionPolicy RemoteSigned

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

Выполнение задач в фоне

Консоль 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, администрирование систем со скриптами в этой программе будет довольно простым. 

Понравилась статья? Поделить с друзьями:
  • Windows phone store скачать на компьютер
  • Windows phone store скачать на андроид
  • Windows phone settings tele2 ru winphone
  • Windows phone sdk 10 для windows 10 x64 скачать
  • Windows phone recovery tool скачать с официального сайта