Сценарій powerhell планувальника завдань - Як

Сценарій powerhell планувальника завдань

як запустити будь-яку програму з сценарію PowerShell і запустити її за допомогою планувальника завдань

Загалом 5 кроків

Крок 1: Створіть сценарій

напишіть сценарій powershell, щоб викликати вашу програму
Я написав це для синхронізації серверів на віддалених сайтах із центром обробки даних у штаб-квартирі:

#custom скрипт для запуску профілю групи синхронізації та надсилання комбінованих файлів журналів

$ today = get-date -Формат "yyddMM"
if ([intptr] :: розмір -eq 8) {
#OS - 64 біт
$ AppPath = "$ Env: Програмні файли (x86)
}
else {
#OS не 64bit
$ AppPath = "$ Env: ProgramFiles Syncback"
}
$ Servername = $ env: ComputerName
$ logname = $ today + "_" + $ Servername + "_Synclog.log"

Команда #next повинна запускатися лише один раз при першому використанні цього сценарію
# new-EventLog -LogName Application -source SyncBack

cd $ AppPath
Викликати вираз ". t з нуля
Write-EventLog -LogName Application -source SyncBack -eventid 1000 -назва про тип-повідомлення "Процес SyncBack завершено"
gci "$ AppPath Sync * log.txt" | Get-Content | add-content "$ AppPath

Send-MailMessage -To '[email protected]' -З '[email protected]' -SmtpServer 'mailserver' -Subject "Завдання синхронізації на $ ServerName завершено" -Body "в додатку файл синхронізації '-Attachments $ logname

Крок 2: відредагуйте сценарій відповідно до ваших потреб

майте на увазі, що цей сценарій є роботою, що триває
Вам потрібно буде змінити деякі змінні, наприклад, адресу електронної пошти, на яку ви її надіслали

Крім того, якщо ви знайомі з syncback, ви будете знати, як взяти до уваги ім'я вашого профілю, що викликається, та їхні файли журналів

Команда invoke-expression, яка передається на нуль, гарантує, що скрипт чекає завершення процесу
ви також можете пропустити вивід вашої викликаної команди в текстовий файл або навіть змінну, якщо ви хочете використовувати її для подальшого використання під час виконання сценарію

при написанні подій-подій приємно мати це, це дозволить вам записати вихід команди або власного опису в журнал подій програми на сервері
спочатку потрібно зареєструвати запис за допомогою команди new-eventlog

Мені все ще потрібно реалізувати, якщо потім блок, щоб відправити успіх або невдачу в журнал подій
це особливо зручно, оскільки ми використовуємо System Center для моніторингу всіх серверів
таким чином я можу викликати попередження, якщо будь-яке таке завдання не вдасться

Крок 3: Політика виконання Powershell

переконайтеся, що ви змінили політику виконання на remotesigned або ваш сценарій не буде працювати, якщо скопійовано з іншого комп'ютера, і ви отримаєте наступну помилку:

Файл C: windows SyncData.ps1 не може бути завантажений, оскільки виконання скриптів вимкнено на цій системі. Докладніше див. У розділі "get-help about_signing".

введіть set-executionpolicy remotesigned і підтвердьте, відповівши Yes

Крок 4: заплануйте сценарій PowerShell

це виклик командного рядка для сценарію PowerShell:

C: WINDOWS system32 WindowsPowerShell v1.0 powerhell.exe -команда "&" c: windows t

папка windows, як правило, відомий шлях, тому вам не потрібно вказувати повний шлях, тому я використовую його, але ви можете використовувати будь-яку іншу папку, яка вам подобається, якщо ви вказуєте повний шлях до сценарію

Крок 5: налаштування синхронізації

якщо ви викликаєте syncback, вам доведеться використовувати той самий обліковий запис для виконання завдання, як це було зроблено при створенні профілів

syncback зберігає ці налаштування профілів у реєстрі користувачів, тому використання будь-якого іншого облікового запису не зможе прочитати ці налаштування і не буде виконано

найпростішим способом є використання облікового запису адміністратора для входу на сервер, створення профілів і введення цих облікових даних для запуску завдання

як альтернативу можна також імпортувати ці параметри до реєстру користувачів облікового запису, який потрібно використовувати для запланованого завдання

це просто, щоб показати вам, як використовувати powershell для INVOKE будь-якої іншої програми, яку ви бажаєте запланувати як завдання

Тому я переключився на використання PowerShell замість того, щоб викликати саму програму, що я можу об'єднати декілька програм, які будуть виконуватися в послідовності з одним графіком
Використання труби out-null дозволить переконатися, що перша програма завершилася до того, як буде викликана наступна програма

у цьому випадку було б приємно мати можливість поєднати лог-файли в один великий файл і відправити його до контрольованої поштової скриньки