Страница 1 из 2
Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?
Добавлено: 25 фев 2016 09:51
AlektroNik
Ситуация следующая:
Есть cкрипт \\domain.local\SYSVOL\domain.local\scripts\WSUS_Clean.ps1.
Создана задача с запуском от имени пользователя «система» с выполнением с наивысшим правами.
Действие: PowerShell -Command "& {\\domain.local\SYSVOL\domain.local\scripts\WSUS_Clean\WSUS_Clean.ps1}"
Если запуская просто из консоли cmd или PowerShell с запуском от админа, действие выполняется.
Если кладу скрипт локально на диск «C:\WSUS_Clean.ps1» и меняю команду в планировщике задач на PowerShell -Command "& {C:\WSUS_Clean.ps1}", то задача тоже выполняется.
НО если выполнять действие с указанием не сетевую шару PowerShell -Command "& {\\domain.local\SYSVOL\domain.local\scripts\WSUS_Clean\WSUS_Clean.ps1}", то задача выполняется моментально и завершается удачно, НО скрипт по факту не отрабатывает.
Вопрос:
Почему может не отрабатывать скрипт PowerShell из планировщика задач, если в действие указан сетевой путь? Прав хватает, ExecutionPolicy вроде тоже. PowerShell -File те же яйца, только в профиль.
Re: Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?
Добавлено: 25 фев 2016 10:33
Алексей Максимов
А как Вы определили, что "прав хватает"? Если джоб шедулера запускает скрипт от имени SYSTEM, то соответственно, как минимум, у доменной учётной записи компьютера (например SERVER$) должны быть права на чтение указанного сетевого каталога и на уровне разрешений SMB и на уровне разрешений NTFS.
Re: Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?
Добавлено: 25 фев 2016 10:40
AlektroNik
Зашел в свойства всей цепочки папок включая сам скрипт и проверил действующие права для SERVER$ \\domain.local\SYSVOL\domain.local\scripts\WSUS_Clean\WSUS_Clean.ps1 ... чтение выполнение.
- WSUS_Clean.png (14.28 КБ) 15279 просмотров
Re: Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?
Добавлено: 25 фев 2016 10:51
Алексей Максимов
Проверьте запуск скрипта интерактивно, запустив команду шедулера от имени SYSTEM. Для этого можно воспользоваться утилитой
PsExec.exe с ключом
-s
Re: Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?
Добавлено: 25 фев 2016 11:07
AlektroNik
Я немного по другому сделал. Создал батника и запустил через него ... Psexec -s как то вылетело из головы
К моему удивлению вылезло "... не имеет цифровой подписи". А удивился я потому, что даже указав
Код: Выделить всё
PowerShell -ExecutionPolicy Bypass -Command "& {\\domain.local\SYSVOL\domain.local\scripts\WSUS_Clean\WSUS_Clean.ps1}"
все равно выдает туже самую ошибку.
Вот вывод настроек:
Код: Выделить всё
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy RemoteSigned
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Bypass
Сейчас припоминаю ... но смутно, что вроде сетевые скрипты должны быть в любом случае подписаны иначе не будут выполняться. Так? Или все таки можно без подписи выполнить скрипт из сетевой шары?
И если не сложно вкратце командочку как подписывать?
Re: Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?
Добавлено: 25 фев 2016 11:18
Алексей Максимов
Однако текста ошибки я от Вас так и не дождался.
Как вариант, перед выполнением скрипта понизить уровень безопасности, а после выполнения - вернуть его в прежнее состояние.
Код: Выделить всё
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
...
<команды работы с сетевыми скриптами>
...
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Другой вариант (более правильный с точки зрения безопасности) - подписать свои скрипты. Пример того, как это сделать, можно найти в статье
Подписывание скриптов PowerShell – практическое руководство (часть 1)
Re: Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?
Добавлено: 25 фев 2016 11:43
AlektroNik
Я же написал
"... не имеет цифровой подписи", лишнее повыкидывал ...
Если полностью то так:
Код: Выделить всё
C:\Windows\system32>PowerShell -ExecutionPolicy Bypass -Command "& {\\domain.local\SYSVOL\domain.local\scripts\WSUS_Clean\WSUS_Clean.ps1}"
Не удается загрузить файл \\domain.local\SYSVOL\domain.local\scripts\WSUS_Clean
\WSUS_Clean.ps1. Файл \\domain.local\SYSVOL\domain.local\scripts\WSUS_Clean\WSU
S_Clean.ps1 не имеет цифровой подписи. Скрипт не будет выполнен в данной систем
е. Введите "get-help about_signing" для получения дополнительных сведений..
строка:1 знак:72
+ & {\\domain.local\SYSVOL\domain.local\scripts\WSUS_Clean\WSUS_Clean.ps1 <<<<
}
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
Дописал ...
1. Пришлось отключить политику GPO, которая централизованно включала
"RemoteSigned" - иначе не давал менять. Видимо поэтому в одну строчку не хотел , странно что ничего не написал в ошибке про политику.
Код: Выделить всё
PowerShell -ExecutionPolicy Bypass -Command "& {\\domain.local\SYSVOL\domain.local\scripts\WSUS_Clean\WSUS_Clean.ps1}"
2. Запустил и все заработало. Теперь пока выполняется скрипт политики выглядят так:
Код: Выделить всё
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Unrestricted
И куда теперь рыть? В сторону исправления политик и их понижения централизованно через GPO или лучше в сторону подписывания скриптов?
Re: Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?
Добавлено: 25 фев 2016 11:46
Алексей Максимов
А это уже Вы у себя спрашивайте
Re: Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?
Добавлено: 25 фев 2016 11:51
AlektroNik
Ну я ожидал, что вы именно так и ответите
Просто я бы тоже так ответил
.
А вы как предпочитаете делать?
Большое спасибо за помощь.
Re: Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?
Добавлено: 25 фев 2016 11:59
Алексей Максимов
Чтобы говорить о предпочтениях, нужно понимать суть задачи, которую выполняет скрипт.