Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?

AlektroNik
Любопытный
Сообщения: 19
Зарегистрирован: 06 июл 2015 14:06

Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?

Сообщение 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 те же яйца, только в профиль.
Последний раз редактировалось AlektroNik 25 фев 2016 11:10, всего редактировалось 2 раза.
Аватара пользователя
Алексей Максимов
Администратор сайта
Сообщения: 572
Зарегистрирован: 14 сен 2012 06:50
Откуда: г.Сыктывкар
Контактная информация:

Re: Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?

Сообщение Алексей Максимов »

А как Вы определили, что "прав хватает"? Если джоб шедулера запускает скрипт от имени SYSTEM, то соответственно, как минимум, у доменной учётной записи компьютера (например SERVER$) должны быть права на чтение указанного сетевого каталога и на уровне разрешений SMB и на уровне разрешений NTFS.
AlektroNik
Любопытный
Сообщения: 19
Зарегистрирован: 06 июл 2015 14:06

Re: Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?

Сообщение AlektroNik »

Зашел в свойства всей цепочки папок включая сам скрипт и проверил действующие права для SERVER$ \\domain.local\SYSVOL\domain.local\scripts\WSUS_Clean\WSUS_Clean.ps1 ... чтение выполнение.
WSUS_Clean.png
WSUS_Clean.png (14.28 КБ) 14710 просмотров
Аватара пользователя
Алексей Максимов
Администратор сайта
Сообщения: 572
Зарегистрирован: 14 сен 2012 06:50
Откуда: г.Сыктывкар
Контактная информация:

Re: Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?

Сообщение Алексей Максимов »

Проверьте запуск скрипта интерактивно, запустив команду шедулера от имени SYSTEM. Для этого можно воспользоваться утилитой PsExec.exe с ключом -s

Код: Выделить всё

PsExec.exe -s <команда>
AlektroNik
Любопытный
Сообщения: 19
Зарегистрирован: 06 июл 2015 14:06

Re: Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?

Сообщение 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
Сейчас припоминаю ... но смутно, что вроде сетевые скрипты должны быть в любом случае подписаны иначе не будут выполняться. Так? Или все таки можно без подписи выполнить скрипт из сетевой шары?
И если не сложно вкратце командочку как подписывать?
Аватара пользователя
Алексей Максимов
Администратор сайта
Сообщения: 572
Зарегистрирован: 14 сен 2012 06:50
Откуда: г.Сыктывкар
Контактная информация:

Re: Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?

Сообщение Алексей Максимов »

Однако текста ошибки я от Вас так и не дождался.

Как вариант, перед выполнением скрипта понизить уровень безопасности, а после выполнения - вернуть его в прежнее состояние.

Код: Выделить всё

Set-ExecutionPolicy -ExecutionPolicy Unrestricted
...
<команды работы с сетевыми скриптами>
...
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Другой вариант (более правильный с точки зрения безопасности) - подписать свои скрипты. Пример того, как это сделать, можно найти в статье Подписывание скриптов PowerShell – практическое руководство (часть 1)
AlektroNik
Любопытный
Сообщения: 19
Зарегистрирован: 06 июл 2015 14:06

Re: Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?

Сообщение 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 или лучше в сторону подписывания скриптов?
AlektroNik
Любопытный
Сообщения: 19
Зарегистрирован: 06 июл 2015 14:06

Re: Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?

Сообщение AlektroNik »

Ну я ожидал, что вы именно так и ответите :) Просто я бы тоже так ответил :).
А вы как предпочитаете делать?
Большое спасибо за помощь. ;)
Аватара пользователя
Алексей Максимов
Администратор сайта
Сообщения: 572
Зарегистрирован: 14 сен 2012 06:50
Откуда: г.Сыктывкар
Контактная информация:

Re: Как запустить из планировщика задач PowerShell скрипт расположенный в сетевой шаре?

Сообщение Алексей Максимов »

Чтобы говорить о предпочтениях, нужно понимать суть задачи, которую выполняет скрипт.
Ответить

Вернуться в «Powershell»