Перейти к содержимому

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

  • автор:

Как запустить Powershell: команды, скрипты, автоматизация.

Как запустить Powershell: команды, скрипты, автоматизация.

Мы открыли специальный раздел на форуме, http://www.linuxshop.ru/forum/f23-avtomatizacija-administrirovanija-windows.html где публикуем скрипты для windows автоматизирующие некоторые задачи, но windows не Linux и тут недостаточно в cmd просто записать фаил скрипт и запустить его ./ test . ps 1 он не исполнится т.к мы не в оболочке powershell это как bash или sh только в линукс она по умолчанию запущенны а тут нужна запустить.

Как запустить Powershell

Для запуска пуск-программ-стандартные- Windows PowerShell и тут есть два вариант PowerShell – консоль и PowerShell ISE удобная оболочка для запуска сценариев и их отладки. Для запуска повер шел из консоли: powershell_ise.exe

Запуск повершела в таск

powershell.exe -FILE путь _ к _ файлу .ps1

Команды:

Set-ExecutionPolicy

В PowerShell по умолчанию отключена возможность выполнять сценарии изменить настройка можно при помощи Set-ExecutionPolicy. Доступно 4 опции безопасности:

• Restricted — выполнение сценариев запрещено. Эта опция установлена по умолчанию. Команды в таком случае можно выполнять только в интерактивном режиме.

• All Signed — разрешено выполнение только сценариев, подписанных доверенным издателем.

• Remote Signed — разрешено выполнение любых сценариев, созданных локально, а сценарии, созданные на удаленных системах, выполняются только в том случае, если подписаны доверенным издателем.

• Unrestricted — разрешено выполнение абсолютно любых сценариев.

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

Настройка серверов windows и linux

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

Не удается загрузить файл , так как выполнение скриптов запрещено для данной системы. Введите «get-help about_signing» для получения дополнительных сведений.

Смотрим как ее решить.

Ошибки при запуске скрипта PowerShell

Как запустить скрипт PowerShell в Windows-02

Как запустить скрипт PowerShell в Windows-02

Import-Module : Невозможно загрузить файл C:\Program Files\WindowsPowerShell\Modules\VMware.VimAutomation.Sdk\12.2.0.17
531155\VMware.VimAutomation.Sdk.psm1, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https:/go.microsoft.com/fwlink/?LinkID=135170.
строка:1 знак:1
+ Import-Module VMware.PowerCLI
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : Ошибка безопасности: (:) [Import-Module], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand

так как выполнение сценариев отключено в этой системе

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

  • Ограниченный (Restricted): Политика исполнения по умолчанию, не допускает работу скриптов и разрешает работу лишь интерактивных команд.
  • Все подписанные (All Signed): Допускает работу всех скриптов. Правда, все скрипты и файлы конфигурации должны быть подписаны издателем, которому вы доверяете; данный режим подвергает вас риску работы подписанных (но вредоносных) скриптов, после получения подтверждения доверия издателю.
  • Удаленные подписанные (Remote Signed): Локальные скрипты работают без подписи. Все скачанные скрипты должны иметь цифровую подпись.
  • Неограниченный (Unrestricted): Все скрипты и файлы конфигурации, полученные из коммуникационных приложений, вроде Microsoft Outlook, Internet Explorer, Outlook Express и Windows Messenger работают после подтверждения, что вы понимаете, что файл исходит из Интернета; никакие цифровые подписи не требуются; данный режим подвергает вас риску работу неподписанных, вредоносных скриптов.

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

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

Чтобы запускать созданные собою скрипты, необходимо разрешить выполнение ненадежных скриптов с помощью команды Set-ExecutionPolicy remotesigned и подтверждением (Внимание. для выполнения этой команды необходимо запустить PowerShell с правами администратора). После этого можно вновь запустить выполнения скрипта.

Как запустить скрипт PowerShell в Windows-03

Как запустить скрипт PowerShell в Windows-03

На вопрос жмем Y, для разрешения выполнения скриптов. После этих манипуляций вы сможете запустить ваш скрипт. То же самое я проделал и для PowerCLI, что в результате дало возможность теперь его запускать без проблем.

Set-ExecutionPolicy remotesigned

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

Запуск taskschd.msc

Далее вы щелкаете по библиотеке правым кликом и из контекстного меню выбираете пункт «Создать задачу«.

Создание задачи в планировщике для запуска скрипта PowerShell

Задаете имя задания, советую запускать скрипт PowerShell от имени учетной записи «СИСТЕМА (SYSTEM)«, это будет гарантировать, что задание точно отработает.

Как запустить скрипт PowerShell в планировщике

Поставьте галку «Выполнять с наивысшими правами»

Настройка задачи в планировщике Windows

Переходим на вкладку тригеры и создаем новый. В параметрах выберите «При событии«

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

  • Журнал — Приложение
  • Источник — MsiInstaller
  • Код события — 11707

Тут тригер будет срабатывать, когда в логах появится событие 11707.

параметры запуска скрипта PowerShell по расписанию

В действие оставляем «Запуск программы». В программе указываем powershell, а в параметрах задайте путь до самого скрипта, через параметр -File c:\scripts\id11707.ps1.

run powershell script

В итоге у меня вышло вот так.

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

Как видим, мое задание по запуску скрипта PowerShell успешно создано и отработало в планировщике Windows.

Как выполнить скрипт powershell

Запуск скрипта PowerShell через исполняемый файл exe

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

Популярные Похожие записи:
  • Как установить vSphere PowerCLI последнюю версиюКак установить vSphere PowerCLI последнюю версию
  • Как запустить скрипт PowerShell на удаленном компьютере через SCCMКак запустить скрипт PowerShell на удаленном компьютере через SCCM
  • Установка и управление модулями PowerShell
  • Как массово поменять пароль локального администратора в домене
  • Не открывается пуск в Windows 10, 100% решениеНе открывается пуск в Windows 10, 100% решение
  • Как открыть PowerShell, все методыКак открыть PowerShell, все методы

Июл 16, 2021 15:22 Автор — Сёмин Иван

4 Responses to Как запустить скрипт PowerShell в Windows

PowerShell script :

Если вы используете Windows в качестве хоста, вы можете использовать powershell -noexit «& «»C:\my_path\yada_yada\run_import_script.ps1″»» (enter)

Запуск скриптов Windows PowerShell из файлов проекта MSBuild

Этот раздел является частью серии учебников, основанных на требованиях к корпоративному развертыванию вымышленной компании Fabrikam, Inc. В этой серии руководств используется пример решения диспетчера контактов для представления веб-приложения с реалистичным уровнем сложности, включая приложение ASP.NET MVC 3, службу Windows Communication Foundation (WCF) и проект базы данных.

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

Обзор задачи

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

  • Добавьте скрипт Windows PowerShell в решение и в систему управления версиями.
  • Создайте команду, которая вызывает скрипт Windows PowerShell.
  • Экранирование всех зарезервированных XML-символов в команде.
  • Создайте целевой объект в пользовательском файле проекта MSBuild и выполните команду с помощью задачи Exec .

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

Создание и добавление скриптов Windows PowerShell

В задачах в этом разделе используется пример скрипта Windows PowerShell с именем LogDeploy.ps1 для демонстрации выполнения скриптов из MSBuild. Скрипт LogDeploy.ps1 содержит простую функцию, которая записывает однострочные записи в файл журнала:

function LogDeployment < param([string]$filepath,[string]$deployDestination) $datetime = Get-Date $filetext = "Deployed package to " + $deployDestination + " on " + $datetime $filetext | Out-File -filepath $filepath -Append >LogDeployment $args[0] $args[1] 

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

Deployed package to TESTWEB1 on 02/11/2012 09:28:18 

Чтобы сделать скрипт LogDeploy.ps1 доступным для MSBuild, необходимо:

  • Добавьте скрипт в систему управления версиями.
  • Добавьте скрипт в решение в Visual Studio 2010.

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

В примере диспетчера контактов, так как вы хотите использовать скрипт Windows PowerShell в процессе развертывания, имеет смысл добавить скрипт в папку решения Публикация.

Содержимое папок решения копируется на серверы сборки в качестве исходного материала. Однако они не входят в какие-либо выходные данные проекта.

Выполнение скрипта Windows PowerShell на сервере сборки

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

С точки зрения синтаксиса выполнение скрипта Windows PowerShell из файла проекта MSBuild аналогично запуску скрипта Windows PowerShell из обычной командной строки. Необходимо вызвать исполняемый файл powershell.exe и использовать параметр –command, чтобы предоставить команды, которые вы хотите Windows PowerShell выполнять. (В Windows PowerShell версии 2 можно также использовать параметр –file. Команда должна принимать следующий формат:

powershell.exe –command "& < [Path to script] 'parameter1' 'parameter2' . >" 
powershell.exe –command "& < C:\LogDeploy.ps1 'C:\DeployLogs\log.txt' 'TESTWEB1' >" 

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

powershell.exe –command "& < &'C:\Path With Spaces\LogDeploy.ps1' 'C:\Path With Spaces\log.txt' 'TESTWEB1' >" 

Существует несколько дополнительных рекомендаций при вызове этой команды из MSBuild. Во-первых, необходимо включить флаг –NonInteractive , чтобы гарантировать, что скрипт выполняется неактивно. Далее следует включить флаг –ExecutionPolicy с соответствующим значением аргумента. Это указывает политику выполнения, которая Windows PowerShell будет применяться к скрипту, и позволяет переопределить политику выполнения по умолчанию, которая может препятствовать выполнению скрипта. Вы можете выбрать один из следующих значений аргументов:

  • Значение Unrestricted позволяет Windows PowerShell выполнять скрипт независимо от того, подписан ли он.
  • Значение RemoteSigned позволит Windows PowerShell выполнять неподписанные скрипты, созданные на локальном компьютере. Однако скрипты, созданные в другом месте, должны быть подписаны. (На практике вы вряд ли создали скрипт Windows PowerShell локально на сервере сборки.
  • Значение AllSigned позволяет Windows PowerShell выполнять только подписанные скрипты.

Политика выполнения по умолчанию — Restricted, которая запрещает Windows PowerShell запускать файлы скриптов.

Наконец, необходимо экранировать все зарезервированные XML-символы, которые встречаются в команде Windows PowerShell:

  • Замените одинарные кавычки &на apos;
  • Замените двойные кавычки &на quot;
  • Замените амперсанды усилителями&;
  • При внесении этих изменений команда будет выглядеть следующим образом:
powershell.exe –NonInteractive –ExecutionPolicy Unrestricted –command "& < &'[Path to script]' '[parameter1]' '[parameter2]' >" 

В пользовательском файле проекта MSBuild можно создать новый целевой объект и использовать задачу Exec для выполнения следующей команды:

   %WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe C:\Path With Spaces\LogDeploy.ps1 C:\Path With Spaces\ContactManagerDeployLog.txt  "" /> 

В этом примере обратите внимание на следующее:

  • Любые переменные, такие как значения параметров и расположение исполняемого файла Windows PowerShell, объявляются как свойства MSBuild.
  • Включены условия, позволяющие пользователям переопределять эти значения из командной строки.
  • Свойство MSDeployComputerName объявляется в другом месте файла проекта.

При выполнении этого целевого объекта в процессе сборки Windows PowerShell выполнит команду и запишет запись журнала в указанный файл.

Выполнение скрипта Windows PowerShell на удаленном компьютере

Windows PowerShell поддерживает выполнение скриптов на удаленных компьютерах с помощью удаленного управления Windows (WinRM). Для этого необходимо использовать командлет Invoke-Command . Это позволяет выполнять скрипт на одном или нескольких удаленных компьютерах без копирования скрипта на удаленные компьютеры. Все результаты возвращаются на локальный компьютер, с которого был выполнен сценарий.

Прежде чем использовать командлет Invoke-Command для выполнения скриптов Windows PowerShell на удаленном компьютере, необходимо настроить прослушиватель WinRM для приема удаленных сообщений. Это можно сделать, выполнив команду winrm quickconfig на удаленном компьютере. Дополнительные сведения см. в статье Установка и настройка удаленного управления Windows.

В окне Windows PowerShell можно использовать следующий синтаксис для запуска скрипта LogDeploy.ps1 на удаленном компьютере:

Invoke-Command –ComputerName 'REMOTESERVER1' –ScriptBlock

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

При запуске из командной строки необходимо вызвать исполняемый файл Windows PowerShell и использовать параметр –command для предоставления инструкций:

powershell.exe –command "& " 

Как и ранее, необходимо указать некоторые дополнительные параметры и экранировать все зарезервированные XML-символы при выполнении команды из MSBuild:

powershell.exe -NonInteractive -executionpolicy Unrestricted -command "& Invoke-Command –ComputerName 'REMOTESERVER1' -ScriptBlock < &'C:\Path With Spaces\LogDeploy.ps1' ' C:\Path With Spaces\Log.txt ' 'TESTWEB1' >" 

Наконец, как и раньше, можно использовать задачу Exec в пользовательском целевом объекте MSBuild для выполнения команды:

   %WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe C:\Path With Spaces\LogDeploy.ps1 C:\Path With Spaces\ContactManagerDeployLog.txt  ""/> 

При выполнении этого целевого объекта в процессе сборки Windows PowerShell будет выполнять скрипт на компьютере, указанном в аргументе –computername.

Заключение

В этом разделе описывается запуск скрипта Windows PowerShell из файла проекта MSBuild. Этот подход можно использовать для запуска сценария Windows PowerShell локально или на удаленном компьютере в рамках автоматизированного или одношагового процесса сборки и развертывания.

Дополнительные материалы

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

Дополнительные сведения об использовании пользовательских файлов проекта MSBuild для управления процессом развертывания см. в разделах Общие сведения о файле проекта и Общие сведения о процессе сборки.

Выполнить PowerShell скрипт на компьютере с помощью GPO

date

15.11.2022

user

itpro

directory

PowerShell, Windows 10, Windows Server 2019, Групповые политики

comments

комментариев 19

Вы можете использовать групповые политики Windows для выполнения файлов различных скриптов при загрузке/выключении компьютера или входе/выходе пользователя. С помощью GPO вы можете исполнять на компьютерах домена не только классические файлы скриптов (.bat, .cmd, ,vbs), но и Startup/Shutdown/Logon/Logoff скрипты PowerShell (.ps1)

В современных версиях Windows вы можете настроить запуск логон/логоф скриптов PowerShell напрямую из редактора групповых политик (ранее приходилось вызывать ps1 скрипты из bat файлов через параметр исполняемого файла powershell.exe).

Запустите консоль управления доменными политиками GPMC.msc (Group Policy Management сonsole). Создайте новую политику (GPO) и назначьте ее на нужный контейнер с пользователями или компьютерами (можно использовать WMI фильтры GPO для более тонкого нацеливания политики). Перейдите в режим редактирования политики.

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

  • Если PS скрипт должен быть запущен при входе пользователя на компьютер (настройка параметров окружения пользователя, программ, например: вы хотите при входе пользователя автоматическое создавать подпись в Outlook на основе данных из пользователя AD, настроить параметры экранной заставки или стартового экрана) или при выходе пользователя, вам нужно перейти в раздел GPO: UserConfiguration-> Policies-> WindowsSettings-> Scripts(Logon/ Logoff);
  • Если вы хотите запускать скрипт PowerShell при загрузке компьютера (отключение устаревших протоколов: NetBIOS, SMBv1, настройка параметров безопасности компьютера и т.д.) или перед корректным выключением компьютера, вам нужно перейти в секцию GPO с настройками компьютера: Computer Configuration -> Policies -> Windows Settings -> Scripts (Startup / Shutdown).

Запуск PowerShell скрипта при загрузке компьютера с помощью групповой политики

Допустим, нам нужно запускать PowerShell скрипт при загрузке Windows. Для этого нужно выбрать Startup и в открывшемся окне перейди на вкладку PowerShell Scripts.

Запус скриптов PowerShell при загрузке компьютера групповыми политиками

Теперь нужно скопировать файл с вашим PowerShell скриптом на контроллер домена. Скопируйте ваш файл ps1 в каталог Netlogon на контроллере домена (например, \\winitpro.ru\netlogon ).

Т.к. мы настраиваем запуск Startup скрипта PowerShell, нужно в разрешениях ps1 файла (или всего каталога Machine\Scripts\Startup) проверить NTFS права доступа на чтение и выполнение (Read & Execute) для группы Domain Computers и/или Authenticated Users .

Теперь нужно нажать кнопку Add и укажите UNC путь к вашему файлу скрипта ps1 в Netlogon.

запуск скрипта powershell через групповые политики при загрузке компьютера

Если вы запускаете несколько PowerShell скриптов через GPO, вы можете управлять порядком из запуска с помощью кнопок Up/Down.

Для корректного выполнения скриптов PowerShell при загрузке компьютера нужно настроить время задержки перед запуском с помощью политики в разделе Computer Configuration -> Administrative Templates -> System -> Group Policy. Включите политику Configure Logon Script Delay (Настроить задержку сценария входа в систему) и укажите задержку в минутах перед запуском логон-скриптов (достаточное для окончания инициализации и загрузки всех необходимых служб). Обычно достаточно поставить здесь 1-2 минуты.

Если в вашем PowerShell скрипте используются сетевые инструменты Windows, для некоторых GPO нужно включить политику “Specify startup policy processing wait time” в разделе Computer Configuration -> Policies -> Administrative Templates -> System -> Group Policy. Попробуйте начать со значения 60 сек. После включения этой политики компьютер будет ждать 60 секунд прежде, чем начать применять стартап скрипты. Обычно этого достаточно для инициализации сетевой подсистемы Windows.

параметр gpo задержка запуска скриптов

В Windows Server 2012R2 и Windows 8.1 и выше PowerShell скрипты в GPO запускаются из каталога NetLogon в режиме Bypass. Это означает, что настройки политики запуска сценариев PowerShell игнорируются. Если вы хотите запустить скрипт из другого каталога, или в вашей сети остались клиенты с Windows 7 или Windows Server 2008R2, вам нужно настроить политику выполнения PowerShell скриптов.

По умолчанию в настройках безопасности Windows запрещен запуск PowerShell скриптов. Значение текущей настройки политики запуска сценариев PowerShell можно получить командой Get-ExecutionPolicy. Если политика не настроена, команда вернет Restricted (блокируются любые скрипты). Параметры безопасности запуска PowerShell скриптов можно настроить через политику “Включить выполнение сценариев” / “Turn On Script Execution” (в разделе GPO Computer Configuration -> Administrative Templates -> Windows Components -> Windows PowerShell). Возможные значения политики:

  • Allowonlysignedscripts (AllSigned)– можно запускать только подписанные скрипты PowerShell (“Как подписать скрипт PowerShell?”) –самый лучший сценарий с точки зрения безопасности;
  • Allowlocalscriptsandremotesignedscripts (RemoteSigned)– можно запускать любые локальные и подписанные удаленные скрипты;
  • Allowallscripts (unrestricted) – самый небезопасный вариант, т.к. разрешает запуск любых PowerShell скриптов.

политика запуска powershell скриптов Turn On Script Execution

Если вам не подходит не один из предложенных сценариев настройки политики запуска PowerShell скриптов, вы можете запускать PowerShell скрипты в режиме Bypass (скрипты не блокируются, предупреждения не появляются).

Для этого PowerShell скрипт нужно запускать из секции Startup -> Scripts. В этой секции вы можете настроить запуск ps1 сценария с помощью создания обычного Startup скрипта, запускающего исполняемый файл powershell.exe (по аналогии со сценарием, описанным в статье). Укажите:

  • Script name: %windir%\System32\WindowsPowerShell\v1.0\powershell.exe
  • Script Parameters: -Noninteractive -ExecutionPolicy Bypass –Noprofile -file %~dp0MyPSScript.ps1

powershell.exe -Noninteractive -ExecutionPolicy Bypass

Символы %~dp0 при запуске на клиенте автоматически преобразуются в UNC путь до каталога со скриптом на SYSVOL.

В данном случае вы принудительно разрешили запуск любого (даже ненадежного) скрипта PowerShell с помощью параметра Bypass.

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

Выполнить PowerShell скрипт при входе пользователя в Windows

Рассмотрим сценарий автоматического запуска PowerShell скрипта при входе пользователя в Windows (или при выходе).

Если вам нужно запустить скрипт не при загрузке компьютера, а после входа пользователя в Windows (для каждого пользователя компьютера), вам нужно привязать GPO к OU Active Directory с пользователями. В этом случае PowerShell нужно настроить в следующем разделе User Configuration вашей GPO

Если вы хотите, чтобы политика выполнялась для всех пользователей определенного компьютера, нужно привязать политику к OU с компьютерами и включить режим замыкания групповой политики (параметр Configure User Group Policy Loopback Processing mode в разделе Computer Configuration -> Administrative Templates -> System -> Group Policy). Если не включать режим замыкания, то параметры из раздела User Configuration не будут применены к пользователю. Подробнее об этом в статье Почему GPO не применяется к пользователю или компьютеру?

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

выполнить powershell скрипт при входе пользователя в windows

  1. Скопируйте файл скрипта PowerShell в каталог \\winitpro.ru\NETLOGON\ на контроллере домена AD
  2. Перейдите в раздел User Configuration -> Policies -> Windows Settings -> Scripts -> Logon;
  3. Перейдите на вкладку PowerShell Scripts и добавьте ваш PS1 файл скрипта (используйте UNC путь, например \\winitpro.ru\NETLOGON\UserLog.ps1 );
  4. Выполните логофф пользователя на целевом компьютере и выполните вход;
  5. Ваш PowerShell скрипт будет запущен автоматически через GPO при входе пользователя;
  6. Вы можете убедится, что логон скрипт выполнен успешно под пользователем по событию с Event ID 5018 в журнале Microsoft-Windows-GroupPolicy/Operational Event Viewer:

Completed Logon script for winitpro\kbuldogov in 11 seconds.

событие запуска логон скрипта в event viewer

Если вы хотите, чтобы пользователь не мог получить доступ к своему рабочему столу до окончания работы скрипта, нужно включить параметр Run logon scripts synchronously = Enable (Computer Configuration\Administrative Templates\System\Logon). В этом случае explorer не закончится, пока не отработают все политики и логон скрипты (это увеличивает время входа!).

Обратите внимание, что скрипт выполняется с правами текущего пользователя. Если у пользователя есть права администратора на компьютере и на него действуют политики User Account Control (UAC), PowerShell скрипт не сможет внести изменения, требующие повышенных привилегий.

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

  1. Создать задание Task Scheduler в разделе User Configuration -> Preferences -> Control Panel Settings -> Scheduled Task;
  2. На вкладке General указать что задание запускается от имени пользователя %LogonDomain%\%LogonUser и включите опцию Run with highest privileges ;запуск кода powerhell через задание планировщика групповых политик
  3. На вкладке Trigger укажите, что задание должно запускаться At log on;запуск задания при входе пользователя
  4. И на вкладке Actions укажите путь к вашему PowerShell скрипту:

Action: Start a program
Program/Script: C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe
Add Arguments (optional): -ExecutionPolicy Bypass -command «& \\winitpro.ru\Netlogon\yourscript.ps1»

Подробнее о настройке заданий планировщика Windows через GPO.

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

Некоторые скрипты нужно запускать для каждого пользователя только один раз при первом входе на компьютер (инициализация рабочего окружения, копирование папок или конфигурационных файлов, создание ярлыков и т.д.). В одной из статей мы рассматривали cпособ запуска логон скрипт через GPO только один раз.

Предыдущая статьяПредыдущая статья Следующая статья Следующая статья

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *