Long description
PowerShell includes Group Policy settings to help you define consistent
configuration values for Windows computers in an enterprise environment.
The PowerShell Group Policy settings are in the following Group Policy paths:
Group policy settings in the User Configuration path take precedence over Group
Policy settings in the Computer Configuration path.
PowerShell 7 includes Group Policy templates and an installation script in
.
Group Policy tools use administrative template files (, ) to
populate policy settings in the user interface. This allows administrators to
manage registry-based policy settings. The
script installs PowerShell Core Administrative Templates on the local
machine.
After installing the templates, you can edit these settings in the Group Policy
editor ().
The policies are as follows:
- Console session configuration: Sets a configuration endpoint in which
PowerShell is run. - Turn on Module Logging: Sets the LogPipelineExecutionDetails property of
modules. - Turn on PowerShell Script Block Logging: Enables detailed logging of all
PowerShell scripts. - Turn on Script Execution: Sets the PowerShell execution policy.
- Turn on PowerShell Transcription: enables capturing of input and output of
PowerShell commands into text-based transcripts. - Set the default source path for : Sets the source for Updatable
Help to a directory, not the Internet.
Each PowerShell Group Policy setting has an option (‘Use Windows PowerShell
Policy setting’ field) to use the value from a similar Windows PowerShell Group
Policy setting that is located in the following Group Policy paths:
Note
These PowerShell Core Administrative Templates do not include settings
for Windows PowerShell. For more information about acquiring other templates
and configuring Group policy, see
How to create and manage the Central Store for Group Policy Administrative Templates in Windows.
Можно ли запускать программы Windows на удаленном компьютере?
Для запуска программ на основе Windows на удаленных компьютерах можно использовать удаленные команды PowerShell.
Например, можно запустить или на удаленном компьютере.
Однако нельзя использовать команды PowerShell для открытия пользовательского интерфейса для любой программы на удаленном компьютере.
При запуске программы Windows на удаленном компьютере команда не завершается, и Командная строка PowerShell не возвращается, пока программа не будет завершена или пока не будет нажата клавиша CTRL + C для прерывания команды. Например, если запустить программу на удаленном компьютере, Командная строка не вернется, пока не завершится.
При использовании удаленных команд для запуска программы с пользовательским интерфейсом запускается процесс, но пользовательский интерфейс не отображается. Команда PowerShell не завершена, и Командная строка не будет возвращаться до тех пор, пока не будет остановлен процесс программы или пока не нажата клавиша CTRL + C, которая прерывает выполнение команды и останавливает процесс.
Например, если для запуска на удаленном компьютере используется команда PowerShell, процесс «Блокнот» запускается на удаленном компьютере, но пользовательский интерфейс блокнота не отображается. Чтобы прервать выполнение команды и восстановить командную строку, нажмите клавиши CTRL + C.
Учетная запись администратора
Второе решение ошибки «Запрошенная операция требует повышения», которое мы рассмотрим, это активация учётной записи администратора, встроенной в систему Windows, и выполнение нужных операций из под пользователя Администратор.
Данный способ не очень желателен, так как после входа в систему под учётной записью Администратор юзеру станет доступно большее количество функций и возможностей, которые, с одной стороны, абсолютно не нужны рядовым пользователям ПК, а с другой — могут навредить системе и её компонентам при бесконтрольном использовании.
Тем не менее, возможность активации встроенной учётной записи Администратор есть, и данную возможность нужно рассмотреть. Приведём три способа активации пользователя Супер Администратор.
Активация Администратора через утилиту Локальные пользователи и группы
Чтобы вызвать окно настроек пользователей, запускаем программу Выполнить из Пуск — Все программы — Стандартные — Выполнить (в Windows 10 утилита Выполнить находится в каталоге Служебные) либо одновременным нажатием кнопок Win и R и выполняем команду lusrmgr.msc (сокращённо от local user manager, что с английского и означает «управление локальными пользователями»)
В левой части открывшегося окна переходим в папку Пользователи, после чего в основной области окна находим пользователя Администратор, который будет помечен кружочком со стрелочкой, указывающей вниз. Эта иконка означает, что данная учётная запись отключена и находится в неактивном состоянии.
Щёлкаем по строчке Администратор правой кнопкой мышки и открываем Свойства записи. В окне Свойства: Администратор на вкладке Общие находим пункт Отключить учетную запись и снимаем у этого пункта флаг-галку. Нажимаем кнопку OK.
В дальнейшем для отключения встроенного администратора нужно будет просто снять галку в этом же месте.
Активация Администратора через утилиту Локальная политика безопасности
Для перехода к настройкам локальной политики безопасности компьютера также запускаем программу Выполнить из Пуск — Все программы — Стандартные — Выполнить (в Windows 10 утилита Выполнить находится в каталоге Служебные) либо одновременным нажатием кнопок Win и R и выполняем команду secpol.msc (от английского security policy — «политика безопасности»)
В открывшемся окне в левом древовидном списке параметров разворачиваем ветку Локальные политики и выделяем курсором пункт Параметры безопасности. Теперь в правой части окна находим пункт Учетные записи: Состояние учетной записи ‘Администратор’, щёлкаем по нему правой кнопкой мыши и переходим к Свойствам
В открывшемся окне на вкладке Параметры локальной безопасности активируем вариант Включен и нажимаем кнопку OK.
Для деактивации учётной записи администратора нужно, соответственно, переключить флаг-галку в положение Отключен.
Активация Администратора из командной строки
Последний способ активации встроенной в Windows учётной записи администратора, который мы рассмотрим, будет выполняться в командной строке. Ввиду необходимости работы с консолью Windows этот вариант не самый популярный, но, на самом деле, он даже быстрее двух предыдущих.
Для начала запускаем командную строку от имени администратора. Сделать это можно как привычным вызовом меню по правой кнопке мыши на ярлыке, так и следующим образом на примере Windows 10: правой кнопкой мышки нажимаем на кнопку Пуск в левом нижнем углу монитора и в открывшемся списке выбираем пункт Командная строка (администратор)
Далее в открывшемся окне консоли выполняем следующую команду:
net user Администратор /active:yes
В ответ мы должны получить уведомление от консоли о том, что Команда выполнена успешно. Если вместо этого командная строка отвечает, что «Не найдено имя пользователя. Для вызова дополнительной справки наберите NET HELPMSG 2221.», это означает, что мы используем версию операционной системы, предназначенную для другого языка.
В таком случае активируем администратора другой командой:
net user Administrator /active:yes
net user Администратор /active:no
net user Administrator /active:no
Далее, независимо от выбора способа активации пользователя Администратор, нам нужно перезагрузить компьютер. При запуске системы после перезагрузки нам будет предложено на выбор несколько пользователей для входа в ОС, среди которых выбираем активированную нами ранее запись Администратор.
Мы настоятельно рекомендуем вам входить в систему под администратором только в случаях возникновения необходимости, а в повседневной работе с ПК использовать свою учётную запись, пусть и наделённую правами администратора.
Можно ли запускать программы Windows на удаленном компьютере?
Для запуска программ на основе Windows на удаленных компьютерах можно использовать удаленные команды PowerShell.
Например, можно запустить или на удаленном компьютере.
Однако нельзя использовать команды PowerShell для открытия пользовательского интерфейса для любой программы на удаленном компьютере.
При запуске программы Windows на удаленном компьютере команда не завершается, и Командная строка PowerShell не возвращается, пока программа не будет завершена или пока не будет нажата клавиша CTRL + C для прерывания команды. Например, если запустить программу на удаленном компьютере, Командная строка не вернется, пока не завершится.
При использовании удаленных команд для запуска программы с пользовательским интерфейсом запускается процесс, но пользовательский интерфейс не отображается. Команда PowerShell не завершена, и Командная строка не будет возвращаться до тех пор, пока не будет остановлен процесс программы или пока не нажата клавиша CTRL + C, которая прерывает выполнение команды и останавливает процесс.
Например, если для запуска на удаленном компьютере используется команда PowerShell, процесс «Блокнот» запускается на удаленном компьютере, но пользовательский интерфейс блокнота не отображается. Чтобы прервать выполнение команды и восстановить командную строку, нажмите клавиши CTRL + C.
Turn on script execution
The Turn on Script Execution policy setting sets the execution policy for
computers and users, which determines which scripts are permitted to run.
If you enable the policy setting, you can select from among the following
policy settings.
-
Allow only signed scripts allows scripts to execute only if they are
signed by a trusted publisher. This policy setting is equivalent to the
AllSigned execution policy. -
Allow local scripts and remote signed scripts allows all local scripts to
run. Scripts that originate from the Internet must be signed by a trusted
publisher. This policy setting is equivalent to the RemoteSigned execution
policy. -
Allow all scripts allows all scripts to run. This policy setting is
equivalent to the Unrestricted execution policy.
If you disable this policy setting, no scripts are allowed to run. This policy
setting is equivalent to the Restricted execution policy.
If you disable or do not configure this policy setting, the execution policy
that is set for the computer or user by the cmdlet
determines whether scripts are permitted to run. The default value is
Restricted.
For more information, see about_Execution_Policies.
Подробное описание
В этом разделе описываются некоторые проблемы, которые могут возникнуть при использовании функций удаленного взаимодействия PowerShell, основанных на технологии WS-Management и предлагающих решения этих проблем.
Прежде чем использовать удаленное взаимодействие PowerShell, ознакомьтесь со статьей about_Remote и about_Remote_Requirements , где приведены рекомендации по настройке и базовому использованию. Кроме того, разделы справки по каждому из командлетов удаленного взаимодействия, в особенности описания параметров, содержат полезную информацию, которая поможет избежать проблем.
Примечание
Чтобы просмотреть или изменить параметры локального компьютера на диске WSMan:, включая изменения в конфигурациях сеансов, доверенных узлах, портах или прослушивателях, запустите PowerShell с параметром Запуск от имени администратора .
Execution policy scope
You can set an execution policy that is effective only in a particular scope.
The valid values for Scope are MachinePolicy, UserPolicy,
Process, CurrentUser, and LocalMachine. LocalMachine is the
default when setting an execution policy.
The Scope values are listed in precedence order. The policy that takes
precedence is effective in the current session, even if a more restrictive
policy was set at a lower level of precedence.
For more information, see Set-ExecutionPolicy.
Process
The Process scope only affects the current PowerShell session. The
execution policy is saved in the environment variable
, rather than the registry. When the
PowerShell session is closed, the variable and value are deleted.
LocalMachine
The execution policy affects all users on the current computer. It’s stored in
the HKEY_LOCAL_MACHINE registry subkey.
Обновление GPO через PSexec
Я вам очень часто рассказываю в своих примерах из моей практики, об утилите PSexec и сборнике SysInternals от Марка Руссиновича. Суть метода в том, что с помощью специальной утилиты вы сможете выполнить удаленную команду, ранее я так удаленно включал RDP на сервере или клиентской машинке.
Далее вы распаковываете архив, если он в таком виде и открываете папку с утилитами SysInternals в командной строке, напомню сделать, это можно через команду cd или через правый клик с зажатым Shift по нужной папке, выбрав пункт «Открыть окно команд».
Обращаю внимание, что у вас должны быть соблюдены несколько требований:
- Как и в случае Invoke-GPUpdate, вы должны изменить настройки брандмауэра на своих клиентах. Поскольку PsExec использует протокол SMB, вам нужно открыть TCP-порт 445. Как открыть порт я уже подробно рассказывал, можете посмотреть, советую использовать для этого групповую политику.
- Второе, это наличие прав на удаленном компьютере, чтобы запустить там Gpupdate
Теперь выполните команду:
Обратите внимание, что параметр -i здесь важен. Это гарантирует, что PsExec взаимодействует с удаленным рабочим столом, что необходимо для обновления пользовательских политик
Если этот параметр не указан, будут обновлены только конфигурации компьютера, хотя ни PsExec, ни gpupdate не выдадут сообщение об ошибке. Без параметра –i gpupdate обновит пользовательские настройки, только если вы вошли в систему с одинаковой учетной записью на исходном и целевом компьютере.
В результате будет удаленный запуск утилиты gpupdate, если все хорошо, то вы получите сообщение «gpupdate exited on svt2019s01.root.pyatilistnik.org with error code 0«.
на удаленном компьютере в журналах системы вы увидите два события 1500 и 1501.
Так же вы можете подключиться вообще к удаленной командной строке, через команду:
Далее просто пишите gpupdate /force, обратите внимание я через команду hostname показал, что подключение идет с одного компьютера на другой. Если компьютер не подключен к сети, вы получите следующее сообщение об ошибке:
Если компьютер не подключен к сети, вы получите следующее сообщение об ошибке:
Чтобы массово обновить групповую политику на всех компьютерах домена, воспользуйтесь знаком звездочки «*»:
Если это не помогло и выскочила ошибка, то может воспользоваться через PowerShell. В оболочке перейдите в каталог с утилитами PSTools и выполните:
Или можно из конкретного OU добавив
Другой вариант — сначала экспортировать все имена компьютеров из контейнера Active Directory в текстовый файл с помощью командлета Get-ADComputer:
Обратите внимание, что мы должны кодировать выходной файл с помощью ASCII, чтобы мы могли прочитать его содержимое из пакетного файла следующим образом:
PsExec против Invoke-GPUpdate
Основным недостатком метода PsExec является то, что он относительно медленный. Это может занять от 3 до 4 секунд на компьютер, а для компьютеров, которые не подключены к сети, это может занять еще больше времени. PsExec иногда даже зависал во время моих тестов.
Разрешение входящих подключений через порт 445 является угрозой безопасности. Компьютерные черви могут использовать этот порт, а хакеры могут делать много неприятных вещей с помощью PsExec. Открытие порта планировщика заданий для Invoke-GPUpdate также проблематично, но я думаю, что порт 445 более популярен среди программистов вредоносных программ.
Таким образом, в большинстве сценариев Invoke-GPUpdate является лучшим вариантом. Однако, если вы все равно открыли порт 445 по другим причинам и не хотите открывать порты Invoke-GPUpdate, вы можете предпочесть PsExec для принудительного обновления групповой политики.
Служба удаленного взаимодействия Windows PowerShell
Благодаря использованию протокола WS-Management служба удаленного взаимодействия Windows PowerShell позволяет запустить любую команду Windows PowerShell на одном или нескольких удаленных компьютерах. Вы можете устанавливать постоянные подключения, запускать интерактивные сеансы и выполнять скрипты на удаленных компьютерах.
Чтобы использовать службу удаленного взаимодействия Windows PowerShell, удаленный компьютер должен быть настроен для удаленного управления.
Дополнительные сведения, в том числе инструкции, см. в разделе about_Remote_Requirements.
После настройки службы удаленного взаимодействия Windows PowerShell вы получите доступ ко многим стратегиям удаленного взаимодействия.
В этой статье перечислены только некоторые из них. См. дополнительные сведения об удаленном взаимодействии.
Запуск интерактивного сеанса
Чтобы запустить интерактивный сеанс с одним удаленным компьютером, используйте командлет Enter-PSSession. Например, чтобы запустить интерактивный сеанс с удаленным компьютером Server01, введите:
В командной строке отобразится имя удаленного компьютера. Все команды, введенные в командной строке, запускаются на удаленном компьютере, а результаты отображаются на локальном компьютере.
Чтобы завершить интерактивный сеанс, введите:
См. дополнительные сведения о командлетах Enter-PSSession и Exit-PSSession:
- Enter-PSSession
- Exit-PSSession;
Выполнение удаленной команды
Чтобы выполнить команду на одном или нескольких компьютерах, используйте командлет Invoke-Command. Например, чтобы выполнить команду Get-UICulture на удаленных компьютерах Server01 и Server02, введите:
Выходные данные будут возвращены на ваш компьютер.
Запуск сценария
Чтобы запустить скрипт на одном или нескольких удаленных компьютерах, используйте параметр FilePath командлета . Сценарий должен быть включен или доступен для локального компьютера. Результаты будут возвращены на локальный компьютер.
Например, следующая команда выполняет скрипт DiskCollect.ps1 на удаленных компьютерах Server01 и Server02.
Установка постоянного подключения
Используйте командлет для создания постоянного сеанса на удаленном компьютере. В следующем примере создаются удаленные сеансы на удаленных компьютерах Server01 и Server02. Объекты сеанса хранятся в переменной .
После установки сеансов в них можно выполнить любую команду. Так как сеансы являются постоянными, вы можете собирать данные из одной команды и использовать их в другой.
Например, следующая команда выполняет команду Get-Hotfix в сеансах в переменной $s и сохраняет результаты в переменной $h. Переменная $h создается в каждом сеансе в переменной $s, но она не существует в локальном сеансе.
Теперь вы можете использовать данные в переменной с другими командами в том же сеансе. Результаты отобразятся на локальном компьютере. Пример:
Расширенная служба удаленного взаимодействия
Это и есть служба удаленного взаимодействия Windows PowerShell. Используя командлеты, установленные с Windows PowerShell, можно установить и настроить удаленные сеансы с локальных и удаленных компьютеров, создать настраиваемые и ограниченные сеансы, разрешить пользователям импортировать команды из удаленного сеанса, которые могут неявно выполняться в удаленном сеансе, настроить безопасность удаленного сеанса и многое другое.
Windows PowerShell включает поставщик WSMan. Поставщик создает диск , который позволяет перемещаться по иерархии параметров конфигурации на локальном и удаленном компьютерах.
См. дополнительные сведения о поставщике WSMan и командлетах WS-Management или введите команду в консоли Windows PowerShell.
Дополнительные сведения можно найти в разделе
- Вопросы и ответы об удаленном взаимодействии PowerShell
- Register-PSSessionConfiguration
- Import-PSSession
Справку по ошибкам службы удаленного взаимодействия см. в разделе about_Remote_Troubleshooting.
Используем Invoke-Command для параллельного запуска команд на нескольких компьютерах
Командлет Invoke-Command можно использовать для параллельного выполнения команд на нескольких удаленных компьютерах.
В самом просто случае имена компьютеров, на которых нужно выполнить команды указываются через запятую:
Invoke-Command server1, server2, server3 -ScriptBlock {get-date}
1 | Invoke-Command server1,server2,server3-ScriptBlock{get-date} |
Список компьютеров можно поместить в переменную (массив):
$servers = @(″server1″,″server2″,″server3″)
Invoke-Command -ScriptBlock { get-date} -ComputerName $servers
1 |
$servers=@(″server1″,″server2″,″server3″) Invoke-Command-ScriptBlock{get-date}-ComputerName$servers |
Или получить из текстового файла:
Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName(Get-Content c:\ps\servers.txt)
1 | Invoke-Command-ScriptBlock{Restart-Service spooler}-ComputerName(Get-Contentc\ps\servers.txt) |
Также можно получить список компьютеров в ADс помощью командлета Get-ADComputer из модуля AD PowerShell:
Чтобы выполнить команду на всех Windows Server в домене, исопльзуйте такой код:
$computers = (Get-ADComputer -Filter ‘operatingsystem -like «*Windows server*» -and enabled -eq «true»‘).Name
Invoke-Command -ComputerName $computers -ScriptBlock {get-date} -ErrorAction SilentlyContinue
1 |
$computers=(Get-ADComputer-Filter’operatingsystem -like «*Windows server*» -and enabled -eq «true»‘).Name Invoke-Command-ComputerName$computers-ScriptBlock{get-date}-ErrorAction SilentlyContinue |
Если компьютер выключен, или недоступен, благодаря параметру SilentlyContinue скрипт не будет остановлен и продолжит выполнение на других компьютерах.
Чтобы понять с какого компьютера получены результаты, нужно использовать специальную переменную окружения PSComputerName.
$results = Invoke-Command server1, server2, server3 -ScriptBlock {get-date}
$results | Select-Object PSComputerName, DateTime
1 |
$results=Invoke-Command server1,server2,server3-ScriptBlock{get-date} $results|Select-ObjectPSComputerName,DateTime |
При запуске команды через Invoke-Command на нескольких компьютерах она выполняется параллельно. В Invoke-Command есть ограничение на максимальное количество компьютеров, которыми можно управлять одновременно (ограничение на количество одновременных PSSession). Оно определяется параметром ThrottleLimit (по умолчанию 32). Если вам нужно выполнить команду одновременно более чем на 32 компьютерах (например, на 128), используйте параметр –ThrottleLimit 128 (но это вызывает повышенную нагрузку на ваш компьютер).
Для запуска команд на удаленных компьютерах через Invoke-Command в фоновом режиме используется специальный атрибут
–AsJob. В этом случае результат выполнения команды не возвращается в консоль. Чтобы получить результаты нужно использовать командлет
Receive-Job.
PowerShell execution policies
Enforcement of these policies only occurs on Windows platforms. The PowerShell
execution policies are as follows:
AllSigned
- Scripts can run.
- Requires that all scripts and configuration files be signed by a trusted
publisher, including scripts that you write on the local computer. - Prompts you before running scripts from publishers that you haven’t yet
classified as trusted or untrusted. - Risks running signed, but malicious, scripts.
Bypass
- Nothing is blocked and there are no warnings or prompts.
- This execution policy is designed for configurations in which a PowerShell
script is built in to a larger application or for configurations in which
PowerShell is the foundation for a program that has its own security model.
RemoteSigned
- The default execution policy for Windows server computers.
- Scripts can run.
- Requires a digital signature from a trusted publisher on scripts and
configuration files that are downloaded from the internet which includes
email and instant messaging programs. - Doesn’t require digital signatures on scripts that are written on the local
computer and not downloaded from the internet. - Runs scripts that are downloaded from the internet and not signed, if the
scripts are unblocked, such as by using the cmdlet. - Risks running unsigned scripts from sources other than the internet and
signed scripts that could be malicious.
Restricted
- The default execution policy for Windows client computers.
- Permits individual commands, but does not allow scripts.
- Prevents running of all script files, including formatting and configuration
files (), module script files (), and PowerShell profiles
().
Undefined
- There is no execution policy set in the current scope.
- If the execution policy in all scopes is Undefined, the effective
execution policy is Restricted for Windows clients and
RemoteSigned for Windows Server.
Unrestricted
- The default execution policy for non-Windows computers and cannot be
changed. - Unsigned scripts can run. There is a risk of running malicious scripts.
- Warns the user before running scripts and configuration files that are
not from the local intranet zone.
Note
On systems that do not distinguish Universal Naming Convention (UNC) paths
from internet paths, scripts that are identified by a UNC path might not be
permitted to run with the RemoteSigned execution policy.
Подробное описание
В PowerShell имеются групповая политика параметры, помогающие определить единообразные значения конфигурации для компьютеров Windows в корпоративной среде.
Параметры групповая политика PowerShell находятся в следующих групповая политика путях:
Параметры групповой политики в пути конфигурации пользователя имеют приоритет над параметрами групповая политика в пути конфигурации компьютера.
В PowerShell 7 предусмотрены шаблоны групповой политики и скрипт установки в .
Инструменты групповой политики используют файлы административных шаблонов (с расширениями , ) для заполнения параметров политики в пользовательском интерфейсе. Это позволяет администраторам управлять параметрами политики на основе реестра. Сценарий устанавливает PowerShell Core административные шаблоны на локальном компьютере.
После установки шаблонов эти параметры можно изменить в редакторе групповая политика ( ).
Существуют следующие политики.
- Конфигурация сеанса консоли — задает конечную точку конфигурации, в которой выполняется PowerShell.
- Включить ведение журнала модуля: задает свойство LogPipelineExecutionDetails модулей.
- «Включить регистрацию блоков сценариев PowerShell» — включает подробное ведение журнала всех скриптов PowerShell.
- «Включить выполнение сценариев» — задает политику выполнения PowerShell.
- «Включить транскрипции PowerShell» — включает запись входных и выходных данных команд PowerShell в виде текстовых расшифровок
- Задайте исходный путь по умолчанию для : задает для обновляемой справки каталог, а не Интернет.
Каждый параметр групповая политика PowerShell имеет параметр («использовать параметр политики Windows PowerShell») для использования значения из аналогичного параметра групповая политика Windows PowerShell, расположенного по следующим групповая политика путям:
Примечание
Эти Административные шаблоны PowerShell Core не включают параметры для Windows PowerShell. Дополнительные сведения о получении других шаблонов и настройке групповой политики см. в статье Создание центрального хранилища для групповая политика административные шаблоны в Windows и управление им.