Пример 5
C:\PS>set-executionpolicy -scope CurrentUser -executionPolicy Undefined Описание ----------- Эта команда использует значение политики выполнения Undefined для эффективного удаления политики выполнения, заданной для области текущего пользователя. В результате политика выполнения, заданная в групповой политике или в области LocalMachine (все пользователи), является действующей. Если политику выполнения задать во всех областях как Undefined, а групповую политику не задавать, политика выполнения по умолчанию Restricted является действующей для всех пользователей компьютера.
Параметры
-Confirm
Запрос подтверждения перед выполнением командлета.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ExecutionPolicy
Указывает политику выполнения. Если групповые политики отсутствуют и политика выполнения каждой области имеет значение Undefined, то Restricted становится действующей политикой для всех пользователей.
Допустимые значения политики выполнения:
- AllSigned. Требует, чтобы все скрипты и файлы конфигурации были подписаны доверенным издателем, включая скрипты, написанные на локальном компьютере.
- Bypass. ничего не блокируется, и никакие предупреждения и запросы не появляются.
- Default. Задает политику выполнения по умолчанию. Ограничено для клиентов Windows или RemoteSigned для серверов Windows.
- RemoteSigned. Требует, чтобы все скрипты и файлы конфигурации, скачанные из Интернета, были подписаны доверенным издателем. Политика выполнения по умолчанию для компьютеров Windows Server.
- Restricted. Не загружает файлы конфигурации и не выполняет скрипты. Политика выполнения по умолчанию для клиентских компьютеров Windows.
- Undefined. Для области не задана политика выполнения. Удаляет назначенную политику выполнения из области, которая не задана групповая политика. Если политика выполнения во всех областях не определена, действующая политика выполнения ограничена.
- Unrestricted. Начиная с PowerShell 6.0, это политика выполнения по умолчанию для компьютеров, не относящихся к Windows, и ее нельзя изменить. загружает все файлы конфигурации и выполняет все скрипты. Если вы запускаете неподписанный скрипт, скачанный из Интернета, вам будет предложено ввести разрешение перед его выполнением.
Type: | ExecutionPolicy |
Accepted values: | AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted |
Position: | |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Force
Подавляет все запросы подтверждения
Соблюдайте осторожность с этим параметром, чтобы избежать непредвиденных результатов
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Scope
Указывает область, на которую влияет политика выполнения. Область по умолчанию — LocalMachine.
Действующая политика выполнения определяется порядком очередности следующим образом:
- MachinePolicy. Устанавливается групповая политика для всех пользователей компьютера.
- UserPolicy. Задается групповая политика для текущего пользователя компьютера.
- Процесс. Влияет только на текущий сеанс PowerShell.
- CurrentUser. Влияет только на текущего пользователя.
- LocalMachine. Область по умолчанию, затрагивающая всех пользователей компьютера.
Область «Процесс » влияет только на текущий сеанс PowerShell. Политика выполнения сохраняется в переменной среды , а не в реестре. При закрытии сеанса PowerShell переменная и значение удаляются.
Политики выполнения для области CurrentUser записываются в куст реестра HKEY_LOCAL_USER.
Политики выполнения для области LocalMachine записываются в HKEY_LOCAL_MACHINE куста реестра.
Type: | ExecutionPolicyScope |
Accepted values: | CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy |
Position: | 1 |
Default value: | LocalMachine |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-WhatIf
Показывает, что произойдет при запуске командлета. Командлет не выполняется.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Policy recommendation? It depends
If you plan on using PowerShell scripts at all, Restricted obviously is out of the running. I personally think RemoteSigned is a good compromise between functionality and security in a Windows AD domain environment. It allows you to write scripts internally and use them on domain systems without any friction, while still preventing unintentional execution of an outside script. AllSigned is a better option, but you need the PKI/certificate infrastructure in place as well as good policies and processes for signing and managing script code, which a lot of organizations are lacking.
Ultimately, only YOU can determine what the best default Execution Policy is for your environment (and prevent forest fires).
Управление политикой выполнения с помощью PowerShell
Чтобы получить действующую политику выполнения для текущего сеанса PowerShell, используйте командлет .
Следующая команда возвращает действующую политику выполнения:
Чтобы получить все политики выполнения, влияющие на текущий сеанс, и отобразить их в порядке приоритета:
Результат выглядит примерно так, как в следующем примере выходных данных:
В этом случае действующей политикой выполнения является RemoteSigned , так как политика выполнения для текущего пользователя имеет приоритет над политикой выполнения, установленной для локального компьютера.
Чтобы получить политику выполнения, заданную для определенной области, используйте Scope параметр .
Например, следующая команда получает политику выполнения для области CurrentUser :
Изменение политики выполнения
Чтобы изменить политику выполнения PowerShell на компьютере с Windows, используйте командлет . Изменение вступает в силу немедленно. Вам не нужно перезапускать PowerShell.
Если вы задали политику выполнения для областей LocalMachine или CurrentUser, изменение сохраняется в реестре и остается в действии до тех пор, пока вы не измените его снова.
Если вы задали политику выполнения для Process области, она не сохраняется в реестре. Политика выполнения сохраняется до закрытия текущего процесса и всех дочерних процессов.
Примечание
В Windows Vista и более поздних версиях Windows для выполнения команд, изменяющих политику выполнения для локального компьютера в области LocalMachine , запустите PowerShell с параметром Запуск от имени администратора .
Чтобы изменить политику выполнения, выполните следующие действия.
Пример:
Чтобы задать политику выполнения в определенной области, выполните следующие действия.
Пример:
Команда для изменения политики выполнения может быть успешной, но по-прежнему не изменить действующую политику выполнения.
Например, команда, которая задает политику выполнения для локального компьютера, может быть выполнена успешно, но переопределена политикой выполнения для текущего пользователя.
Удаление политики выполнения
Чтобы удалить политику выполнения для определенной области, задайте для нее значение Undefined.
Например, чтобы удалить политику выполнения для всех пользователей локального компьютера, выполните следующие действия.
Удаление политики выполнения для :Scope
Если политика выполнения не задана в какой-либо области, то действующей политикой выполнения является , которая используется Restrictedпо умолчанию для клиентов Windows.
Настройка другой политики для одного сеанса
Параметр ExecutionPolicy можно использовать для задания политики выполнения для нового сеанса PowerShell. Политика влияет только на текущий и дочерний сеансы.
Чтобы задать политику выполнения для нового сеанса, запустите PowerShell в командной строке, например Или из PowerShell, а затем используйте параметр ExecutionPolicy для установки политики выполнения.
Пример:
Заданная политика выполнения не хранится в реестре. Вместо этого он хранится в переменной среды. Переменная удаляется при закрытии сеанса, в котором задана политика. Изменить политику, изменив значение переменной, нельзя.
Во время сеанса политика выполнения, заданная для сеанса, имеет приоритет над политикой выполнения, заданной в реестре для локального компьютера или текущего пользователя. Однако она не имеет приоритета над политикой выполнения, заданной с помощью групповая политика.
The different PowerShell Execution Policies
PowerShell execution policies are several. They are set at different levels to control how the computer behaves with PowerShell scripts. Microsoft’s own documentation will give you a good picture of the different execution policies (or you can run Get-Help about_Execution_Policies to know more about these policies).
Note: At the moment of writing this article, PowerShell Execution Policies can be set only on Windows computers. PowerShell on non-Windows computers will still show the Execution-Policy-related cmdlets, but the policies set on non-Windows computers will have no effect on how PowerShell behaves on those computers.
Here is a gist of the different PowerShell execution policies and what they mean:
Restricted
PowerShell ships with Restricted set as the default execution policy, starting Windows Server 2012 (or Windows 8). Therefore, you cannot run a script right out of the box, unless you change the policy to something else before.
You can run individual commands on the PowerShell console, though. Even scripts written by you cannot run with this policy set on your computer.
AllSigned
This is the safest policy available, in case running scripts is permitted on the computer. With this policy set, your computer will run those PowerShell scripts that are accompanied by a valid signed with a valid digital signature (signed using a code signing certificate).
The certificate used to sign the script should be trusted by your computer. Otherwise, the script will not run. It also means that scripts that are tampered with after being digitally signed will not run either.
This condition also applies to scripts that you wrote, even on the computer that you are trying to run the script on.
This is a safe PowerShell Execution policy to set in any enterprise environment. The certificate could have been issued by your domain’s certification authority, or from an external certification authority like Verisign or Thawte.
RemoteSigned
This is also a safe PowerShell Execution policy to set in an enterprise environment. This policy dictates that any script that was not created on the system that the script is running on, should be signed. Therefore, this will allow you to write your own script and execute it. You would not be able to run a script that was downloaded from the Internet, or got from a friend who wrote it under his account or on a different computer. PowerShell differentiates between script you wrote on that computer, and a script that came from elsewhere using the file metadata.
Unrestricted
This policy is unsafe in any environment, and should be applied only when you know what you are doing. Also, keep in mind the scope at which you set this policy. More on this later in the post.
The Unrestricted Execution Policy lets you run PowerShell scripts without any restrictions.
Bypass
This policy is best avoided. This policy should be used only in those cases where you have an alternative authorization mechanism already in place, and you do not want PowerShell to interfere with the execution.
Undefined
Setting the Execution Policy to Undefined will remove policy restriction at the scope/level in/at which you run Set-ExecutionPolicy Undefined. However, remember that setting the Execution Policy to Undefined at all levels would lead PowerShell to set the machine policy as Restricted, which is the default.
Оператор &
Если необходимо указать полный путь к исполняемому файлу, то можно воспользоваться оператором & (оператор вызова). Он позволяет выполнить строку текста, указанную в кавычках, как единую команду. Например:
& ′C:Program FilesHello.exe′
Поскольку оператор & не анализирует передаваемую команду, то он не может интерпретировать ее параметры. Поэтому дополнительные параметрыаргументы передаются также в виде текста, в кавычках. Для примера возьмем предыдущую программу и немного изменим ее, так что она принимает нужный текст в виде аргумента:
& ′C:Program FilesHello.exe′ ′Hello, world′
При желании можно указать нескольких аргументов через запятую:
& ′C:Program FilesHello.exe′ ′Hello,′, ′ world′
Для удобства команду и аргументы можно поместить в переменные:
$exe = ′C:Program FilesHello.exe′$arg1 = ′Hello′$arg2 = ′world′& $exe $arg1 $arg2
Ну и если аргументов много, то их можно объединить, воспользовавшись такой конструкцией:
$exe = ′C:Program FilesHello.exe′$allargs = @(′Hello,′,′world′)& $exe $allargs
Работа со службами и процессами
PowerShell, конечно же, умеет управлять службами и процессами в Windows, для этого существуют такие командлеты как:
- Get-Process – выводит информацию о запущенных процессах на компьютере;
- Start-Process – запускает один или несколько процессов на компьютере;
- Stop-Process — останавливает один или несколько запущенных процессов;
- Get-Service – выводит информацию о службах;
- Restart-Service – перезапускает службу;
- Start-Service – запускает службу;
- Stop-Service — останавливает службу;
- Suspend-Service – приостанавливает работу службы;
- Set-Service – с помощью данного командлета можно изменить свойства службы, например, описание, отображаемое имя и режим запуска. Также его можно использовать для запуска, остановки или приостановки службы.
Setting Execution Policy with Group Policy
In a Windows domain setting, you likely don’t want to configure Execution Policy one machine at a time. You also don’t want someone with local Administrator rights on a computer to be able to change this setting. Luckily, there is a simple Group Policy setting that can be configured either at the Computer Configuration or User Configuration level.
- Make sure you have PowerShellExecutionPolicy.admx file loaded. This is installed out of the box with Windows Server 2008 R2 or later.
- For computers, in your GPO go to Computer Configuration\Administrative Templates\Windows Components\Windows PowerShell. (Remember, MachinePolicy has overall precedence).
- For users, in your GPO go to User Configuration\Administrative Templates\Windows Components\Windows PowerShell.
- The setting is called Turn on Script Execution. Potential settings and impact:
- Not Configured (default). No effect, PowerShell Execution Policy is set and enforced on the local computer.
- Disabled. Scripts won’t run. (Restricted)
-
Enabled. You can choose between three execution policies:
- Allow all scripts. (Unrestricted)
- Allow local scripts and remote signed scripts. (RemoteSigned)
- Allow only signed scripts. (AllSigned)
- Apply the updated GPO to computers or users for the settings to be enforced and run gpupdate for those computers/users.
Запуск скриптов
Создавать сценарии можно в любом текстовом редакторе (лучше остановиться на Win, Notepad++ или подобному, с поддержкой синтаксиса или проверки) либо в программе PowerShell ISE.
Последняя предоставляет удобный доступ к командлетам, возможности запуска, отладки и сохранения сценариев.
Предположим, что свой первый скрипт вы написали (это получение перечня запущенных процессов), сохранили через меню «Файл», и его нужно запустить. Делается это тремя путями:
1 Прописываем полный путь к скрипту в PowerShell (или ISE);
Рис. 11 – Запуск первого скрипта путём прописывания пути к нему
2 Через контекстное меню файла ps1;
Рис. 12 – Запуск сценария через его контекстное меню
3 Открываем сценарий в PowerShell ISE и жмём F
Рис. 13 – Запуск скриптов из окна PowerShell ISE
Важно, чтобы в пути к файлу отсутствовали пробелы!
PowerShell – мощное средство для упрощения выполнения рутинных операций в Windows 7, Server 2008 и более новых
Важное достоинство PowerShell – скрипты и наличие версии программы с графическим интерфейсом PS ISE. Команды в ней представлены в виде командлетов, что сделает возможным ознакомление с оболочкой и понимание смысла каждой команды
Политика безопасности не даст новичку навредить своему компьютеру полученными из неизвестных источников скриптами, а режим отладки, создание собственных командлетов, функций и механизм обработки ошибок открывают перед программистами и администраторами неограниченные возможности.
https://youtube.com/watch?v=fyWFIn4lF6c
How the RemoteSigned Policy Works
One particular scenario to point is how the RemoteSigned execution policy works. This execution policy (as you’ve learned) prevents scripts from running that have been created somewhere other than your local computer.
But how does PowerShell know the script was created elsewhere? Data streams.
Understanding and Querying NTFS Data Streams
Whenever you create a file on an NTFS file system, NTFS applies an alternate data stream (ADS) attribute to the file. An ADS has two file attributes: $Data and zone.Identifier. PowerShell uses the zone.Identifier attribute to identify whether a PowerShell script file created somewhere else.
Unlike other attributes like Compressed or Read Only, ADS attributes are hidden in File Explorer. But, by using PowerShell, you can inspect these data streams.
Run the cmdlet using the path to the script and the parameter as shown below. In this example, Hello World.ps1 was written on the local computer. Notice the only attribute assigned to the property is . There is no ADS attribute.
ADS Stream output for local file
Now, run the same command on a script downloaded from the Internet. Notice now returns another object completely with a of .
ADS Stream output for PowerShell file downloaded from internet
Once you know a file has an ADS, you can then use the command to discover the zone. The zone defines where the file came from.
will return a value which represents the zone the file came from.
Zone ID Value
Possible zone values are:
Описание
Командлет изменяет политики выполнения PowerShell для компьютеров Windows. Подробнее см. в разделе about_Execution_Policies.
Начиная с PowerShell 6.0 для компьютеров, не относящихся к Windows, политика выполнения по умолчанию является неограниченной и не может быть изменена. Командлет доступен, но PowerShell отображает сообщение консоли о том, что он не поддерживается.
Политика выполнения является частью стратегии безопасности PowerShell. Политики выполнения определяют, можно ли загружать файлы конфигурации, например профиль PowerShell, или запускать сценарии. А также указывает, должны ли скрипты быть подписаны цифровой подписью перед их выполнением.
Область командлета по умолчанию — LocalMachine, которая влияет на всех пользователей компьютера. Чтобы изменить политику выполнения для LocalMachine, запустите PowerShell с параметром Запуск от имени администратора.
Чтобы отобразить политики выполнения для каждой области в порядке очередности, используйте . Чтобы просмотреть действующую политику выполнения для сеанса PowerShell, используйте без параметров.
Set-Executionpolicy
Что бы изменять значение политик выполнения скриптов PowerShell, существует коммандлет Set-ExecutionPolicy.
Данный командлет имеет следующие параметры:
-ExecutionPolicy
Указывает значение политики. Может иметь следующие значения: Restricted, AllSigned, RemoteSigned, Unrestricted, Bypass, Undefined. Данный параметр обязательный для указания. Если не указан, во время выполнения комадлет попросит указать значения.
PowerShell
Set-ExecutionPolicy
1 | Set-ExecutionPolicy |
Вывод:Укажите значения для следующих параметров: ExecutionPolicy:
-Scope
Определяет область применения данной политики. Может иметь следующие значения: LocalMachine ,Process, CurrentUser. Если параметр области применения не указан, по умолчанию указывается значение LocalMachine.
PowerShell
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process
1 | Set-ExecutionPolicy-ExecutionPolicyUnrestricted-ScopeProcess |
или
PowerShell
Set-ExecutionPolicy Unrestricted Process
1 | Set-ExecutionPolicyUnrestricted Process |
-Force
С этим параметром командлет не будет требовать подтверждения со стороны пользователя.
Пример
PowerShell
Set-ExecutionPolicy Unrestricted Process -Force
1 | Set-ExecutionPolicyUnrestricted Process-Force |
Командлет ничего не выведет на экран и применит значение политики.
-Confirm
Если же вам наоборот мало одного подтверждения. Можно указать параметр Confirm и у вас будет ещё один, дополнительный, запрос на подтверждение ваших действий:
PowerShell
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process -confirm
1 | Set-ExecutionPolicy-ExecutionPolicyUnrestricted-ScopeProcess-confirm |
Результат выполнения:
Подтверждение Вы действительно хотите выполнить это действие? Выполнение операции «Set-ExecutionPolicy» над целевым объектом «Unrestricted». Да — Y Да для всех — A Нет — N Нет для всех — L Приостановить — S Справка (значением по умолчанию является «Y»):
Изменение политики выполнения Политика выполнения защищает компьютер от ненадежных сценариев. Изменение политики выполнения может поставить под угрозу безопасность системы, как описано в разделе справки, вызываемом командой about_Execution_Policies. Вы хотите изменить политику выполнения? Да — Y Нет — N Приостановить — S Справка (значением по умолчанию является «Y»):
-WhatIf
С параметром WhatIf командлет не выполняется. А выводит на консоль свои предполагаемые действия без данного параметра.
PowerShell
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process -WhatIf
1 | Set-ExecutionPolicy-ExecutionPolicyUnrestricted-ScopeProcess-WhatIf |
Результат выполниня:
WhatIf: Выполнение операции «Set-ExecutionPolicy» над целевым объектом «Unrestricted».