У меня есть сервер Windows Server 2012 R2, на котором выполняется запланированная задача с тремя действиями, каждое из которых выполняет сценарии PowerShell:
Каждое из этих действий "начинается" в соответствующем (и правильном) каталоге:
Первоначально действие третье - Применить ABPs - был настроен точно так же, как и два других, например простая папка "начать в", а затем .\ApplyABPs.ps1
как аргумент. это работал как задумано.
Я хотел добавить журналирование в последний скрипт, поэтому я добавил следующий код в точечный источник моего общего FunctionsLibrary.ps1
файл, создайте файл журнала и напишите в него:
# Call functions file...
. (Join-Path "C:\scripts\" FunctionLibrary.ps1)
# Create a log file
$LogFile = Create-Log -Location $LogfileLocation
Write-Log -Important -Text "==== ApplyABPs.ps1 ====="
Дополнения к ApplyABPs
сценарий и это FunctionLibrary.ps1
Скрипт работает в других файлах.
Если я запустил это ApplyABPs.ps1
скрипт из PowerShell ISE, он работает как задумано - создает файл журнала и записывает в него.
Однако, когда я затем пытаюсь запустить запланированную задачу, первые два действия выполняются как обычно, но третье действие терпит неудачу:
Этот код не дает мне много подробностей, но Last Run Result
в верхней части планировщика заданий написано The directory name is invalid. (0x8007010B)
.
Итак ... в целях тестирования я попытался добавить такой же FunctionLibrary.ps1
и изменения кода в сценарии для двух других действий. Планировщик заданий немедленно отказал и возвратил ту же ошибку для самого первого действия.
Когда я затем беру код обратно, действия работают.
Я попытался изменить способ вызова PowerShell из запланированной задачи (отсюда и -executionpolicy bypass
, -noprofile
и -file
параметры на верхнем снимке экрана), но это не имело значения.
На основе directory invalid
сообщение об ошибке, мне интересно, не может ли PowerShell - при вызове запланированной задачи - получить доступ к файлу с точечным источником или чему-то в этом роде?
Если бы кто-нибудь мог пролить свет на эту конкретную ошибку или дать представление о том, как планировщик задач вызывает PowerShell (и каталоги / относительность, которые он использует), это было бы идеально.
Используйте следующий синтаксис для запуска сценария PowerShell в планировщике задач:
Программа / сценарий: C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe
Добавьте аргументы: -NoLogo -Noninteractive -Noprofile -Command "& {C: \ ScriptFolder \ get-LicensingInputFromAD.ps1}"
И используйте полный путь \ имя файла для каждого файла .ps1 в поле аргументов задачи.