The command gpupdate /force
is used to force the update of group policies that are applied by your company. Changes made in the Group Policy are not applied immediately but after 90 mins by default (with a ~30 min offset to spread the load). By using the GPUpdate command we can force the update.
Group Policies are used to change security settings and for system management (like deploying printers or mapping network drives). For troubleshooting IT problems, it’s sometimes necessary to update the group policy manually.
- Press Windows key + X or right-click on the start menu
- Select Windows PowerShell or Command Prompt
- Type gpupdate /force and press enter
Wait for the Computer and User policy to update
- Reboot your computer
A reboot is necessary to be sure that all settings are applied.
GPUpdate vs GPUpdate Force command
The gpupdate /force command is probably the most used group policy update command. When you use the /force
switch, all the policy settings are reapplied. For most use cases this is perfectly fine, but keep in mind, when you have a lot of group policies objects (GPO) or in a large environment, using the /force will put a huge load on the domain controllers.
If you have a large tenant or a lot of GPO’s, then it’s better to only run gpupdate without the /force
switch to apply new policy settings. This will get only the changes or new group policies, reducing the load on the client and domain controllers.
# Reapply all policies gpupdate /force # Get only the changed / new group policies gpupdate
Update only user or computer group policies
If you have a large environment or need to update the group policies on a lot of computers at the same time, then it can be useful to only update what is needed. This will reduce the load on the domain controllers and it’s of course faster.
To do this you can use the /target
switch. This allows you to update only the user or computer GPO’s.
# Update only the user policies gpupdate /target:user # Update only the computer policies gpupdate /target:computer
Automatically reboot or logoff after GPUpdate
Not all policy changes are applied immidiately. Due to Fast Boot, for example, are some settings only applied when the users logs in on the computer. Some settings even require a reboot to be applied.
With the use of the /logoff
or /boot
switch, we can let gpupdate figure out if a logoff or reboot is necessary. To be clear, if you run gpupdate /boot, then the computer will only reboot if a policy change requires it. Otherwise, the policy will be applied immediately without the reboot.
- GPUpdate /logoff is needed for example after policy changes in the Active Directory like folder redirections or printers. Changes in the AD are only applied when the user logs in on the computer.
- GPUpdate /boot is for example needed when you create Software Distribution changes.
Run GPUpdate on a Remote Computer
Sometimes you may need to update quickly the group policies on multiple computers because you changed the internet proxy settings or maybe to replace a printer for example. There are couple of ways to run GPUpdate on a remote computer
Using the Group Policy Management Console
You can initiate a group policy update on a whole OU with the Group Policy Management Console. It has to be an OU with only computer objects in it, so you can’t use the method on a user OU. Simply right-click on the OU where you have changed a policy and click on Group Policy Update
This will update the user and computer policies on all the computers in the given organization unit. The nice thing is that it will as for confirmation and show you how many computers are going to be updated.
After you have confirmed the update the policies will be updated and you can see the status of each computer. In this example 5 computers where turned off, so the update failed.
Use PowerShell to run GPUpdate on a Remote Computer
We can also use PowerShell to run gpupdate on remote computers. The only requirement is that you have Windows 2012 or later. Running it from Windows 10 is also possible, but then you need to open the PowerShell windows with a domain admin account.
The basis of the command is the Invoke-GPUpdate cmd. We also need to specify the computer and the RansomDelayInMinutes.
The RandomDelayInMinutes is used to lower the network load when you update a lot of computers at the same time. You can set it between 0 and 44640 minutes (31 days). Use 0 to run the update immediately.
Invoke-GPUpdate -Computer "labrat01" -RandomDelayInMinutes 0 -Force
If a user is logged on at the computer, then the Invoke-GPupdate command will ask the user for confirmation. By using the -force
switch we can run the updates without the confirmation.
With this, we can create a small script to target all computers in a specific OU and run GPupdate on them.
# Spread the load by setting the delay to between 1 and 30 minutes $random = Get-Random -Minimum 1 -Maximum 30 # Get the computers in an OU to update and run GPUpdate Get-AdComputer -SearchBase "OU=Computers,OU=Lab,DC=lazyadmin,DC=com" -Filter * | ForEach-Object -Proces {Invoke-GPUpdate -Computer $_.Name -RandomDelayInMinutes $random -Force}
Or if you want to use a list of computers:
# Based on a list $computers = "labpc01,labpc02,labpc03" $computers | ForEach-Object -Proces {Invoke-GPUpdate -Computer $_ -RandomDelayInMinutes $random -Force}
Wrapping Up
I hope this article helped you with the GPUpdate /force command. If you have any questions, then just drop a comment below.
Администраторы Windows долгое время полагались на такие проверенные временем инструменты командной строки как PING, IPCONFIG и REPADMIN. И некоторые до сих пор ими пользуются, вместо того, чтобы обратить свое внимание на PowerShell. Ashley McGlone, Premier Field Engineer Active Directory and PowerShell (именно его улыбающееся лицо вы можете видеть на фото), создал замечательное 4-страничное руководство, которое соотносит хорошо известные CMD-утилиты для работы с Active Directory с соответствующими им PowerShell-командлетами. Например, вместо PING можно использовать PowerShell командлет Test-Connection, вместо NSLOOKUP — Resolve-DNSName, вместо GPUPDATE — Invoke-GPUpdate.
Многие зададут вопрос, а почему это, собственно, стоит вообще переключаться на PowerShell командлеты? Автор руководства дает тому несколько обоснований:
- Инструменты командной строки выводят просто текст, который требует парсинга для дальнейшей работы с ним. PowerShell позволяет передать эти данные по конвейеру и работать с ними прямо в консоли или же вывести в файл.
- Доступность команды. Например, вы удаленно подключайтесь к серверу через RDP, то на нем может быть не установлен adminpak.msi или Windows Rerource Kit. А PowerShell есть на каждой машине Windows Sever 2008 R2 и выше.
- Однотипный синтаксис. Синтаксис у различных PowerShell командлетов схож.
- Большое количество командлетов на все случаи жизни.
Рассмотренные CMD-утилиты и соответствующие им PowerShell командлеты
В фокусе бесплатного руководства оказались следующие CMD-утилиты:
- REPADMIN
- DCPROMO
- CSVDE
- NETDOM
- NLTEST
- GPUPDATE
- GPRESULT
- DSGET
- DSQUERY
- DSADD
- DSMOD
- DSRM
- DSMOVE
- DSACLS
- DNSCMD
- NSLOOKUP
- PING
- IPCONFIG
- NETSTAT
Само руководство построено на следующей логике:
CMD – Switch – PowerShell командлет – PowerShell модуль – Версия Windows Server.
Большое внимание уделено тем командлетам, которые были представлены в Windows Server 2012 и PowerShell v3.
Скачать его можно на technet.
Интерпретатор командной строки (Command Line Interpreter, или CMD) и PowerShell — это приложения, используемые для прямого взаимодействия с операционной системой Windows. На первый взгляд у них много общего, но в этом тексте мы сконцентрируемся на ключевых отличиях командной строки CMD и PowerShell.
Что из себя представляет командная строка Windows?
Интерпретатор командной строки (более распространенное название — командная строка Windows) — это командная оболочка, которая появилась впервые в MS-DOS 1980-х годов. Она позволяла пользователю взаимодействовать с операционной системой (ОС) напрямую.
Так, данная командная оболочка предоставляет среду для запуска приложений и различных утилит — выходные данные отображаются в том же окне. Командную строку можно использовать для создания и редактирования сценариев и сохранения их в пакетных файлах, для решения задач автоматизации в рамках одной системы.
Как открыть командную строку CMD
Прежде чем проводить сравнение Windows PowerShell и CMD, хорошо бы понять, где их найти и как с ними взаимодействовать.
Существует несколько способов открыть интерфейс командной строки. Классический метод — через поисковую строку, введя в ней слова cmd или командная строка.
Для большинства этот способ быстрее и удобнее, но существует и другая возможность получить доступ к cmd.exe:
- Комбинацией клавиш win+r открыть меню выполнения.
- Ввести в открывшееся меню команду cmd.
Также можно вручную открыть cmd.exe из его исходного местоположения: C:\Windows\system32\cmd.exe.
Для взаимодействия с ОС в командной строке нужно ввести команду и ее параметр.
Например, чтобы проверить соединение с удаленным хостом вводим:
ping -r google.com
Где ping — команда, -r — параметр команды, google.com — адрес удаленного хоста.
После этого командная строка выполняет введенную команду и реализует задачу или функцию, для которой она предназначена в Windows.
Команды должны быть введены в Command Prompt без ошибок. Неправильный синтаксис или написание могут привести к сбою команды или, что еще хуже, к выполнению неправильной команды или правильной команды неправильным способом. Если ввести команду без параметров, вы увидите подсказку с возможными параметрами:
Теперь мы можем перейти к PowerShell.
Что такое PowerShell Windows
PowerShell — это более продвинутая версия CMD. Кросс-платформенное решение для автоматизации задач, состоящее из оболочки командной строки, языка сценариев и структуры управления конфигурацией.
Подробнее о PowerShell читайте здесь →
Ключевым отличием от CMD, заметным на старте работы, являются командлеты — упрощенные команды, используемые в среде PowerShell. Назначение команды PowerShell довольно легко интерпретировать по названию: они следуют простой закономерности — за глаголом идет существительное.
Сравним:
- Команда CMD: ping
- Командлет PowerShell: Test-Connection
Командлеты помогают управлять инфраструктурой Windows. Кроме того, они позволяют обычному пользователю получить удаленный доступ к реестру, файловой системе и пространству Windows Management Instrumentation (WMI) на системах.
Как современная командная оболочка PowerShell включает в себя лучшие функции других популярных оболочек. В отличие от большинства оболочек, которые принимают и возвращают только текст, PowerShell принимает и возвращает объекты .NET. Это программная платформа, в которой исполняются программы. Таким образом, нет необходимости разбирать текст для извлечения информации из выходных данных.
Как язык сценариев PowerShell обычно используется для автоматизации управления системами, позволяет создавать сложные сценарии с множеством условий. Он также используется для сборки, тестирования и развертывания решений, часто в средах CI/CD.
Открыть shell, как и командную строку, можно через поисковую строку и через меню выполнения, вписав в обоих случаях PowerShell. Также, в зависимости от версии операционной системы его можно найти в Power User Menu. Открывается оно комбинацией клавиш win+x или нажатием правой кнопки мыши на значок Windows.
Зачем PowerShell обычному пользователю
Разница PowerShell и CMD заключается в их использовании. Последний используется в основном для выполнения пакетных команд, устранения некоторых первичных неполадок. PowerShell, в свою очередь, может использоваться как для выполнения пакетных команд, так и для административных целей.
Важной является возможность создания сценариев (скриптов) — текстовых файлов, содержащих всего одну или целый набор команд PowerShell.
В качестве примера создадим простой выводящий текст сценарий, который состоит из одной команды:
- Создаем файл сценария (с расширением ps1), в котором будут прописаны команды:
2. В окне PowerShell вводим & и путь к необходимому файлу:
Теперь давайте разберем, как выполнять простое взаимодействие с системой при помощи CMD и PowerShell.
Как получить помощь?
Первым делом необходимо узнать, какие команды вообще существуют. Это можно узнать, запросив помощь у самого приложения.
В командной строке Windows используется команда help, чтобы отобразить список доступных команд.
В PowerShell, чтобы выполнить такое же действие используется команда Get-help.
Соберите сервер в конфигураторе под свои задачи. Или выберите из более 100 готовых.
Как изменить каталог?
Для изменения каталога (папки) в командной строке применяется команда Change Directory (cd). Эта команда позволяет перейти в другую папку с компьютера (изменить текущий каталог).
В PowerShell команда cd является псевдонимом для командлета Set-Location-Path <название каталога>, выполняющего идентичную функцию.
Первая итерация команды CD, которую полезно знать, это CD\. Она переводит вас на вершину файловой иерархической структуры (дерева каталогов).
Для перехода в нужную папку с диска, выполните команду CD «название папки». Вложенные папки должны быть разделены символом бэкслэша: \. Например, если необходимо перейти в папку user, находящуюся в C:\users нужно ввести команду cd users\user. Используя команду cd .., можно вернуться на один каталог вверх.
Чтобы изменить диск, нужно ввести его название с двоеточием. Например, d:, чтобы переключиться на диск D. В PowerShell используется командлет set-location d:.
От каталогов перейдем к хранящимся в них файлам.
Как перечислить файлы в каталоге?
Команда dir (Directory) используется, чтобы перечислить файлы в каталоге через командную строку.
Отличие PowerShell – в используемой для перечисления файлов команде. Чтобы перечислить файлы в каталоге, используется команда Get-ChildItem.
Как переименовать файл?
Чтобы переименовать файл в каталоге, в cmd используется команда ren (rename). После нее сначала вводится имя файла, которое вы хотите заменить, затем вводится желаемое имя. Например, ren dir1 dir2.
В Windows PowerShell используется команда Rename-Item для переименования папки путем передачи пути к переименовываемой папке и целевого имени. Например, C:\Windows\dir1 dir2.
Далее разберем важные утилиты, которые могут пригодиться при взаимодействии с системой, а также их отличия в CMD и PowerShell.
Ключевые отличия команд PowerShell от CMD
Завершим знакомство обычного пользователя с PowerShell и CMD сравнением команд и командлетов. Остановимся на нескольких примерах.
- Ping: как мы писали ранее, аналогом cmd-команды ping является командлет Test-Connection в PowerShell.
- Tracert: в PowerShell для определения маршрута следования данных в сети используется Test-NetConnection -TraceRoute.
- IPConfig: Get-NetIPConfiguration в PowerShell – эквивалент IPConfig.
- Nslookup: Команда Resolve-DnsName выполняет DNS-запрос для указанного имени. Эта команда функционально аналогична инструменту nslookup, который позволяет пользователям запрашивать имена.
- Netstat: Get-NetRoute в PowerShell получает текущие TCP-соединения.
- Route: Команда Get-NetRoute является аналогом route и получает информацию о маршруте IP из таблицы маршрутизации IP.
- Netsh: Netsh – служебная программа на базе командной строки, позволяющая показывать или изменять конфигурацию сети активного компьютера. Чтобы запустить ее, и в Windows Powershell, и в CMD используется одна и та же команда — netsh.
- Gpupdate: ее аналогом является команда Invoke-GPUpdate. Она обновляет параметры групповой политики, включая параметры безопасности, установленные на удаленных компьютерах.
- Gpresult: Команда Get-GPResultantSetOfPolicy получает и записывает в файл информацию о результирующих политиках (RSoP) для пользователя.
Разница между командной строкой CMD и Windows PowerShell: что выбрать
Мы завершили обзор, которые условно можно назвать «PowerShell против CMD». Очевидно, есть много причин, по которым Windows PowerShell заменила командную строку Windows по умолчанию в ОС Windows 10. Но, если вы привыкли к CMD, вам не обязательно переходить на PowerShell.
Хотя переход не будет болезненным: в среде PowerShell большинство команд из CMD работают. Все потому, что были созданы псевдонимы командной строки в PowerShell, которые позволяют интерпретировать старые команды cmd как новые команды PowerShell.
Какой инструмент выбрать — ваш выбор. Но PowerShell – более современен. В две основные функции PowerShell встроены дополнительные возможности. И эти возможности, или сценарии использования, являются причиной растущей популярности PowerShell.
Чтобы узнать, как старые команды CMD соотносятся с новыми командами PowerShell, используйте команду Get-Alias.
1. Test-Connection
На замену утилите ping в PowerShell пришел командлет Test-Connection, входящий в состав модуля Microsoft.PowerShell.Management. Для примера пропингуем сервер SRV3 командой:
Test-Connection -ComputerName SRV3
Можно указать для проверки сразу несколько серверов, например перечислив их через запятую:
Test-Connection -ComputerName SRV3, SRV4
или считав из файла:
Test-Connection -ComputerName (Get-Content serverlist.txt)
Еще командлет умеет запускать проверку сразу с нескольких точек. Например, для проверки сервера SRV4 с локального компьютера и с сервера SRV3 воспользуемся следующей командой:
Test-Connection -Source localhost, SRV3 -ComputerName SRV4
Параметр -Source появился только в PS 3.0. В некоторых случаях очень удобно, однако при его использовании может понадобится ввести учетные данные:
Test-Connection -Source localhost, SRV3 -ComputerName SRV4 -Credential Contoso\administrator
Примечание. Командлет использует класс Win32_PingStatus, поэтому для проверки соединения можно воспользоваться командой Get-WmiObject Win32_PingStatus, ее действие аналогично команде Test-Connection.
Следующее средство, обычно применяемое после ping — это трассировка с помощью утилиты tracert. В PowerShell для этих целей можно задействовать командлет Test-NetConnection из модуля NetTCPIP. Не смотря на похожее название, по функционалу он довольно сильно отличается от предыдущего командлета, хотя включает в себя и его возможности. Кроме проверки TCP соединения вывод может включать в себя список IP интерфейсов, разрешение DNS-имен (DNS lookup), правила IPsec и проверку возможности установления соединения. В самом простом варианте команда выглядит так:
Test-NetConnection -ComputerName ya.ru
Для пошагового вывода в стиле tracert можно сделать так:
Test-NetConnection -ComputerName ya.ru -TraceRoute
Также можно указать определенный порт и сделать детализованный вывод:
Test-NetConnection -ComputerName ya.ru -Port 80 -InformationLevel Detailed
2. Get-NetIPConfiguration
Первое, для чего используют Ipconfig — это просмотр сетевых настроек. В PowerShell для этих целей можно воспользоваться командлетом Get-NetIPConfiguration. Так для подробного вывода настроек для всех сетевых интерфейсов (аналог ipconfig /all) введем команду:
Get-NetIPConfiguration -All -Detailed
Для операций с клиентом DNS воспользуется командлетами PowerShell из модуля DNSClient. Для очистки содержимого локального кеша DNS вместо ipconfig /flushdns выполним команду Clear-DnsClientCache, для перерегистрации вместо ipconfig /registerdns — команду Register-DnsClient. Вывести содержимое кеша (ipconfig /displaydns) можно командой Get-DnsClientCache. Также можно выводить не все содержимое кеша, а посмотреть только определенную запись, например:
Get-DnsClientCache -Entry www.bing.ru
3.Resolve-DnsName
Для проверки DNS имен вместо nslookup можно воспользоваться командлетом Resolve-DnsName, входящий в состав модуля DNSClient. Синтаксис у них похожий, например:
Resolve-DnsName -Name SRV3
Можно указать тип записи (A, PTR, SRV), указать, откуда брать данные и выбрать определенный DNS-сервер, отличный от дефолтного:
Resolve-DnsName -Name SRV3 -Type A -DNSOnly -Server 192.168.0.1
4.Get-NetTCPConnection
Утилита Netstat — еще один инструмент сетевой диагностики, показывающий сетевые подключения. Заменим ее командлетом Get-NetTCPConnection. Следующая команда выведет все подключения к интернету, имеющие статус установленных (Established):
Get-NetTCPConnection -State Established -AppliedSettings Internet | ft -auto
5.NetTCPIP
Для управления маршрутизацией вместо утилиты Route воспользуемся несколькими командлетами из модуля NetTCPIP. Для примера попробуем добавить новый постоянный маршрут до сети 172.16.0.0 с маской 255.255.0.0 и шлюзом 192.168.0.1 для интерфейса с номером 3. Вот так это можно сделать с помощью Route:
Route -p add 172.16.0.0 mask 255.255.0.0 192.168.0.1 -if 3
А вот так при использовании PowerShell:
New-NetRoute -DestinationPrefix ″172.16.0.0/16″ -InterfaceIndex 3 -NextHop 192.168.0.1
Для просмотра таблицы маршрутизации вместо route print возьмем командлет Get-NetRoute. Выведем все маршруты для протокола IPv4 командой:
Get-NetRoute -AddressFamily IPv4 | ft -auto
В PS 4.0 появился интересный командлет Find-NetRoute, с помощью которого можно вывести маршрут для одного конкретного IP-адреса, например:
Find-NetRoute -RemoteAddress 10.0.0.1
Для удаления маршрута (вместо route delete) также есть отдельный командлет Remove-NetRoute, например:
Remove-NetRoute -DestinationPrefix ″172.16.0.0/16″ -InterfaceIndex 3 -NextHop 192.168.0.1 -Confirm:$false
Для изменения уже созданного маршрута вместо route change можно воспользоваться связкой Remove-NetRoute&New-NetRoute.
6.Netsh
Утилита Netsh (Network shell) предназначена для выполнения различных задач по настройке сети. Поскольку функционал ее достаточно широк, для сравнения возьмем одну из типичных задач по настройке сетевого интерфейса. Предположим, нам необходимо проверить настройки сетевого интерфейса, и если включен DHCP — отключить его и настроить статическую адресацию. С помощью netsh это будет выглядеть следующим образом:
Netsh interface IPv4 show addresses
Netsh interface IP set address ″Ethernet″ static 192.168.0.11 255.255.255.0 192.168.0.1
Netsh interface IP add DNSServers ″Ethernet″ 8.8.8.8
И тоже самое, но уже с помощью PowerShell:
Get-NetIPAddress -InterfaceIndex 3 -AddressFamily IPv4
Set-NetIPInterface -InterfaceIndex 3 -Dhcp disabled
New-NetIPAddress -InterfaceIndex 3 -IPAddress 192.168.0.11 -PrefixLength 24 -DefaultGateway 192.168.0.1
Set-DNSClientServerAddress -InterfaceIndex3 -ServerAddresses (″8.8.8.8″)
Что интересно, для изменения сетевых настроек придется их удалить и создать заново. Например IP-адрес можно изменить так:
Remove-NetIPAddress -InterfaceIndex 3 -IPAddress 192.168.0.11 -PrefixLength 24 -DefaultGateway 192.168.0.1 -Confirm:$false
New-NetIPAddress -InterfaceIndex 3 -IPAddress 192.168.0.12 -PrefixLength 24 -DefaultGateway 192.168.0.1 -Confirm:$false
Примечание. Для изменения IP-адреса логично было бы воспользоваться специально предназначенным для этого командлетом Set-NetIPAddress, но не тут-то было ? При попытке изменить настройки этот командлет стабильно выдает ошибку. Как выяснилось, этот командлет не может изменить сам IP-адрес, а только некоторые его свойства.
7.Gpupdate и Gpresult
Для обновления групповых политик вместо Gpupdate в модуле GroupPolicy есть командлет Invoke-GPUpdate. Синтаксис у них практически один и тот же, например принудительное обновление политик пользователя выполняется командой:
Gpupdate /target:user /force
Invoke-GPUpdate -Target user -force
Ну и посмотреть результирующие политики вместо Gpresult можно командлетом Get-GPResultantSetOfPolicy. Осуществить вывод результатов в HTML-файл можно командой:
Get-GPResultantSetOfPolicy -ReportType Html -Path C:\gpo.html
CMD vs PowerShell
Как видите, PowerShell вполне в состоянии заменить большинство утилит командной строки. Однако остается еще один вопрос — зачем это нужно.
В достоинства PowerShell, на мой взгляд, можно записать более структурированный вывод результатов, которые к тому-же можно обрабатывать — фильтровать, сортировать и изменять формат вывода. Кроме того, результатом выполнения команд PowerShell являются объекты, которые можно сохранять в переменные, передавать по конвейеру и т.п. Это очень удобно при написании скриптов.
Из недостатков — большинство описанных в статье команд требуют PowerShell 3.0, а некоторые вообще есть только в четвертой версии. Также некоторые командлеты (напр. Set-NetIPAddress) работают криво не совсем так, как должны.
Ну а на стороне CMD проверенный временем функционал, который есть в любой версии Windows. Кроме того, для простых задач администрирования cmd использовать привычнее, а где-то и удобнее.
Итак, что же лучше — CMD или PowerShell ? Не знаю как вы, а я не готов однозначно ответить на этот вопрос. Впрочем, ничто не мешает нам пользоваться и тем и другим.
Данный материал является переводом оригинальной статьи «Active Directory Pro : Robert Allen : How to Update Group Policy on Remote Computers» и рассчитан на начинающих администраторов Windows.
В конфигурации по умолчанию доменные компьютеры обновляют групповые политики (Group Policy) при запуске операционной системы, а затем политики автоматически обновляются в фоновом режиме каждые 90 минут. Но бывают случаи, когда вы вносите изменения в существующие объекты групповой политики (Group Policy Objects/GPO) или создаете новые GPO, и вам нужно, чтобы изменения вступили в силу немедленно.
Далее мы рассмотрим три различных способа удаленного обновления групповой политики. Первый способ лучше всего подходит для старых клиентов Windows, второй и третий способы — для систем, работающих под управлением 2012 года и более поздних версий.
Способ 1: Использование утилит GPUpdate и PsExec
Этот способ использует на клиентских компьютерах встроенную в Windows команду под названием gpupdate. Чтобы немедленно принудительно обновить групповую политику на локальном компьютере, используют команду вида:
gpupdate /force
Параметр /force принудительно обновит все политики, а не только новые.
Однако, если у вас множество компьютеров, которые нуждаются в обновлении, было бы непросто входить в каждый из них и выполнять эту команду. Чтобы выполнить указанную (или любую другую) команду на удаленном компьютере, вы можете воспользоваться утилитой PsExec из набора инструментов Sysinternals.
Вот пример использования PsExec для удаленного обновления групповой политики:
PsExec \\Computername gpupdate
Просто замените Computername на фактическое имя хоста удаленного компьютера.
Способ 2: Использование Консоли Group Policy Management
В Windows Server 2012 и более поздних версиях теперь можно принудительно обновлять групповую политику на удаленных компьютерах с помощью консоли управления групповой политикой Group Policy Management.
Этот метод очень прост и позволяет запускать обновление в одном подразделении (Organizational Unit/OU) или во всех подразделениях Active Directory.
Шаг 1: Найдите в главном меню Консоль управления групповой политикой «Group Policy Management».
Вы можете открыть эту консоль на компьютере, на котором установлены средства RSAT.
Шаг 2: В дереве структуры подразделений (OU) домена Active Directory щелкните правой кнопкой мыши OU, чтобы открыть контекстное меню команд управления и вызвать пункт «Group Policy Update«.
Вы можете обновить отдельное подразделение или родительское подразделение, и оно обновит все дочерние подразделения.
Мы собираемся обновить свое родительское подразделение «ADPRO Computers«. В этом подразделении есть несколько подразделений, разбитых на отделы. Это приведет к запуску обновления групповой политики на всех компьютерах, вложенных в эти OU.
Отвечаем утвердительно на вопрос о запуске обновления на указанном количестве компьютеров.
Далее мы увидим окно, показывающее нам статус обновления групповой политики на каждом компьютере.
Вот так просто использовать консоль управления групповой политикой для удаленного принудительного обновления групповой политики.
Способ 3: Использование Powershell командлета Invoke-GPUpdate
В Windows 7 / Windows Server 2012 и более новых ОС можно принудительно выполнить немедленное обновление с помощью PowerShell командлета Invoke-Gpupdate.
Вам потребуется установить PowerShell, а также упомянутую консоль управления групповой политикой (Group Policy Management) из состава RSAT.
Пример вызова команды обновления групповых политик:
Invoke-GPUpdate –Computer 'COMPUTER02' -RandomDelayInMinutes 0
Значение параметра RandomDelayInMinutes указывает задержку выполнения в минутах. Установив для него значение 0, вы сразу же обновите групповую политику.
Единственным недостатком использования этой команды является то, что клиенты получат всплывающее окно CMD, как показано ниже.
Это окно отображается около 3 секунд, а затем закрывается.
Если вы хотите использовать команду PowerShell для принудительного обновления на всех компьютерах в Active Directory, вы можете использовать следующие команды:
$computers = Get-ADComputer -Filter "*"
$computers | ForEach-Object -Process { Invoke-GPUpdate -Computer $_.name -RandomDelayInMinutes 0 -Force }
Приведенные выше команды будут извлекать каждый компьютер из домена, помещать их в переменную и запускать команды для каждого объекта в переменной.
Замечание (вне рамок перевода текста исходной статьи):
При использовании командлета Invoke-GPUpdate на целевой системе в логе фиксируется 2 события: с кодом 1500 (обновление политик компьютера) и с кодом 1501 (обновление политик пользователя).
Если на удалённых компьютерах требуется форсированное обновление только компьютерных политик и не требуется обновление пользовательских политик, то можно избежать появления вышеописанного окна CMD. Это возможно, если воспользоваться таргетированием выполнения, то есть добавить к команде опцию -Target.
Пример команды, при которой обновится только политика компьютера (регистрация события 1500, окно в сессии пользователя не появляется):
Invoke-GPUpdate -Computer "computername" -RandomDelayInMinutes 0 -Target Computer
Пример команды, при которой обновится только политика пользователя (регистрация события 1501, окно в сессии пользователя появляется
Invoke-GPUpdate -Computer "computername" -RandomDelayInMinutes 0 -Target User
Дополнительно по теме групповых политик можно ознакомится со статьёй о построении отчёта о результирующих групповых политиках, применяемых к конкретному компьютеру и/или пользователю «GPResult Tool: How To Check What Group Policy Objects are Applied».