Страница 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
WSUS_Clean.png (14.28 КБ) 14881 просмотр

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

Добавлено: 25 фев 2016 10:51
Алексей Максимов
Проверьте запуск скрипта интерактивно, запустив команду шедулера от имени SYSTEM. Для этого можно воспользоваться утилитой PsExec.exe с ключом -s

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

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
Алексей Максимов
Чтобы говорить о предпочтениях, нужно понимать суть задачи, которую выполняет скрипт.