Contents of this directory is archived and no longer updated.

А знаете ли вы, что скрипты PowerShell можно очень легко и удобно использовать в качестве startup/shutdown и logon/logoff скриптов в GPO?

Сценарий для Windows Server 2003/2008

В обычной жизни при двойном клике на .ps1 файл – он откроется в редакторе, но не будет исполнен. Это было сделано в целях безопасности, что у PS1 файлов PerceivedType выставлен как Text и расширение PS1 отсутствует в переменной %pathext%. Но это совсем не значит, что мы не можем использовать эти скрипты в GPO или Task Sheduler. Ларчик открывается очень просто:

Logon Settings

Суть сводится к тому, что в Script Name указывается путь к исполняемому модулю PowerShell. А вот уже в Script Parameters уже указываете путь к скрипту. Причём тут следует обратить внимание, что если путь задаёте через переменные (например, если у вас несколько контроллеров домена, то целесообразно запускать скрипт из папки NetLogon того контроллера, который вас аутентифицирует), то переменные нужно указывать в формате CMD, т.е. %variable%. В результате вы получите вот такой вид настроенного логон-скрипта:

GPMC

Т.е. реализуется это всё очень просто. Однако, здесь есть одно большое “НО” – для реализации логон-скриптов в среде Windows Server 2003/2008 у вас должна быть реализована политика подписанных скриптов. В противном случае скрипт просто не исполнится, даже если у вас политика запуска скриптов выставлена в Unrestricted. Это обусловлено тем, что скрипт исполняется не с локального диска, а с сетевого. Это можно очень легко проверить:

[vPodans] Set-ExecutionPolicy unrestricted [vPodans] Get-ExecutionPolicy Unrestricted [vPodans] & $env:logonserver\netlogon\get.ps1 Security Warning Run only scripts that you trust. While scripts from the Internet can be useful, this script can potentially harm your computer. Do you want to run \\DC1\netlogon\get.ps1? [D] Do not run [R] Run once [S] Suspend [?] Help (default is "D"):

У вас каждый раз будет спрашиваться разрешение на запуск скрипта. Т.к. логонные скрипты выполняются в фоне и не взаимодействуют с пользователем, то вы просто не сможете никак нажать кнопку R. Тем более, как видно из снимка, у нас нету возможности сделать Run always. Именно по этой причине требуются только подписанные скрипты. Но это не проблема, учитывая, что я у себя в блоге написал 2 поста по практической реализации инфраструктуры подписанных скриптов, тем более, это наоборот повышает безопасность запуска скриптов PowerShell.

Но если очень хочется выполнять логонные и стартапные скрипты без внедрения цифровых подписей, то есть один workaround - узел, на котором размещены скрипты в сети (обычно это сам контроллер домена) нужно добавить в интернет-зону Local Intranet. Тогда скрипты из сети будут равноценны локальным и политика RemoteSigned спокойно разрешит такой запуск.

Сценарий для Windows Server 2008 R2/Windows 7

Пока что Windows Server 2008 R2 и Windows 7 не RTM, но уже известно, что в них уже нативно поддерживаются скрипты PowerShell в качестве логонных и стартапных, поскольку в этих системах PowerShell установлен и включен по умолчанию. И выглядит это вот так:

MSH GPO

В табе Scripts располагаются классические скрипты как .BAT, .CMD, .VBS, .JS и в комментарии не нуждаются. Но в новых системах добавлен ещё один таб PowerShell scripts. Вы можете прямо указывать на .PS1 файлы без указания программы, которая будет их отрабатывать. Иными словами эти скрипты теперь ничем не отличаются от тех же скриптов CMD/WSH. Но в проводнике PS1 файлы всё равно не будут исполняться, а открываться в редакторе (ISE/Notepad/PowerGUI). Ну и ещё одна заметка:

MSH GPO2

Вы можете выбирать в каком порядке эти скрипты будут исполняться – до или после классических скриптов в первом табе. На практике есть один небольшой недостаток – при логоне частенько проскакивает консоль PowerShell, что есть не очень хорошо. Правда, следует учитывать, что новые системы ещё только Release Candidate (скриншоты сделаны с беты), поэтому есть надежда, что это будет исправлено. В отличии от предыдущего варианта, когда скрипты PowerShell адаптируются под классические – здесь не обязательно подписывать скрипты, хотя для этого придётся выставить политику запуска в Unrestricted, что не есть безопасно. Поэтому я бы посоветовал везде, где это возможно – использовать цифровые подписи для скриптов. И ещё раз напомню, что данная вкладка в GPO доступна только в Windows Server 2008 R2/Windows 7 и, скорее всего, в последующих версиях и применяться будет тоже только к ним. Если у вас домен под управлением Windows Server 2008 R2, а клиенты – Windows Vista, то эти логонные скрипты работать не будут, даже если на последних всеми правдами и неправдами :-) установлен PowerShell.

As always enjoy the automation of tools within powershell.exe! © Flowering Weeds


Share this article:

Comments:

shs

Можно, наверное, и не включать подписывание, если запускать скрипт с локального компьютера? Для этого можно сделать элементарную обвязку для скрипта, которая скопирует его на локальный компьютер: ::============================================================= ::Script. Copy script to local workstation :: ::скопируем PoSh-скрипт из папки netlogon на локальную машину (например, в %windir%\temp) copy /y \\fqdn_name_of_your_domain\netlogon\%1 %windir%\temp\ %windir%\system32\WindowsPowerShell\v1.0\powershell.exe %windir%\temp\%1 del /y %windir%\temp\%1 ::==============================================================

Vadims Podāns

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

shs

работы не много и ее не больше, (даже меньше, IMHO, если учитывать необходимость подписывать скрипты) Ну, да подписывание - это очень хорошо, но... ...все-таки это требует дополнительных телодвижений, выгода от которых стремиться к нулю (в случае, если мы применяем SRP) Кроме того, включение этого режима затруднит процесс отлаки сриптов. Это что же выходит: после каждого внесения изменений его надо переподписать, прежде чем запустиь?

SteFFun

Как я понял, для того чтобы POSH работал в качестве логон скриптов нужно: - на контроллере установить POSH (не проблема, у меня всего их 2, оба Win2003r2 Sp2) - на клиентах(у меня преимущественно XP, а вот тут уже нужно дополнительно накатывать обновление, которое содержит POSH, не знаю как, руками не вариант, хостов более 150, WSUS у меня пока еще нет) - выставить политику POSH на выполнение только подписанных скриптов(тоже не имею понятия как на всех машинах это делать? кроме того для этого нужны админские права) Если неправ поправьте.Просто в этом случае меня этот вариант никак не устраивает, хотя POSH гораздо приятнее нежели VBS или JScript. "shs Кроме того, включение этого режима затруднит процесс отлаки сриптов. Это что же выходит: после каждого внесения изменений его надо переподписать, прежде чем запустить?" Я в этом случае выделяю полностью текст скрипта и говорю "выполнить выделенное", и ничего не нужно подписывать при отладке, а по сути выполняется скрипт.

Vadims Podāns

> - на контроллере установить POSH (не проблема, у меня всего их 2, оба Win2003r2 Sp2) PowerShell должен быть установлен там, где эти скрипты будут исполняться, т.е. клиентских компьютерах и терминальных серверах. > - выставить политику POSH на выполнение только подписанных скриптов(тоже не имею понятия как на всех машинах это делать? кроме того для этого нужны админские права) можно через GPO это сделать.

www.google.com/accounts/o8/id?id=AItOawn07OFJDMxZzieNsxsW_b-LYfifmjh65HI

>можно и так, но это лишняя работа, которая будет требовать вместо 1 скрипта сразу 2-х. Тем более подписывание - это самый верный путь, которого стоит придерживаться в работе. если скрипт скопировать в саму политику GPO. то запусктся от будет уже с локальной машины, и не потребуется его копировать

Comments are closed.