Запланированная задача Powershell не выполняется

Я добавил задачу сценария powershell в планировщик задач, назначил учетной записи пользователя Admin, а затем установил параметр "Запускать только когда пользователь вошел в систему".

Когда я запускаю эту задачу вручную, она выполняется правильно, но когда я установил параметр "Запускать, вошел ли пользователь в систему или нет", он выполняется, но никогда не завершает задачу успешно.

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

РЕДАКТИРОВАТЬ:

Скрипт копирует файл с подключенного диска в локальный каталог. Когда я запускаю скрипт построчно, используя Powershell вместо планировщика задач, он работает (как на обычном, так и на повышенном Powershell).

$currentDate = (Get-Date).AddDays(-1).ToString('yyyyMMdd');

gci "C:\some_directory" | where-object { ($_.Name -match $currentDate) -and (! $_.PSIsContainer) } | Copy-Item -Destination "Y:\" -force;

и в планировщике задач: Powershell -Command "c:\scripts\my_script.ps1"

1 ответ

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

$currentDate = (Get-Date).AddDays(-1).ToString('yyyyMMdd')
$log = "c:\temp\logfile.txt"
$errorCount = $Error.Count

# Save the source files into an array
$files = @(gci "C:\some_directory" | ? {
  ($_.Name -match $currentDate) -and (! $_.PSIsContainer) 
})

# Log about source to see if $files is empty for some reason    
Add-Content $log $("Source file count: {0}" -f $files.Count)
# Check that Y: drive is available
Add-Content $log $("Testing access to destination: {0}" -f (test-path "y:\") )

$files | % {
  # Check the error count for new errors and log the message
  if($Error.Count -gt $errorCount) {
    Add-Content $log $Error
    $errorCount = $Error.Count
  }
  Copy-Item $_.FullName -Destination $(join-path "y:" $_.Name) -force
}
Другие вопросы по тегам