Включение выполнения сценариев PowerShell

Содержание:

Урок 1. Начало работы с командлетами AppFabric для Windows PowerShell

Включение выполнения сценариев PowerShell

  • 12/05/2011
  • Время чтения: 3 мин

Время выполнения: 15 минут

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

Задача: в этом занятии будет загружена среда ApplicationServer module for Windows PowerShell и включено выполнение сценариев для Windows PowerShell. В этом учебном курсе следует использовать одну и ту же консоль Windows PowerShell во всех оставшихся занятиях.

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

Перед следующим шагом обратите внимание на следующие требования:

  • Система AppFabric должна быть уже установлена.
  • Необходима возможность запустить Windows PowerShell от имени учетной записи администратора.

Процедура

В этом занятии будут выполнены следующие шаги:

  1. запуск сеанса Windows PowerShell с учетными данными администратора;

  2. разрешение выполнения сценариев Windows PowerShell;

  3. загрузка ApplicationServer module for Windows PowerShell.

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

  1. Программа Powershell.exe расположена в каталоге C:WindowsSystem32WindowsPowerShellv1.0. Откройте его в проводнике или найдите в средстве поиска, нажав кнопку Пуск и введя powershell.exe в поле поиска.

  2. Щелкните правой кнопкой мыши программу powershell.exe и выберите пункт Запуск от имени администратора.

  3. После запуска окна сеанса Windows PowerShell щелкните правой кнопкой мыши заголовок и выберите пункт Свойства.

  4. В окне Свойства Windows PowerShell убедитесь, что выбран режим Выделение мышью, и нажмите кнопку ОК.

Включение выполнения сценариев в Windows PowerShell

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

  1. Выполните следующую команду в окне Windows PowerShell для разрешения выполнения локальных неподписанных сценариев в Windows PowerShell.

    Set-ExecutionPolicy –ExecutionPolicy RemoteSigned –Scope Process

  2. В ответ на приглашение подтвердить изменение политики выполнения введите Y и нажмите клавишу ВВОД.

  3. Для проверки включения выполнения локальных сценариев выполните следующую команду в среде Windows PowerShell.

    Get-ExecutionPolicy

    Среда Windows PowerShell должна описать политику выполнения как RemoteSigned.

Параметр –Scope Process гарантирует, что политика активна только в текущем процессе Windows PowerShell и всех создаваемых дочерних процессах. Задание политики выполнения Windows PowerShell как RemoteSigned с помощью приведенной выше команды приводит к активации следующей политики для текущего сеанса Windows PowerShell:

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

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

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

Дополнительные сведения о политиках выполнения в Windows PowerShell 2.0 см. в разделе about_execution_policies; также можно выполнить следующую команду.

Get-help about_execution_policies

Загрузка модуля Windows PowerShell для AppFabric

  1. Выполните следующую команду, чтобы загрузить ApplicationServer module for Windows PowerShell с помощью командлета Import-Module для Windows PowerShell.

    Import-Module ApplicationServer

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

  2. Чтобы убедиться в том, что ApplicationServer module for Windows PowerShell загружается правильно, выполните следующую команду в окне Windows PowerShell.

    Get-Command –Module ApplicationServer

    Результатом этой команды должно быть перечисление всех команд, предоставляемых ApplicationServer module for Windows PowerShell, в виде таблицы.

занятия

В этом занятии среда Windows PowerShell была запущена с административными учетными данными, чтобы включить выполнение сценариев для последующих занятий. Также была загружена среда ApplicationServer module for Windows PowerShell и выполнена проверка команд, предоставляемых модулем. Эти команды будут использоваться в этом учебном курсе для настройки приложения «Служба заказов», наблюдения за ним и управления им.

Дальнейшие действия

В разделе Урок 2. Развертывание приложения службы заказов с помощью Windows PowerShell описано построение и развертывание проектов службы Order Service с помощью Windows PowerShell.

Основные понятия

Урок 2. Развертывание приложения службы заказов с помощью Windows PowerShell
Урок 3. Настройка службы заказов с помощью Windows PowerShell
Урок 4. Наблюдение за службой заказов с помощью Windows PowerShell
Урок 5. Отслеживание рабочего процесса с помощью Windows PowerShell

  2011-12-05

Создание и выполнение сценариев — Configuration Manager

  • 04/10/2018
  • Время чтения: 21 мин
  • Соавторы

Область применения: System Center Configuration Manager (Current Branch)Applies to: System Center Configuration Manager (Current Branch)

В System Center Configuration Manager имеется интегрированная возможность выполнения сценариев PowerShell. System Center Configuration Manager has an integrated ability to run Powershell scripts. PowerShell позволяет создавать сложные автоматизированные сценарии, которые могут применяться в рамках большого сообщества.

Powershell has the benefit of creating sophisticated, automated scripts that are understood and shared with a larger community. Скрипты упрощают создание специальных инструментов для администрирования программного обеспечения, а также ускоряют выполнение повседневных задач, позволяя вам быстрее справляться с большим объемом работы и обеспечивать более согласованный результат.

The scripts simplify building custom tools to administer software and let you accomplish mundane tasks quickly, allowing you to get large jobs done more easily and more consistently.

Совет

Эта функция появилась в версии 1706 на стадии предварительного выпуска.This feature was first introduced in version 1706 as a pre-release feature. Начиная с версии 1802 она больше не считается функцией предварительного выпуска.Beginning with version 1802, this feature is no longer a pre-release feature.

Благодаря такой интеграции в System Center Configuration Manager вы можете использовать функцию Выполнение сценариев в следующих целях:With this integration in System Center Configuration Manager, you can use the Run Scripts functionality to do the following things:

  • Создание и редактирование скриптов для использования с System Center Configuration Manager.Create and edit scripts for use with System Center Configuration Manager.
  • Управление использованием скриптов с помощью ролей и областей безопасности.Manage script usage through roles and security scopes.
  • Выполнение сценариев для коллекций или отдельных локальных управляемых компьютеров Windows.Run scripts on collections or individual on-premises managed Windows PCs.
  • Быстрое получение объединенных результатов сценария с клиентских устройств.Get rapid aggregated script results from client devices.
  • Мониторинг выполнения сценария и просмотр результатов выходных данных сценария.Monitor script execution and view reporting results from script output.

Предупреждение

Учитывая все возможности, которыми обладают сценарии, мы напоминаем, что применять их нужно с определенной долей осторожности и только в тех случаях, когда это оправдано.Given the power of scripts, we remind you to be intentional and careful with their usage. Чтобы помочь вам, мы предусмотрели дополнительные меры предосторожности — разделили роли и области.

We have built in additional safeguards to assist you; segregated roles and scopes. Обязательно проверяйте точность сценариев перед запуском, а также убедитесь, что они поступили из надежного источника, чтобы предотвратить выполнение непредусмотренного сценария.

Be sure to validate the accuracy of scripts before running them and confirm they are from a trusted source, to prevent unintended script execution. Учитывайте наличие символов национального алфавита или других обфускаций, а также изучайте аспекты обеспечения безопасности для сценариев.

Be mindful of extended characters or other obfuscation and educate yourself about securing scripts. Дополнительные сведения о безопасности сценариев PowerShellLearn more about PowerShell script security

Готовность к установкеPrerequisites

  • Для запуска скриптов PowerShell на клиенте должна быть запущена оболочка PowerShell версии 3.0 или более поздней.To run PowerShell scripts, the client must be running PowerShell version 3.0 or later. Если сам сценарий содержит функциональные возможности, добавленные в более поздних версиях PowerShell, на клиенте, где этот сценарий выполняется, должна быть установлена соответствующая версия PowerShell.However, if a script you run contains functionality from a later version of PowerShell, the client on which you run the script must be running that version of PowerShell.
  • На клиентах Configuration Manager должен работать клиент версии 1706 или более поздней, чтобы выполнять сценарии.Configuration Manager clients must be running the client from the 1706 release, or later in order to run scripts.
  • Чтобы использовать скрипты, необходимо быть членом соответствующей роли безопасности Configuration Manager.To use scripts, you must be a member of the appropriate Configuration Manager security role.
  • Чтобы импортировать или создавать сценарии, нужна учетная запись с разрешениями на созданиесценариев SMS.To import and author scripts — Your account must have Create permissions for SMS Scripts.
  • Чтобы утверждать или отклонять сценарии, нужна учетная запись с разрешениями на утверждениесценариев SMS.To approve or deny scripts — Your account must have Approve permissions for SMS Scripts.
  • Чтобы выполнять сценарии, нужна учетная запись с разрешениями на выполнение сценариев для коллекций.To run scripts — Your account must have Run Script permissions for Collections.

Дополнительные сведения о ролях безопасности Configuration Manager см. в следующих статьях.

For more information about Configuration Manager security roles:
Области безопасности для выполнения сценариевSecurity scopes for run scripts
Роли безопасности для выполнения сценариевSecurity roles for run scripts
Основы ролевого администрированияFundamentals of role-based administration.

ОграниченияLimitations

Сейчас функция выполнения сценариев поддерживает следующее:Run Scripts currently supports:

  • Языки скриптов: PowerShellScripting languages: PowerShell
  • Типы параметров: integer, string и list.Parameter types: integer, string, and list.

Предупреждение

Имейте в виду, что при использовании параметров открывается контактная зона для возможных атак путем внедрения кода PowerShell.Be aware that when using parameters, it opens a surface area for potential PowerShell injection attack risk. Существуют различные способы устранения атак и решения проблем. Например, можно использовать регулярные выражения для проверки входных параметров или использовать предопределенные параметры.

There are various ways to mitigate and work around, such as using regular expressions to validate parameter input or using predefined parameters. Рекомендуется не включать секреты в сценарии PowerShell (не применять пароли и т. д.).Common best practice is not to include to secrets in your PowerShell scripts (no passwords, etc.).

Дополнительные сведения о безопасности сценариев PowerShell Learn more about PowerShell script security

Функция выполнения сценариев использует концепцию авторов сценариев и утверждающих сценариев в качестве отдельных ролей для реализации и выполнения сценария.Run Scripts uses the concept of script authors and script approvers as separate roles for implementation and execution of a script. Разделение этих ролей позволяет осуществлять важные функциональные проверки.

Having the author and approver roles separated allows for an important process check for the powerful tool that Run Scripts is. Дополнительная роль средств выполнения сценариев, которая разрешает выполнение сценариев, но запрещает их создание или утверждение, отсутствует.There is an additional script runners role that allows execution of scripts, but not creation or approval of scripts. См.

раздел Создание ролей безопасности для сценариев.See Create security roles for scripts.

Управление ролями сценариевScripts roles control

По умолчанию пользователь не может утверждать созданные им скрипты.By default, users cannot approve a script they have authored. Благодаря мощи и гибкости скриптов, а также возможности их развертывания на множестве устройств вы можете делегировать создание и утверждение скриптов разным людям.

Because scripts are powerful, versatile, and potentially deployed to many devices, you can separate the roles between the person that authors the script and the person that approves the script. Эти роли предоставляют дополнительный уровень защиты от бесконтрольного выполнения скриптов.These roles give an additional level of security against running a script without oversight.

Для упрощения тестирования дополнительный уровень утверждения можно отключить.You are able to turn off secondary approval, for ease of testing.

Утверждение или отклонение сценарияApprove or Deny a script

Прежде чем сценарий можно будет запустить, его должен утвердить пользователь с ролью утверждающего сценария.Scripts must be approved, by the script approver role, before they can be run. Чтобы утвердить скрипт, выполните следующее.To approve a script:

  1. В консоли Configuration Manager щелкните Библиотека программного обеспечения.In the Configuration Manager console, click Software Library.
  2. В рабочей области Библиотека программного обеспечения щелкните Скрипты.In the Software Library workspace, click Scripts.
  3. В списке Скрипт выберите нужный скрипт для утверждения или отклонения, затем щелкните Утвердить или отклонить на вкладке в группе Скрипт.In the Script list, choose the script you want to approve or deny and then, on the Home tab, in the Script group, click Approve/Deny.
  4. В диалоговом окне Утверждение или запрет сценария выберите действие Утвердить или Отклонить.In the Approve or deny script dialog box, select Approve, or Deny

Написание и запуск скриптов в PowerShell

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

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

Если вы не являетесь знатоком в подобной тематике, только начинаете изучение командных строк и действий, доступных к выполнению в них, вам будет полезно узнать ответы на главные вопросы по пользованию таким приложением. Например, как запустить Windows PowerShell ISE Windows 10 и писать, работать со скриптами.

Как открыть PowerShell?

Это можно сделать несколькими следующими способами:

  • Через Пуск — вы найдёте приложение в общем списке компонентов под буквой W.
  • При помощи поиска в Панели задач — откройте её, и введите слово PowerShell для поиска.
  • Используя меню «Выполнить» — запустите его через комбинацию Win+R и напишите название утилиты, после чего она будет найдена в системе.
  • В коммандере задайте действие PowerShell — но, вы должны знать, что будете работать с приложением через уже запущенную строку, а не в отдельном окне.
  • В параметрах Windows выберите «Свойства панели задач» и меню «Пуск». Во вкладке «Навигация» поставьте флажок на строке «Заменить командную строку оболочкой PowerShell…». Теперь вы сможете включать утилиту комбинацией Win+X.

Как писать и запускать скрипты?

Как создать скрипт PowerShell и запустить его? Это можно попросту сделать в блокноте — используя его, укажите в новом документе необходимые вам команды. После сохраните его, но поменяйте формат на .ps1 — именно такое расширение имеют файлы этой системной утилиты.

Писать скрипты в самом приложении можно так:

  • Запустите его.
  • Нажмите на пункт «Создать».
  • Или кликните на «Файл», и в появившемся списке выберите «Создать».
  • Напишите все команды, которые нужно выполнить, сохраните файл.

Скрипты ещё можно писать и редактировать в FAR Manager, но их нельзя использовать непосредственно в таком приложении, ведь оно отображает файлы этого типа через стандартную строку cmd. Однако прочие действия выполняются таким же образом, как и в «родной» утилите.

Запустить скрипт вы сможете таким образом:

  1. Зайдите в PowerShell от имени администратора.
  2. При помощи команд cd укажите месторасположение требуемого файла. Например, e: cd cd work . имя_файла. Ps1, или e: work имя_файла.ps1
  3. В этом случае e: — имя жёсткого диска, где находится файл.
  4. Жмите Enter.

Программа обязательно покажет вам сообщение с текстом «Не удаётся загрузить файл ___ .Ps1, так как выполнение скриптов запрещено для этой системы…», когда вы будете первый раз запускать команду. Дело в том, что Windows оснащён защитой от вмешательства благодаря разработчикам, поэтому никто из пользователей по умолчанию не имеет доступа на выполнение таких действий. Но, это ограничение можно очень просто обойти.

Как? В тексте, возникающем вместе с ошибкой, будет рекомендация ввести команду get-help about_signing, чтобы получить больше информации. Вы можете выполнить эти указания, или использовать комбинацию Set-ExecutionPolicy remotesigned — после её ввода потребуется подтверждение, и ограничение будет снято.

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

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

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

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

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

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

Запуск скриптов PowerShell

PowerShell — это новая командная оболочка для Windows, которая по задумкам Microsoft должна вытеснить и заменить cmd. По-умолчанию, эта оболочка уже идет в составе Windows 7 и выше. Если у вас более старая операционная система или вы просто хотите скачать более свежую версию PowerShell, сделать это можно здесь: https://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx

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

Есть несколько различных способов запуска скрипта, ниже приведены основные:

  1. Запустить оболочку PowerShell и в ней запустить скрипт (ввести путь до файла и имя файла, например, так: C:Scriptstest.ps1, или перейти в папку скрипта командой cd C:Scripts и запустить его командой .test.ps1)Оболочку можно найти и запустить множеством способов. Один из способов — через меню «Пуск». Для Windows 7 — нужно зайти во «Все программы» — «Стандартные» — «Windows PowerShell» и запустить оболочку «Windows PowerShell». Для Windows 10 — нужно найти группу на букву «W» и в ней вы найдете «Windows PowerShell».
  2. Запустить «Интегрированную среду сценариев Windows PowerShell ISE» — это программа — среда разработки, позволяющая редактировать и отлаживать скрипты PowerShell, которая так же есть по-умолчанию вместе с самим PowerShell. Запустив ее, нужно просто нажать кнопку «Открыть» или зайти в меню Файл — Открыть и выбрать нужный скрипт, затем нажать F5 или кнопку «Выполнить скрипт».Найти Windows PowerShell ISE можно там же, где и оболочку PowerShell — в меню «Пуск».
  3. Запустить стандартную коммандную строку и в ней написать:
    powershell -file (пример: powershell -file myscript.ps1)

Если вы раньше не запускали скрипты PowerShell, то скорее всего, вы получите сообщение: Не удается загрузить файл , так как выполнение скриптов запрещено для данной системы. Введите «get-help about_signing» для получения дополнительных сведений. Связано это с тем, что из соображений безопасности и недопущения случайного выполнения вредоносного кода, все скрипты должны быть подписаны цифровой подписью.

Как разрешить выполнение неподписанного скрипта PowerShell?

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

Set-ExecutionPolicy RemoteSigned -Scope Process

2. При запуске из стандартной коммандной строки использовать параметр -executionpolicy, т.е. запускать скрипт так:

powershell -executionpolicy RemoteSigned -file

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

3. Разрешить запуск навсегда: запустить оболочку PowerShell от имени «Администратора», затем выполните команду:

Set-ExecutionPolicy RemoteSigned

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

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

Как запустить скрипт PowerShell в фоновом режиме?

Для этого достаточно использовать параметр запуска -WindowStyle, который может принимать значения: Normal, Minimized, Maximized и Hidden. Таким образом, чтобы запустить неподписанный скрипт в фоновом режиме, нужно выполнить команду:

powershell -executionpolicy RemoteSigned -WindowStyle Hidden -file

Так же можно еще при желании добавить -NonInteractive, чтобы скрипт не задавал никаких вопросов. Таким образом, скрипт выполнится незаметно для пользователя. Будmте внимательны, используя такой способ.

Запуск скрипта PowerShell c параметрами

Собственно запуск нужно делать как если бы вы запускали обычную программу или bat-файл с параметрами. Например, для запуска скрипта с параметрами из командной, можно написать такую команду:

powershell -executionpolicy RemoteSigned -file param1 param2 «еще один текстовый параметр»

В самом скрипте вы можете получить эти параметры так:

param ($var1, $var2, $var3) echo $var1, $var2, $var3

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

Как запустить скрипт PowerShell с помощью ярлыка?

Осуществить такую задачу можно двумя способами:

  1. Создать bat/cmd файл, в котором прописать команду для запуска скрипта (с параметрами вы ознакомились выше)
  2. Создать ярлык на PowerShell, который можно найти в папке c:WindowsSystem32WindowsPowerShellv и в свойствах ярлыка в поле «Объект» дописать необходимые параметры.

Таким образом, например, чтобы запустить скрипт powershell при входе пользователя, можно просто создать ярлык, как описано во 2-м пункте и поместить его в автозагрузку. Так же, создание ярлыка одним из способов выше позволит легко запустить скрипт от имени администратора или от имени любого другого пользователя как обычную программу.

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

Включение выполнения сценариев PowerShell

Защита сценариев PowerShell

09.04.2012 Роберт Шелдон

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

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

  • сформировать политику выполнения PowerShell;
  • создать сертификат X.509;
  • удостоверять сценарии цифровой подписью.

.

Формирование политики выполнения

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

  • Restricted: файлы конфигурации PowerShell не загружаются и сценарии не выполняются. Этот обеспечивающий самые жесткие ограничения параметр применяется по умолчанию. В результате после того, как вы установили PowerShell, непреднамеренное выполнение сценариев, а также загрузка данных конфигурации исключаются. В то же время вы можете выполнять отдельные команды с консоли PowerShell.
  • AllSigned: все сценарии и файлы конфигурации должны быть удостоверены цифровой подписью пользующегося доверием издателя. Для подписи сценария вы должны задействовать сертификат подписи кода. Как будет показано ниже, такой сертификат можно создать самостоятельно.
  • RemoteSigned: все сценарии и файлы конфигурации, загруженные из Интернета, должны быть удостоверены цифровой подписью. Однако сценарии, хранящиеся на вашем компьютере, могут выполняться, а локальные файлы конфигурации загружаться и в том случае, если они не имеют цифровой подписи.
  • Unrestricted: выполняются все сценарии и загружаются все файлы конфигурации. Этот вариант связан с наименьшими ограничениями и, следовательно, сопряжен с наибольшим риском.

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

Set-ExecutionPolicy AllSigned

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

Для получения более подробных сведений о составных командах Set-ExecutionPolicy и Get-ExecutionPolicy обратитесь к файлам справочно-консультационной системы PowerShell.

Сведения о файлах конфигурации (то есть о файлах профилей) можно найти в статье «Windows PowerShell Profiles», которая размещена в сети MSDN (http://msdn.microsoft.com/en-us/library/bb613488(VS.85).aspx).

Создание сертификата X.509

Если для политики выполнения указан параметр AllSigned, это значит, что вы должны подписывать свои файлы; иначе говоря, вам необходим сертификат подписи кода X.509. X.509 — криптографический стандарт, определяющий формат для таких связанных с обеспечением безопасности устройств, как сертификаты открытых ключей и списки отозванных сертификатов.

Вы можете либо приобрести сертификат X.509, выпущенный общедоступным удостоверяющим центром, либо создать собственный удостоверяющий центр и сертификат. Полное описание стандарта X.509 и общедоступных центров сертификации не относится напрямую к теме данной статьи.

Однако я объясню, как вы можете создать собственный локальный удостоверяющий центр и сертификат.

Чтобы создать удостоверяющий центр и сертификат на локальном компьютере, вы можете воспользоваться утилитой Makecert, входящей в состав комплекта Microsoft.NET Framework SDK.

Кроме того, утилита прилагается к пакетам Microsoft Visual Studio 2008 и Visual Studio 2005. Отметим, впрочем, что программа Makecert предназначена только для целей тестирования.

Для создания центров сертификации и сертификатов в производственной среде необходимо задействовать инфраструктуру открытых ключей, например Microsoft Certificate Services.

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

makecert -n «CN=PowerShell CA» ` -eku 1.3.6.1.5.5.7.3.3-r ` -sv PowerShellCA.p PowerShellCA.cer ` -ss Root -a sha1

Эта команда включает ряд параметров. В приведенной таблице содержится их краткое описание.

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

Подробную информацию об этих, а также о других параметрах можно найти на сайте .NET Framework Development Center сети MSDN (http://msdn.microsoft.com/en-us/library/bfsktky3(VS.80).aspx). Следует отметить, что для запуска команды в приведенном примере я добавил к переменной среды Path system путь к каталогу, где размещается утилита Makecert.

При запуске данной команды открывается диалоговое окно Create Private Key Password (экран 1) с предложением ввести пароль.

Экран 1. Диалоговое окно Create Private Key Password

После того как вы дважды введете пароль и нажмете кнопку ОК, на экране появится диалоговое окно Enter Private Key Password (экран 2) с предложением ввести пароль, который вы только что указали в диалоговом окне Create Private Key Password.

Экран 2. Диалоговое окно Enter Private Key Password

Когда вы нажмете ОК, на экране появится окно сообщения Security Warning (подобное показанному на экране 3), содержащее предупреждение о том, что вы собираетесь установить удостоверяющий центр PowerShell CA.

Экран 3. Окно сообщения Security Warning

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

Следующий после формирования центра сертификации шаг — создание с помощью утилиты Makecert фактического сертификата, пригодного для подписи сценариев. Ниже приводится команда для создания сертификата PowerShell Certificate, авторизованного удостоверяющим центром PowerShell CA:

makecert -n «CN=PowerShell Certificate» ` -eku 1.3.6.1.5.5.7.3.3-pe ` -iv PowerShellCA.p ` -ic PowerShellCA.cer -ss My -a sha1

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

Надо отметить, что параметру -ss (который определяет хранилище сертификатов) я задал значение My, а не значение Root, которое было использовано мною при создании центра сертификации. Значение My указывает на то, что сертификат будет размещен в хранилище сертификатов папки Personal хранилища Current User.

Хранилище Current User используется по умолчанию. Вы также можете задействовать параметр -sr LocalMachine, чтобы поместить сертификат в хранилище сертификатов Local Computer.

Когда вы запускаете команду Makecert с целью создания сертификата, система опять предлагает ввести пароль. Речь идет о пароле закрытого ключа, который вы установили, создавая удостоверяющий центр. Затем создается сертификат в хранилище Trusted Root Certification Authorities текущего пользователя.

Просматривать сертификат можно в окне оснастки Certificates консоли Microsoft Management Console (MMC; см. экран 4).

Экран 4. Оснастка MMC Certificates

Обратите внимание, что PowerShell Certificate отображается в правой панели окна MMC. Для просмотра деталей сертификата дважды щелкните на нем, чтобы открыть диалоговое окно Certificate.

Если оснастка Certificates не представлена в существующем средстве управления, придется добавить ее к консоли MMC. Информацию о том, как это делается, можно найти в статье Microsoft «How To Create Custom MMC Snap-in Tools Using Microsoft Management Console» (http://support.microsoft.com/kb/230263).

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

Заверение сценариев PowerShell подписью

Заверение сценария подписью — процесс достаточно простой. Нужно взять составную команду Set-AuthenticodeSignature и указать подлежащий заверению сценарный файл, а также сертификат подписи кода, который будет использоваться для заверения файла. Например, вы хотите заверить сценарный файл C:AuditSecurityAudit.ps1, представленный во фрагменте A листинга. Этот сценарий выводит 20 последних событий, перечисленных в журнале безопасности.

Следующие инструкции сначала указывают сценарный файл и сертификат, а затем выполняют составную команду Set-AuthenticodeSignature:

$file = «C:AuditSecurityAudit.ps1» $cert = Get-ChildItem cert:CurrentUserMy ` -CodeSigningCertSet-AuthenticodeSignature $file $cert

В первой инструкции я назначаю полное имя файла в виде строки переменной $file. Во второй инструкции я использую команду Get-ChildItem для считывания сертификата подписи кода из хранилища сертификатов и присваиваю его переменной $cert. Чтобы считать сертификат, я указываю в качестве маршрута cert:CurrentUserMy.

Префикс cert: — это накопитель, используемый для обращения к хранилищу сертификатов. Далее следует CurrentUser, указывающий на каталог внутри хранилища сертификатов. Параметр My указывает на сертификаты, находящиеся в папке Personal.

При использовании составной команды Get-ChildItem для считывания сертификата необходимо также включать параметр-переключатель -CodeSigningCert для считывания только тех сертификатов, которые имеют санкцию на подпись кода.

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

Один из способов это сделать состоит в том, чтобы добавить индекс объекта после имени переменной. К примеру, при вызове первого сертификата подписи кода нужно употребить ссылку $cert [0], при вызове второго сертификата — ссылку $cert [1] и т. д.

Но если вы знаете, что имеется только один сертификат подписи кода, индексы в квадратных скобках включать не следует.

Запуск PowerShell скриптов по расписанию

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

Итак, предположим, у меня есть скрипт start.ps1, который мне необходимо запускать ежедневно в течении 10 дней. Есть два способа решить эту задачу.

Способ 1

Для запуска скрипта воспользуемся оснасткой Task Scheduler, он же планировщик заданий. Найти его можно в разделе Administrative Tools, либо нажав Win+R и введя команду taskschd.msc. Открываем планировщик и в разделе Actions выбираем пункт Create Task.

На вкладке General указываем имя и описание задания, а также (по необходимости) пользователя, от имени которого задание будет запускаться. Для того, чтобы задание выполнялось вне зависимости от того, залогинен ли пользователь в системе, выбираем опцию «Run whether user is logged on or not». Если для выполнения задания требуется повышение привилегий, то отмечаем опцию «Run with highest privileges».

Далее идем на вкладку Triggers и создаем новый триггер, в котором будет храниться расписание запуска нашего задания. В поле Start указываем дату и время запуска, а в поле Expire — дату и время завершения задания. Указываем выполнять задание ежедневно (Daily) и задаем период повтора (Recur every) 1 день.

Примечание. Если вы хотите запускать задание чаще, чем раз в день, то надо выбрать одноразовое выполнение (One time), а в разделе Advanced settings отметить пункт Repeat task every и указать время повторения, минимум 5 минут, максимум 1 час. Если этого недостаточно, то дополнительно в поле Delay task for up to можно указать временную задержку.

И основное. Переходим на вкладку Action и указываем действие для запланированного задания. Напомню, что в целях безопасности PowerShell скрипты могут выполняться только интерактивно, то есть сначала надо запустить оболочку PowerShell и уже в ней указать путь к скрипту. Поэтому в поле «Action» указываем запуск powershell.exe, а в поле «Add Arguments» параметр -File и путь к нашему скрипту, вот так:

-File ″C:Scriptsstart.ps1″

Также в поле аргументы можно указать:

-Command — выполняет указанные команды и любые другие параметры. Этот параметр тоже можно использовать для запуска скрипта, например: -Command ″& {C:Scriptsstart.ps1}″. Кроме того, с его помощью можно передавать в скрипт параметры: -Command ″& {C:Scriptsstart.ps1 -a 1 -b 3}″;
-ExecutionPolicy — задает политику выполнения скриптов для текущего сеанса, может принимать значения Unrestricted, RemoteSigned, AllSigned и Restricted.

Заданная политика будет действовать только в текущем сеансе и имеет приоритет над любыми ранее созданными политиками;
-NonInteractive — отключить вывод интерактивных запросов к пользователю;
-WindowStyle Hidden — запуск окна PowerShell в скрытом режиме, незаметно для пользователя;
-NoProfile — предотвращает загрузку профиля, что может несколько ускорить выполнение скрипта;
-NoExit — оставить оболочку открытой после отработки скрипта.

Это может понадобиться при проверке и отладке скрипта.

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

Способ 2

В PowerShell 3.0 появился новый функционал Sheduled Job, дающий возможность создавать запланированные задания прямо из консоли, не пользуясь оснасткой планировщика. Воспользуемся им для планового запуска нашего скрипта.

Сначала создаем расписание запуска (ежедневно в полпятого вечера, в течении 10 дней):

$t = New-JobTrigger -Daily -At 4:30PM -DaysInterval 10

Затем сохраняем в переменной учетные данные:

$cred = Get-Credential contosoadministrator

В качестве опции указываем запуск задания с повышенными привилегиями:

$o = New-ScheduledJobOption -RunElevated

И регистрируем задание с именем Start:

Register-ScheduledJob -Name Start -FilePath C:Scriptsstart.ps1 -Trigger $t -Credential $cred -ScheduledJobOption $o

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

Примечание.  Для каждого запланированного задания PowerShell в директории %systemdrive%Users%username%AppDataLocalMicrosoftWindowsPowerShellScheduledJobs создается одноименная папка.

В этой папке находится само задание в XML-файле и папка Output, в которой, в подпапках по времени выполнения, хранится история выполнения задания — результат выполнения (файлs Result.xml) и статус задания (Status.xml).

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

Execution Policy

В заключение напомню об одном немаловажном моменте, а именно о политике выполнения скриптов Execution Policy. Посмотреть текущее значение политики можно командой Get-ExecutionPolicy. Политика выполнения может иметь значения:

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

• Bypass — ничего не блокируется, никакие предупреждения и запросы не появляются.

Дорогие читатели, если вы увидели ошибку или опечатку в статье «Включение выполнения сценариев PowerShell», помогите нам ее исправить! Выделите ошибку и нажмите одновременно клавиши «Ctrl» и «Enter». Мы получим ваше сообщение и внесём исправления в ближайшее время.

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