Назад | Перейти на главную страницу

Сценарий PowerShell не выполняется для запланированной задачи

Я пытался настроить сценарий PowerShell для запуска как части запланированной задачи на сервере Windows Server 2012 R2. Сценарий запустится, если я выполню его вручную из графического интерфейса, но все мои попытки запустить его из задачи, кроме одной, потерпели неудачу.

После некоторого устранения неполадок я обнаружил, что если я устанавливаю задачу «Запускать только при входе пользователя в систему» ​​и выполняю задачу, она работает нормально. Он открывает окно PowerShell, запускает сценарий и закрывается. Похоже, что я на правильном пути, и я, возможно, сузил круг вопросов относительно того, в чем проблема, но я не знаю, что делать дальше. Очевидно, я хотел бы, чтобы сценарий выполнялся независимо от того, вошел я в систему или нет.

На всякий случай вот сценарий, который я запускаю:

    Get-ChildItem C:\somefolder -Recurse| 
    Where-Object{$_.PsIsContainer}| Sort-Object CreationTime -desc| 
    Select-Object -Skip 3| Remove-Item -Force

Где я могу смотреть отсюда? Я смог без проблем запускать сценарии PowerShell таким образом с сервера 2008, но я просто не могу взломать этот.

РЕДАКТИРОВАТЬ: для действия задачи, установленной для запуска программы, и в разделе «Программа / сценарий» у меня есть «powershell», затем «. \ Myscript.ps1» для аргументации, затем «c: \» для запуска.

Наконец понял это:

Проблема оказалась в том, что я пытался чем-то манипулировать на сетевом диске. Я узнал, что даже если у вас уже есть подключенный диск в Windows, вы НЕОБХОДИМО отключить и переназначить диск как часть вашего скрипта для неинтерактивного управления файлами через скрипт PowerShell.

Вот что я добавил в свой сценарий PowerShell, чтобы он заработал:

$secpasswd = ConvertTo-SecureString "YourPassword" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("username", $secpasswd)

Remove-PSDrive –Name “Z”

New-PSDrive –Name “Z” –PSProvider FileSystem –Root “\\192.168.X.X\backup” –Persist -Credential $mycreds

Что-то с кэшируемыми учетными данными происходит, когда вы вошли в систему, но не используется, когда вы запускаете тот же сценарий через диспетчер задач.

Большое спасибо за все ответы, которые я получил на этот вопрос, это действительно помогло мне, наконец, разобраться в этом, надеюсь, это поможет и кому-то еще.

Последнее замечание: этот же метод работал и с пакетными файлами на том же сервере.

Можете ли вы попробовать запустить следующее:

powershell -noprofile -noexit -executionpolicy bypass -file C:\path\script.ps1

Также убедитесь, что для: get-executionpolicy установлено значение RemoteSigned.

Также отметьте «Запускать» вне зависимости от того, вошел ли пользователь в систему или нет.

Вы пробовали изменять настройки UAC для администраторов на контроллерах домена? (лучше всего сделать это через GPO) Есть 3 различных параметра, которые нужно изменить, чтобы скрипт Powershel работал в рамках запланированной задачи. Эти 3 параметра политики UAC можно найти в разделе Конфигурация компьютера >> Политики >> Настройки Windows >> Настройки безопасности >> Местная политика >> Параметры безопасности: - Контроль учетных записей пользователей: Режим утверждения администратором для встроенной учетной записи администратора (Не определено) - Контроль учетных записей пользователей: Запустить всех администраторов в режиме одобрения администратором (Отключено) - Контроль учетных записей пользователей: Поведение запроса на повышение прав для администраторов в режиме одобрения администратором (Поднимите без подсказки) Настройте их так, чтобы UAC не срабатывал, когда запланированная задача выполняется с учетной записью с правами администратора.

Вы, конечно, должны были выбрать вариант "Запускать всякий раз, когда пользователь входит в систему или нет"в общих параметрах конфигурации запланированной задачи.