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

Я добавил задачу сценария powershell в планировщик заданий, установил учетную запись пользователя как администратора, а затем установил параметр «Выполнять только при входе пользователя в систему».

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

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

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

Скрипт копирует файл с подключенного диска в локальный каталог. Когда я запускаю скрипт построчно, используя 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"


person Bahamut    schedule 11.10.2013    source источник
comment
Не могли бы вы добавить, что делает скрипт?   -  person CB.    schedule 11.10.2013
comment
Привет, я обновил свой пост.   -  person Bahamut    schedule 11.10.2013
comment
Добавьте операторы ведения журнала в скрипт, чтобы увидеть, на каком этапе он не работает. Используйте Write-Eventlog для входа в журнал событий или Add-Content для входа в файл.   -  person vonPryz    schedule 11.10.2013
comment
@vonPryz привет, я делаю gc ... | где ... | элемент копирования, могу ли я добавить к нему журнал событий записи?   -  person Bahamut    schedule 11.10.2013
comment
Отредактируйте свой пост и покажите сценарий.   -  person vonPryz    schedule 11.10.2013
comment
обновил пост для скрипта   -  person Bahamut    schedule 11.10.2013
comment
При таких проблемах я обнаружил, что добавление Start-Transcript с известным именем файла (которое, как я знаю, может записывать удостоверение, выполняющее сценарий) с большим количеством журналов в сценарии имеет большое значение для определения того, что не удалось. В крайних случаях также может помочь Process Monitor, но для работы требуется много данных. даже для тривиального сценария.   -  person Richard    schedule 11.10.2013


Ответы (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
}
person vonPryz    schedule 11.10.2013
comment
Copy-Item $_ -Destination y:\ -force ищет файлы в папке сценария, а не в C:\some_directory. Я новичок в powershell, так как мне сделать Copy-Item $directory + $filename -Destination Y:\ -force - person Bahamut; 11.10.2013
comment
@Bahamut, см. обновленную команду Copy-Item, которая использует свойства FullName и Name. - person vonPryz; 11.10.2013