автоматический запуск скрипта powershell
Автоматический запуск скрипта powershell
Добрый день! Уважаемые читатели и гости одного из крупнейших IT порталов в России Pyatilistnik.org. В прошлый раз вы меня просили рассказать вам, о рабочих методах исправления черного экрана Windows 10 и я с вами ими поделился. Так как направленность моего ресурса больше рассчитана на системных администраторов и продвинутых пользователей, то я сегодня хочу вновь поговорить про групповые политики и автоматизацию получаемую благодаря им. В данной публикации речь пойдет, о запуске скрипта PowerShell средствами GPO (Групповой политики), мы рассмотрим все варианты доступные администраторам.
Постановка задачи
Когда начинающий системный администратор превращается в матерого админа, он хочет везде все автоматизировать и везде экономить свое время, и это логично люди существа любящие комфорт и лень. Рабочая среда Active Directory позволяет, как все знаете через групповые политики настройку почти всех компонентов в системе, а что не может замещается средствами PowerShell, вот такой симбиоз. В нашу задачу входит научиться запускать при загрузке компьютера или при входе пользователя на компьютер или сервер, наш скрипт PowerShell, который реализует ту или иную задачу, это не важно, пусть например монтирует базы 1С.
Методы запуска скрипта PowerShell через GPO
Существует несколько сценариев позволяющих вам применять к вашим объектам нужные скрипты:
Запуск PowerShell скрипта в автозагрузке сервера
Открываем оснастку «Управление групповой политикой» и создаем на нужном уровне вашей иерархии организационных подразделений, новую политику, в моем примере, это будет «Добавление баз 1С». Переходим к ее редактированию.
Для того, чтобы при загрузке вашего сервера или компьютера, к нему применялся нужный вам сценарий PowerShell вам необходимо перейти в раздел:
Тут вы увидите два возможных варианта «Автозагрузка» и «Завершение работы»
Далее вы открываете пункт «Автозагрузка», переходите на вкладку «Сценарий PowerShell» и нажимаете кнопку «Добавить«. Через окно «добавление сценария» откройте папку «Startup» и скопируйте туда ваш скрипт. Теперь данный файл будет частью папки Sysvol и располагаться в конкретном GPO объекте.
Так же хочу отметить, что вы можете задать порядок выполнения PowerShell сценария в соответствующей области, выбрав будет ли он выполнятся после других сценариев или перед.
Еще есть ряд нюансов при использовании выполнения скриптов PowerShell средствами групповой политики:
Хочу отметить, что начиная с Windows Server 2012 R2, Windows 8.1 и выше, все запускаемые сценарии PowerShell через GPO работают в режиме Bypass, что подразумевает игнорирование политики Set-ExecutionPolicy. Но если у вас есть более старые клиенты, то вы можете пойти вот таким путем:
Вы можете явно указать исполняемый файл PowerShell, для этого в политике откройте вкладку «Сценарии», нажмите добавить. В имя сценария введите путь до файла powerShell, это:
В параметрах сценария введите вот такие ключи и сетевой путь до скрипта PowerShell.
Еще для подстраховки вы можете включить параметр GPO
Активируем настройку «Включить выполнение сценариев (Turn On Script Execution)», выставим значение «Разрешать все сценарии«.
Проверяем применение вашей GPO, если все настроили правильно она отработает если нет, то начинается траблшутинг, проверяете фильтры GPO и общий алгоритм поиска проблем.
Запуск PowerShell скрипта для пользователя
Чтобы применить к пользователю ваш скрипт, вам необходимо в объекте групповой политики открыть вот такую ветку:
Тут будет два варианта «Вход в систему» и «Выход из системы».
Настраиваем аналогично, как я показывал выше для компьютера, все одинаково.
Выполнение сценариев PowerShell по расписанию
Тут все просто, если вы хотите средствами групповой политики запускать скрипты PowerShell по расписанию, то вам нужно создать задание в шедуллере. Для этого есть ветки GPO:
Указываем в задании нужное время, имя и сетевой путь до скрипта.
Блог Сисадмина
Полезная информация об администрировании пользовательских и серверных ОС Windows.
Запуск PowerShell скрипта в автозагрузке Windows 10
Сначала в локальной политике безопасности необходимо включить возможность запуска не подписанных скриптов. Для этого запускаем cmd от имени администратора, оттуда запускаем gpedit (или сразу запускаем gpedit.msc через «Выполнить»). Затем идем сюда:
Конфигурация компьютера — Административные шаблоны — Компоненты Windows — Windows Powershell. Нажимаем два раза на «Включить выполнение скриптов». Выбираем «Включить», и ниже «Разрешить все».
Затем создаем cmd файл в любой папке, например C:\script\ics.cmd, такого содержания:
Где ics_reenable.ps1 — сам powershell скрипт.
И создаем в планировщике задачу, с триггером «включение компьютера» или «вход в систему».
Также при необходимости ставим галочки «запускать с наивысшими правами» и «запускать независимо от входа пользователя в систему».
Запуск PowerShell скрипта в автозагрузке Windows 10 : 2 комментария
Вопрос. Почему может не отрабатывать скрипт PowerShell из планировщика задач, если в действие указан сетевой путь? Прав хватает, ExecutionPolicy вроде тоже.
Спасибо большое. Все работает. Я всегда делаю тесты на каждом этапе. Отключил общий доступ, запустил разовый доступ, проверил — все огонь. Затем сохранил скрипт и создал cmd, запустил с правами администратора — все огонь. и т.д.
Настройка сценария PowerShell для автоматического выполнения
У меня есть несколько строк кода PowerShell, которые я хотел бы использовать в качестве автоматического скрипта. Я хотел бы, чтобы он мог работать, чтобы иметь возможность вызывать его, используя один из следующих вариантов:
Я просматривал документацию PowerShell в интернете, и хотя я могу найти много сценариев, я не смог найти инструкции о том, как сделать то, что мне нужно. Спасибо за помощь.
5 ответов
убедитесь, что вы указали полный путь к скрипту и установили уровень политики выполнения по крайней мере «RemoteSigned», чтобы можно было запускать неподписанные локальные скрипты.
Если вам нужно поддерживать приведенные аргументы, есть более длинная версия, которая также позволяет комментировать. (обратите внимание на необычный трюк комментирования CMD double @).
Я могу запустить его, дважды щелкнув файл, создав пакетный файл со следующим:
запустить скрипт автоматически из другого скрипта (например, пакетный файл)
или если рабочий каталог вашего пакетного файла является тем же каталогом, что и сценарий PowerShell, вы можете использовать относительный путь:
и прежде чем это будет работать, вам нужно будет установить политику выполнения ПК, которую я покажу, как это сделать под.
Запустить Скрипт Вручную Методом 1
замена MyPowerShellScript.ps1 в 3-й строке с именем файла сценария PowerShell.
это позволит вы просто дважды щелкните пакетный файл для запуска сценария PowerShell и избежите необходимости изменять политику выполнения PowerShell.
в моем блоге также показано, как запустить сценарий PowerShell в качестве администратора, если это то, что вам нужно сделать.
Запустить Скрипт Вручную Методом 2
существует дополнительный параметр реестра, который вы хотите изменить, чтобы вы могли запускать скрипты, путь к файлу которых содержит пробелы. Я показываю, как делать обе эти вещи на этом блоге.
однако с помощью этого метода вам сначала нужно будет установить политику выполнения, чтобы разрешить запуск сценариев. Вам нужно сделать это только один раз на ПК, и это можно сделать, запустив эту строку в Командной строки PowerShell.
Запуск PowerShell скрипта в Планировщике заданий
Системному администратору часто приходится писать разные скрипты и настраивать их запуск по расписанию в Планировщике заданий (Task Scheduler). Простой пример ниже.
Написал небольшой скрипт и сохранил по адресу:
Я хочу, чтобы этот скрипт запускался каждые 10 минут. Время работы скрипта — не более 60 секунд.
Открываю Планировщик заданий. Создаю попку, в которой будет находиться расписание, называю её IIS.
Нажимаю Create Task.
В первой вкладке General указываю:
Перехож на вкладку Triggers. Здесь нужно создать триггер для расписания. New.
В настройках триггера:
Перехожу на вкладку Actions. Здесь нужно указать скрипт для выполнения. New.
Путь к выполняемому скрипту указан.
Перехожу на вкладку Conditions. Здесь определяются условия для запуска. Устанавливаю одну галку, просто на всякий случай:
Перехожу на вкладку Settings. Здесь есть ряд полезных настроек. Ставлю галки:
Указываю пароль локального администратора. OK.
Теперь скрипт будет запускаться по расписанию. В разделе History можно отслеживать результат выполнения.
Запуск PowerShell скриптов по расписанию
В задачи практически любого системного администратора входит написание различных скриптов и их запуск. Запланировать запуск скрипта по расписанию с помощью Task Sheduler — задача несложная, но при использовании PowerShell есть некоторые нюансы, о которых я расскажу в этой статье.
Итак, предположим, у меня есть скрипт start.ps1, который мне необходимо запускать ежедневно в течении 10 дней. Есть два способа решить эту задачу.
Способ 1
Для запуска скрипта воспользуемся оснасткой Task Scheduler, он же планировщик заданий. Найти его можно в разделе Administrative Tools, либо нажав Win+R и введя команду taskschd.msc. Открываем планировщик и в разделе Actions выбираем пункт Create Task.
На вкладке General указываем имя и описание задания, а также (по необходимости) пользователя, от имени которого задание будет запускаться. Для того, чтобы задание выполнялось вне зависимости от того, залогинен ли пользователь в системе, выбираем опцию «Run whether user is logged on or not». Если для выполнения задания требуется повышение привилегий, то отмечаем опцию «Run with highest privileges».
Далее идем на вкладку Triggers и создаем новый триггер, в котором будет храниться расписание запуска нашего задания. В поле Start указываем дату и время запуска, а в поле Expire — дату и время завершения задания. Указываем выполнять задание ежедневно (Daily) и задаем период повтора (Recur every) 1 день.
Примечание. Если вы хотите запускать задание чаще, чем раз в день, то надо выбрать одноразовое выполнение (One time), а в разделе Advanced settings отметить пункт Repeat task every и указать время повторения, минимум 5 минут, максимум 1 час. Если этого недостаточно, то дополнительно в поле Delay task for up to можно указать временную задержку.
Также в поле аргументы можно указать:
Заполнив необходимые поля жмем ОК и сохраняем задание. Теперь скрипт будет запускаться по расписанию ежедневно в заданное время в течении 10 дней.
Способ 2
В PowerShell 3.0 появился новый функционал Sheduled Job, дающий возможность создавать запланированные задания прямо из консоли, не пользуясь оснасткой планировщика. Воспользуемся им для планового запуска нашего скрипта.
Сначала создаем расписание запуска (ежедневно в полпятого вечера, в течении 10 дней):
Затем сохраняем в переменной учетные данные:
$cred = Get-Credential contoso\administrator
В качестве опции указываем запуск задания с повышенными привилегиями:
И регистрируем задание с именем Start:
Чтобы убедится в том, что задание создано, можно открыть планировщик и найти наше задание в разделе Microsoft\Windows\PowerShell\SheduledJobs.
Примечание. Для каждого запланированного задания PowerShell в директории %systemdrive%\Users\%username%\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs создается одноименная папка. В этой папке находится само задание в XML-файле и папка Output, в которой, в подпапках по времени выполнения, хранится история выполнения задания — результат выполнения (файлs Result.xml) и статус задания (Status.xml). Эти файлы могут пригодиться для отладки и диагностики в том случае, если задание не отрабатывает должным образом.
Execution Policy
• Restricted — блокируется выполнение любых скриптов. Значение по умолчанию;
• AllSigned — разрешено выполнение скриптов, имеющих цифровую подпись;
• RemoteSigned — скрипты, подготовленные на локальном компьютере, можно запускать без ограничений, скрипты, загруженные из Интернета — только при наличии цифровой подписи;
• Unrestricted — разрешено выполнение любых скриптов. При запуске неподписанного скрипта, который был загружен из Интернета, программа может потребовать подтверждение;
• Bypass — ничего не блокируется, никакие предупреждения и запросы не появляются.
Примечание. Если указанная в команде политика выполнения противоречит групповой политике, то параметр запишется в реестр, но действовать не будет.