Darbe.ru

Быт техника Дарби
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как запустить PowerShell в Windows 7 или Windows 10

Как запустить PowerShell в Windows 7 или Windows 10

Windows PowerShell – это мощный язык для написания скриптов, а также программа для Windows, которая эти скрипты выполняет. Язык был представлен в 2006 году как часть второго сервис-пака для операционной системы Windows XP.

С тех пор PowerShell присутствует во всех версиях Windows. В 2008 году была представлена вторая версия языка, она используется начиная с Windows 7. Скрипты на данном языке сохраняются в файлах с расширением PS1 и могут выполняться как знакомые всем BAT и CMD файлы.

В данной статье мы расскажем о том, как запустить Windows PowerShell с правами пользователя и от имени администратора в Windows 7 и Windows 10, а также как выполнять скрипты написанные на этом языке.

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

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

ввод команды powershell

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

поиск powershell в меню Пуск

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

Запуск PowerShell от имени администратора

Также поиск в меню «Пуск» — это самый простой способ запустить PowerShell от имени администратора. Для этого нужно воспользоваться поиском и когда программа будет найдена, кликнуть по ней правой кнопкой мышки. В открывшемся меню будет доступен вариант запуска от имени администратора. Данный способ запуска от имени администратора также доступен в Windows 7 и Windows 10

запуск powershell от имени администратора

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

запуск powershell через контекстное меню кнопки Пуск

Если же в этом меню вместо PowerShell у вас отображается обычная командная строка, то это можно исправить. Откройте меню «Параметры» (комбинация клавиш Win-i) и перейдите в раздел «Персонализация – Панель задач». Здесь нужно включить опцию, которая заменяет командную строку на PowerShell, после чего описанный выше способ будет работать.

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

Если вам нужно запустить PowerShell в сразу определенной папке, то в Windows 10 для этого нужно открыть эту папку при помощи проводника и нажать на кнопку «Файл» в левом верхнем углу окна. В результате появится меню с помощью которого можно будет запустить данную программу с правами пользователя или от имени администратора.

запуск PowerShell в папке

В операционной системе Windows 7 вы можете запустить PowerShell в папке при помощи адресной строки. Для этого откройте нужную папку и введите в адресную строку команду «powershell».

запуск PowerShell в папке с помощью адресной строки

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

PowerShell открыт в выбранной папке

Кстати, таким образом вы можете запускать и стандартную командную строку, но в этом случае нужно вводить «cmd».

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

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

  • Restricted / Ограниченный — режим по умолчанию, в нем запрещено выполнение скриптов, но можно использовать интерактивные команды.
  • All Signed / Все подписанные — режим разрешает выполнение всех подписанных издателем скриптов.
  • Remote Signed / Удаленные подписанные — режим разрешает выполнение локальных скриптов, но скачанные из интернета скрипты требуют наличия подписи.
  • Unrestricted / Неограниченный — режим разрешает запуск всех скриптов без ограничений, включая скачанные из интернета скрипты без подписи.

По умолчанию, используется режим Restricted или «Ограниченный». Поэтому если вам нужно запустить скрипт, то предварительно нужно выполнить команду «Set-ExecutionPolicy RemoteSigned -Scope Process» и нажать на клавишу «Y» для подтверждения. Данная команда разрешит выполнение удаленно подписанных скриптов для текущего сеанса.

разрешение на выполнение скриптов для текущего сеанса

После выполнения данной команды вы сможете запускать скрипты просто введя в консоль их полный адрес. Например, на скриншоте внизу мы выполнили скрипт «c:test.ps1».

выполнение скрипта powershell по адресу

Если вы хотите запустить скрипт из стандартной командной строки, то это можно сделать при помощи команды «powershell -executionpolicy RemoteSigned -file путь». Ниже мы приведем еще несколько вариантов запуска скриптов PowerShell, которые могут быть полезны в определенных ситуациях.

  • powershell -executionpolicy RemoteSigned -WindowStyle Hidden -file
  • Запуск скрипта в фоновом режиме (параметр -WindowStyle Hidden). Если добавить параметр -NonInteractive, то скрипт не будет задавать никаких вопросов и выполнится без участия пользователя.
  • powershell -executionpolicy RemoteSigned -file param1 param2 «text param»
  • Запуск скрипта c параметрами. Как видно, параметры передаются точно также как и в случае запуска обычных программ.
Читайте так же:
Горячие клавиши windows 8 полный список

запуск скрипта с помощью командной строки

Если же вы хотите навсегда разрешить запуск скриптов, то для этого нужно выполнить команду «Set-ExecutionPolicy RemoteSigned» и нажать на клавишу «Y» для подтверждения.

постоянное разрешение на выполнение скриптов powershell

Но, если ваш скрипт был скачан из интернета, то описанного выше варианта может быть недостаточно. Для того чтобы полностью и навсегда отключить любые предупреждения при запуске скриптов используйте «Set-ExecutionPolicy Bypass».

разрешение на выполнение скриптов powershell из интернета

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

15 способов обхода PowerShell Execution Policy

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

image

Автор: Scott Sutherland

По умолчанию PowerShell сконфигурирован на запрет выполнения скриптов в системах на базе ОС Windows. Подобные настройки могут затруднять работу админов, пентестеров и разработчиков, и в этой статье я расскажу о 15 способах обхода execution policy без использования прав локального администратора. Полагаю, что есть техники, которые не будут упомянуты из-за моей забывчивости или элементарного незнания, однако, надеюсь, нижеприведенный список будет хорошим стартом для тех, кто нуждается в нем.

Что такое PowerShell Execution Policy?

Execution policy определяет, какие типы скриптов могут быть запущены (если вообще могут) в системе. По умолчанию значение параметра выставлено как «Restricted», что запрещает запуск любых скриптов. Однако следует понимать, что настройка Execution Policy никогда не относилась к управлению безопасностью, а служила лишь для того, чтобы администраторы случайно не могли вывести систему из строя. Именно поэтому существует множество техник, чтобы обойти эти настройки, включая некоторые, предоставленные компанией Microsoft. Более подробно о Execution Policy и других настройках безопасности в PowerShell рекомендую почитать блог Карлоса Переса.

Зачем нужно обходить Execution Policy?

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

  • Встроен в Window.
  • Может вызывать Windows API.
  • Может запускать команды без записи на диск.
  • Может избегать обнаружения антивирусами.
  • Уже помечен как «достоверный» и находится в большинстве белых списков.
  • Используется при написании многих утилит безопасности с открытым исходным кодом.

Как посмотреть настройки Execution Policy

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

PS C:> Get-ExecutionPolicy

Рисунок 1: Результат выполнения команды в системе, где установлен запрет на запуск скриптов

Важно отметить, что Execution Policy может устанавливаться на различных уровнях системы. Чтобы посмотреть список уровней, используйте команду ниже (за более подробной информацией обращайтесь к соответствующей странице TechNet).

Get-ExecutionPolicy -List | Format-Table –AutoSize

Рисунок 2: Настройки Execution Policy на различных системных уровнях

Настройка тестовой среды

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

Write-Host "My voice is my passport, verify me."

При запуске скрипта в системе со стандартными настройками Execution Policy выводится следующая ошибка:

Рисунок 3: Ошибка, выводимая при запуске тестового скрипта в среде, где настрое запрет на запуск скриптов

Если ваша текущая политика разрешает запуск скриптов, поставить запрет (в целях тестирования) можно при помощи команды Set-ExecutionPolicy Restricted, запущенной из консоли администратора PowerShell. Ну, хорошо, достаточно пустой болтовни. Перейдем непосредственно к методам обхода запрета, установленного в Execution Policy.

1. Копирование скрипта непосредственно в интерактивную консоль PowerShell

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

Рисунок 4: Запуск скрипта при помощи копирования в интерактивную консоль

2. Отправка содержимого скрипта в стандартный поток ввода PowerShell

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

Echo Write-Host "My voice is my passport, verify me." | PowerShell.exe -noprofile —

Читайте так же:
Где найти совместимость на windows 7

Рисунок 5: Вывод содержимого скрипта в стандартный поток ввода

3. Чтение скрипта из файла и перенаправление содержимого в стандартный поток ввода PowerShell

Используйте стандартную команду «type» или PowerShell команду «Get-Content» для чтения содержимого скрипта с диска и перенаправьте полученный результат в стандартный поток ввода. Техника не влечет за собой изменения настроек, однако требует записи на диск. Чтобы избежать записи на диск, можно использовать сетевой общий ресурс (network share).

Пример 1: Использование PowerShell команды Get-Content

Get-Content .runme.ps1 | PowerShell.exe -noprofile —

Рисунок 6: Использование команды Get-Content

Пример 2: Использование команды Type

TYPE .runme.ps1 | PowerShell.exe -noprofile —

Рисунок 7: Использование команды Type

4. Загрузка скрипта из сети и запуск при помощи Invoke Expression

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

powershell -nop -c "iex(New-Object Net.WebClient).DownloadString(‘http://bit.ly/1kEgbuH’)"

Рисунок 8: Загрузка скрипта из интернета и запуск при помощи Invoke Expression

5. Использование параметра Command

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

Пример 1: Полная команда

Powershell -command "Write-Host ‘My voice is my passport, verify me.’"

Рисунок 9: Запуск скрипта при помощи полной версии параметра

Пример 2: Короткая команда

Powershell -c "Write-Host ‘My voice is my passport, verify me.’"

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

6. Использование параметра EncodeCommand

Метод схож с предыдущей техникой, но здесь все скрипты закодированы в строку Unicode. Кодирование скрипта позволяет избежать ошибок, возникающих при использовании параметра «Command». Техника не влечет за собой изменения настроек и не требует записи на диск. Пример ниже взят из Posh-SecMod. Та же утилита содержит хороший метод для уменьшения размера закодированных команд.

Пример 1: Полный вариант

$command = "Write-Host ‘My voice is my passport, verify me.’"
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -EncodedCommand $encodedCommand

Рисунок 10: Полный вариант команды

Пример 2: Сокращенный параметр

powershell.exe -Enc
VwByAGkAdABlAC0ASABvAHMAdAAgACcATQB5ACAAdgBvAGkAYwBlACAA
aQBzACAAbQB5ACAAcABhAHMAcwBwAG8AcgB0ACwAIAB2AGUAcgBpAGYAeQAgAG0AZQAuACcA

7. Использование команды Invoke-Command

Техника, найденная мной в блоге Obscuresec, используется через интерактивную консоль или в сочетании с параметром «Command». Главная особенность метода в том, что его можно использовать для запуска команд на удаленных системах, где разрешен запуск скриптов PowerShell. Техника не влечет за собой изменения настроек и не требует записи на диск.

Рисунок 11: Использование команды Invoke-Command

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

invoke-command -computername Server01 -scriptblock | set-executionpolicy -force

8. Использование команды Invoke-Expression

Как и в предыдущем случае, техника используется через интерактивную консоль или в сочетании с параметром «Command». Метод не влечет за собой изменения настроек и не требует записи на диск. Ниже показано несколько наиболее распространенных способов использования команды Invoke-Expression для обхода execution policy.

Пример 1: Полная версия команды Get-Content

Get-Content .runme.ps1 | Invoke-Expression

Рисунок 12: Полный вариант команды Get-Content

Пример 2: Сокращенный вариант Get-Content

GC .runme.ps1 | iex

9. Использование флага Bypass

Флаг добавлен разработчиками Microsoft для обхода execution policy при запуске скриптов из файлов. Microsoft заявляет, что при использование этого флага «ничего не блокируется и не выводится никаких предупреждений или сообщений». Техника не влечет за собой изменения настроек и не требует записи на диск.

PowerShell.exe -ExecutionPolicy Bypass -File .runme.ps1

Рисунок 13: Использование флага Bypass

10. Использование флага Unrestricted

Техника схожа с предыдущей. Хотя, при использовании флага Unrestricted Microsoft заявляет, что «загружаются все конфигурационные файла и запускаются все скрипты. Если вы запустите неподписанный скрипт, загруженные из интернета, появится сообщение с вопросом о подтверждении запуска». Метод не влечет за собой изменения настроек и не требует записи на диск.

PowerShell.exe -ExecutionPolicy UnRestricted -File .runme.ps1

Рисунок 14: Использование флага Unrestricted

11. Использование флага Remote-Signed

Создайте скрипт. Затем подпишите его, используя руководство, написанное Карлосом Пересом. Теперь запустите скрипт, используя команду ниже:

PowerShell.exe -ExecutionPolicy Remote-signed -File .runme.ps1

12. Запрет ExecutionPolicy путем выгрузки Authorization Manager

С этой техникой я столкнулся на сайте http://www.nivot.org. Функцию, указанную ниже, можно запустить через интерактивную консоль или в сочетании с параметром «command». После запуска будет в поле AuthorizationManager будет установлено значение null, в результате чего остаток сессии у execution policy будет статус unrestricted. Техника не влечет за собой постоянного изменения в настройках и не требует записи на диск. Хотя, в текущей сессии изменения будут.

Читайте так же:
Включение всех ядер процессора windows 10

function Disable-ExecutionPolicy <($ctx =
$executioncontext.gettype().getfield("_context","nonpublic,instance").getvalue(
$executioncontext)).gettype().getfield("_authorizationManager","nonpublic,instance").
setvalue($ctx, (new-object System.Management.Automation.AuthorizationManager "Microsoft.PowerShell"))>

Рисунок 15: Отключение Authorization Manager в текущей сессии

13. Установка Excution Policy для уровня Process

В начале статьи было сказано, что execution policy может быть применена к различным уровням (включая уровень process, на которым у вас есть контроль). Используя эту технику, execution policy может быть установлена в статус unrestricted во время сессии. Кроме того, метод не влечет за собой изменения в настройках и не требует записи на диск. Я нашел эту технику в блоге r007break.

Set-ExecutionPolicy Bypass -Scope Process

Рисунок 16: Установка статуса Unrestricted для уровня Process

14. Установка статуса Unrestricted для уровня CurrentUser при помощи команды

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

Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted

Рисунок 17: Установка статуса Unrestricted для уровня CurrentUser

15. Установка статуса Unrestricted для уровня CurrentUser через реестр

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

Рисунок 18: Выставление статуса для execution policy через реестр

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

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

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

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

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

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

Введение

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


powershell.exe

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


powershell_ise.exe

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Комментарии

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

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

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

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

Конвейер

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

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

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

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

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

Послесловие

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

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

Распространение и выполнение сценариев PowerShell с помощью System Center 2012 Configuration Manager

imageПосле создания скрипта для изменения строки подключения к RDS-ферме в RDP файлах пользователей нам нужно этот скрипт как-то доставить и выполнить на нескольких сотнях компьютеров. В этом непростом деле нам вновь поможет System Center 2012 Configuration Manager (SCCM).

Первым делом сохраним сценарий PowerShell в доступном сетевом расположении.

Перейдём к консоль SCCM и вызовем мастер создания пакета (Package). Присвоим имя создаваемому пакету, например “ KOM Package Change Server name On RDP ”. Укажем, что пакет имеет исходные файлы и укажем путь к каталогу с скриптом.

image

Следующий шаг оставим по умолчанию. Потому как нам необходима стандартная программа для выполнения на компьютерах.

image

Далее мастер переходит в меню создания программы, которая и будет разворачиваться на компьютерах. Присвоим программе имя, например “ KOM Program Change Server name On RDP ”

image

Так как выполнение программы подразумевает выполнение чего-либо в командной строке (CMD), нам необходимо указать вызов PowerShell с политикой выполнения скриптов RemoteSigned .

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

image

Так как в данной задаче нам необходимо изменить сервер подключения в RDP файлах на рабочем столе пользователей, указываем требование для запуска “Только после входа пользователя” и режим выполнения “Запустить с правами пользователя”.

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

Читайте так же:
Где находится брендмауэры windows 10

image

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

На этом создание программы закончено.

Распространим пакет по точкам распространения и развернём на необходимую коллекцию компьютеров.

Развёртывание выполняем с обязательным намерением.

image

В расписании создадим тип “Как можно скорее”.

image

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

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

image

Если в развёртывании пакетов что-то пойдёт не так, более детальную информацию можно всегда получить с клиентского лога execmrg.log (как правило расположен в каталоге %windir%CCMLogs ).
В данном примере, распространение и выполнение прошло успешно, но раз заговорили о клиентских логах, посмотрим что там:

image

С небольшого куска лога видно, какая команда будет запущена в контексте пользователя, видны идентификаторы развёртывания и пакета, также видно расположение контента. В завершении представленного куска лога мы видим, что выполнение команды завершается с кодом 0, т.е. без ошибки.

Такую доставку и выполнение выполнение PS/VBS скриптов с помощью SCCM мы находим более удобной, чем использование logon-скриптов в групповых политиках и причина тому – возможность мониторинга статуса выполнения задачи.

Завершение сценария в PowerShell

Я искал способ завершить сценарий PowerShell (PS1), когда в функции возникает неустранимая ошибка. Например:

конечно, нет такой вещи, как $host.Exit() . Есть $host.SetShouldExit() , но это фактически закрывает окно консоли, что не то, что я хочу. Мне нужно что-то эквивалентное Python sys.exit() это просто остановит выполнение текущего скрипта без дальнейшего прощания.

Edit: Да, это просто exit . Да.

10 ответов

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

TL; DR большинство людей захотят использовать Exit для завершения запущенных сценариев. Однако, если ваш сценарий просто объявляя функции, которые позже будут использоваться в оболочке, вы захотите использовать Return в определениях указанных функций.

выход vs возвращение vs перерыв

выход: это будет «выход» из текущего контекста. Если вы вызовете эту команду из скрипта, она выйдет из скрипта. Если вы вызовете эту команду из оболочки, она выйдет из оболочки.

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

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

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

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

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

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

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