Выполнить команду на удалённом компьютере

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

Производительность Invoke-WebRequest и getElementsByTagName

Функция getElementsByTagName в реализации Microsoft — достаточно тяжелая, поэтому может выполняться медленно. Если же вы к ней еще применяете конвейер и отправляете результаты метода в другую команду, скорость работы скрипта может быть катастрофически низкой. К примеру, последний пример может выполняться до 30 секунд (если страница достаточно большая).

Я не знаю, в чем причина такого поведения. Погуглив, я вышел на это обсуждение: -is-this-powershell-code-invoke-webrequest-getelementsbytagname-so-incred. Из текста я понял, что getElementsByTagName дает нам некоторое количество COM-объектов, и мы отдаем эти COM-объекты в другой коммандлет. Это ужасно медленный процесс, который отнимает до 86% всего времени.

У этой проблемы я пока нашел только одно решение: пользуйтесь 32-битным Powershell в таких случаях. Не знаю почему, но это действительно дает результат.

Отключить PowerShell в Windows 10

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

1] Отключить PowerShell в Windows 10 с помощью политики безопасности

Локальная политика безопасности предлагает пользователям способ заблокировать доступ PowerShell в Windows 10. Для этого следуйте приведенным ниже инструкциям:

  1. Нажмите «Пуск», введите «Локальная политика безопасности» и выберите результат в списке меню.
  2. Перейдите на левую панель и разверните Политики ограниченного использования программ.
  3. Щелкните правой кнопкой мыши Дополнительные правила и выберите Новое правило хеширования вариант.
  4. Если вы не найдете способ расширить Политики ограниченного использования программ затем щелкните правой кнопкой мыши Политики ограниченного использования программ и выберите Новые политики ограниченного использования программ.

Если у вас не запускается редактор локальной групповой политики, то прочитайте эту статью

В окне New Has Rule нажмите на Просматривать вариант. Теперь откройте проводник с помощью клавиш Windows + E, введите следующий путь в адресной строке и нажмите Enter:

%SystemRoot%\system32\WindowsPowerShell\v1.0

Это позволит найти 32-разрядную версию PowerShell. Выберите из списка, а затем щелкните Открыть > Применить> ОК.

Отключить PowerShellISE

Если вы хотите отключить PowerShellISE на своем компьютере с Windows 10, выберите из списка powershell_ (вместо ).

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

Снова откройте проводник и скопируйте и вставьте путь, указанный ниже, в адресную строку. Затем нажмите клавишу Enter, чтобы выбрать 64-разрядную версию PowerShell.

%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0

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

Примечание: Вам нужно выбрать опцию powershell_, если вы хотите отключить PowerShellISE.

Затем нажмите Подать заявление а затем выберите Ok кнопка.

После выполнения вышеуказанных шагов перезагрузите компьютер, чтобы сохранить изменения. Это отключит доступ к Powershell на вашем ПК.

2] Отключить PowerShell в Windows 10 с помощью групповой политики

Редактор локальной групповой политики — это мощный инструмент, доступный в Windows 10 Pro или Enterprise, который упрощает несколько задач на ПК.

Читайте также:  Быстрый просмотр файлов в Проводнике Windows 10

Пользователи с версией Windows 10 Pro или Enterprise могут использовать инструмент групповой политики для блокировки PowerShell. Выполните следующие шаги, чтобы отключить PowerShell с помощью групповой политики:

  • Прежде всего, нажмите кнопки Windows + R сочетание клавиш, чтобы открыть диалоговое окно «Выполнить».
  • Введите и нажмите Enter.
  • В окне редактора локальной групповой политики перейдите по указанному ниже пути:

Конфигурация пользователя > Административные шаблоны > Система

  • Перейдите на правую панель и дважды щелкните значок Не запускать указанные приложения Windows политика.
  • На следующей странице нажмите на Включено, как показано на изображении выше. Затем перейдите в Опции разделов и нажмите на Показать.
  • Теперь вам нужно открыть новую ячейку, тип , и щелкните Ok. Это отключит доступ к PowerShell.
  • Вы также можете отключить интерфейс PowerShell ISE. Для этого откройте новую ячейку, введите powershell_ и нажмите кнопку ОК.
  • Однако, если вам нужно отключить PowerShell 7, введите в новой ячейке, а затем щелкните Ok.
  • Наконец, нажмите Применить > ОК чтобы сохранить изменения.

После завершения вышеуказанного процесса вы больше не сможете получить доступ к Powershell.

Отключить PowerShell 7 в Windows 10

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

  1. Щелкните правой кнопкой мыши кнопку Пуск
  2. Выберите «Параметры».
  3. В приложении «Настройки» выберите категорию «Приложения».
  4. Затем выберите Приложения и функции вариант на левой панели.
  5. Теперь перейдите на правую панель, прокрутите вниз и выберите приложение PowerShell.
  6. Нажмите кнопку «Удалить».
  7. Если Windows попросит вас подтвердить, нажмите кнопку Удалить еще раз.

Таким образом, вы можете отключить доступ пользователя к PowerShell версии 7.

Отладка сценариев

Break All

Break All (прервать всё) — очень полезная останавливающая работающий скрипт функция, дающая возможность перейти в отладчик и узнать как работает этот скрипт и каково текущее состояние переменных или других элементов. Поддержка была включена для консоли Windows PowerShell и ISE.

Чтобы использовать отладчик в сеансе консоли, нажмите Ctrl+Break

В Windows PowerShell ISE можно нажать Ctrl+B или, щёлкнуть в меню «Отладка» и выбрать команду «Break All».

Удалённое редактирование

В текущей Windows PowerShell ISE можно открывать и редактировать файл напрямую в удалённом сеансе Windows PowerShell. С помощью новой команды «PSEdit», вы можете непосредственно редактировать файлы как локально, так и в удалённых сеансах.

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

[Cloud01]: PS C:\> PSEdit C:\WinDemo\

При выполнении PSEdit, он откроет файл в ISE, где можно внести изменения, сохранить их на удалённый компьютер и повторно выполнить код.

Удалённая отладка

Расширяя возможности удалённого редактирования, вы теперь можете отлаживать запущенный на удалённом сеансе с ISE скрипт.

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

Пример кода удалённой отладки в Windows Powershell ISE

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

Предупреждение об останове в удалённом сеансе

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

Доступность удалённой отладки

Отладка сценариев

Если удалённая отладка доступна, вы можете подключиться к сеансу с помощью командлета Enter-PSSession, который подключит вас непосредственно к отладчику.

Удалённый отладчик в действии

Отладка фонового задания

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

Читайте также:  Изменение браузера по умолчанию в Windows 10.

Теперь, в Server 2016, Windows PowerShell вводит новый командлет Debug-Job, который даёт вам возможность отладить эти фоновые задания более эффективно. Следующий рисунок показывает использование этого командлета. Обратите внимание на то, как Debug-Job показывает вам линию и характеристики прерывания фоновой работы.

Командлет Debug-Job, выводящий сообщение об ошибке в фоновом задании

Чтобы добраться до этого состояния останова, можно воспользоваться тем же командлетом Set-PSBreakPoint или Wait-Debugger. Они используются для «приостановки» сценария и ввода отладчика. Вы можете ввести эти командлеты в свой скрипт, а затем проверить состояние задания. Так вы узнаете, столкнулся ли он с точкой останова и готова ли отладка. Рисунок ниже показывает пример этого.

Состояние фонового задания

Отладка Runspaces

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

Подробнее. Больше информации о Runspaces и его использовании на -use-of-powershell- runspaces-part-1/.

Следующий рисунок отображает создание Runspaces.

Создание Runspaces

Для отладки Runspaces вам необходимо получить его «ID», рисунок ниже показывает доступные runspaces, а затем ввести сеанс отладки с помощью командлета Debug-Runspace.

Отладка runspace

Первый runspace, ID 1, всегда исходный сеанс Windows PowerShell, в котором вы находитесь. Для более глубокого изучения runspacees в вашей среде, используйте предыдущие ссылки.

Другие вопросы по пользованию

У многих возникает вопрос, как узнать версию PowerShell? Для этого выполните следующее:

Другие вопросы по пользованию
  1. Откройте приложение.
  2. Введите $PSVersionTable.
  3. Если это ни к чему не привело, значит, у вас версия 1.0 — для неё есть команда $
  4. В ином случае появится подробная информация о том, какая версия приложения установлена на ПК.
Другие вопросы по пользованию

Ещё один вопрос, на который стоит дать ответ — как удалить PowerShell? Для этого потребуются такие действия:

Другие вопросы по пользованию
  • Зайдите через Панель управления в меню установки и удаления программ.
  • Найдите ветку Microsoft Windows
  • Удалите обновление для компонента WindowsPowerShell (TM), следуйте инструкциям системы.
Другие вопросы по пользованию

Теперь вы знаете всё о том, как писать и запускать скрипты PowerShell, сможете пользоваться такой командной строкой для многих операций в системе. Дополнительно вы всегда имеете возможность узнать версию этого продукта и даже частично удалить его — из-за того, что он установлен вместе с системными компонентами, полностью сделать это всё равно не получится. Посоветуем только быть аккуратным при выполнении всех подобных действий, чтобы не навредить компьютеру в целом.

Другие способы открыть PowerShell

Выше перечислены далеко не все способы открытия Windows PowerShell, но, уверен, что их будет вполне достаточно. Если же нет, то:

  • Можно найти PowerShell в меню пуск. Для запуска от администратора используйте контекстное меню. 
  • Можно запустить файл exe в папке C:\Windows\System32\WindowsPowerShell. Для прав администратора, аналогично, используем меню по правому щелчку мышью. 
  • Если ввести powershell в командной строке, также будет запущен нужный инструмент (но в интерфейсе командной строки). Если при этом командная строка была запущена от имени администратора, то и PowerShell будет работать от имени администратора. 

Также, бывает, спрашивают, а что такое PowerShell ISE и PowerShell x86, которые находятся, например, при использовании первого способа. Отвечаю: PowerShell ISE — «Интегрированная среда сценариев PowerShell». По сути, с её помощью можно выполнять все те же команды, но, помимо этого, в ней присутствуют дополнительные возможности, облегчающие работу со скриптами PowerShell (справка, инструменты отладки, цветовая разметка, дополнительные горячие клавиши и т.п.). В свою очередь версии x86 нужны в случае, если вы работаете с 32-битными объектами или с удаленной системой x86.

Поддержать автораПодписаться на новые статьи

А вдруг и это будет интересно:

  • Лучшие бесплатные программы для Windows
  • Нестандартные способы использования Android
  • Как изменить видеокарту по умолчанию для игр и программ в Windows 10
  • Как отключить обновление вкладок Google Chrome
  • Чёрный экран OBS Studio при записи экрана — причины и как исправить
  • Windows 10 не видит SSD — причины и способы исправить проблему
  • Как включить пароль BitLocker и почему после шифрования он может не запрашиваться
Читайте также:  Восстанавливаем загрузочную область (MBR) Windows XP

От командной строки до сценариев: следующие шаги

Как только вы почувствуете себя комфортно, сценарии — это вопрос ввода командлетов

в текстовом файле и сохраняя его. Если вы нервничаете из-за попыток написания сценариев, не надо Microsoft имеет огромное количество документации по каждому командлету. Это больше, чем уже длинная справочная документация, поэтому обязательно ознакомьтесь с Technet.

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

WinRM (WS-Management)

WinRM – это реализация открытого стандарта DMTF (Distributed Management Task Force) от Microsoft, которая позволяет управлять системами с помощью веб-служб. Углубляться в устройство технологии я не буду, а лишь кратко опишу, что необходимо для её использования.

Версия WinRM 1 и выше входит в состав операционных систем, начиная с Windows Vista и Windows Server 2008. Для Windows XP и Windows Server 2003 можно установить WinRM в виде отдельного пакета (см. ссылки).

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

winrm quickconfig

Чтобы winrm не спрашивал подтверждения, можно добавить к вызову ключ -quiet. Узнать информацию о более тонкой настройке можно посмотреть встроенную справку winrm:

winrm help config

Если на управляемом компьютере работает веб-сервер, WinRM никак ему не помешает, хоть и использует по умолчанию стандартные порты HTTP. Он будет перехватывать лишь подключения предназначенные специально для него.

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

  1. Настроить службу WinRM (Windows Remote Management)на автоматический запуск
  2. Настроить элемент групповой политики Computer Configuration \ Administrative Templates \ Windows Components \ Windows Remote Management (WinRM) \ WinRM Service \ Allow automatic configuration of listeners. Тут нужно указать диапазоны IP-адресов с которых разрешаются подключения.
  3. Разумеется, еще вам будет необходимо разрешить подключения на соответствующие порты (по умолчанию 80) в брандмауэре Windows.

Независимо от того используется ли порт HTTP (80) или HTTPS (443) трафик передаваемый WinRM шифруется (если конечно вы не отключите эту опцию). Для аутентификации по умолчанию используется протокол Kerberos.

Но хватит о настройках, лучше перейдем непосредственно к использованию. Хоть утилита winrm позволяет настраивать службу WinRM, а так же выполнять например WMI запросы, нам более интересна другая – winrs. Буквы RS тут означают Remote Shell. WinRS работает очень похоже на PsExec хотя и использует технологию WinRM. Имя компьютера задаётся ключом -r, а после него следует команда которую нужно выполнить. Вот несколько примеров:

winrs -r:Core

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

winrs -r:Core «dir c:\temp > c:\temp\»

Как и PsExec, утилита winrs позволяет открыть интерактивный сеанс на удалённом компьютере:

winrs -r:main

Эта функция аналогична telnet сессии, но использование winrs однозначно лучше telnet и даже PsExec, с точки зрения безопасности. Независимо от того используется ли порт HTTP (80) или HTTPS (443), трафик передаваемый WinRM шифруется (если конечно вы не отключите эту опцию). Для аутентификации по умолчанию используется протокол Kerberos.

Современная техника - портал Миникод