none
Планировщик задач + cmd-файл RRS feed

  • Вопрос

  • Всем привет!
    Есть скрипт, который копирует последний по дате файл (взят на просторах интернета)

    setlocal
    pushd "F:\" || goto:eof
    for /f "tokens=*" %%i in (' dir /b /od *.bak ') do set "last=%%i"
    xcopy /E "%last%" "Z:\"
    popd

    Если данный файл запускаю вручную - всё отрабатывает, если делаю задание в планировщике - выполнение не происходит, хотя задача завершается успешно.

    Пробовал и на Win 2008r2 и на win 2012r2 std.

    Действие скрипта - запуск программу, где в программе указан абсолютный путь до cmd-файла.

    В задаче добавлял рабочую папку - не помогает. 

    Подскажите, что еще можно попробовать? Либо как обойти этот момент?

    30 августа 2019 г. 7:34

Ответы

Все ответы

  • Здравствуйте. Попробуйте сначала вывод какой либо информации, чтоб точно понять, а выполняется ли сам скрипт?

    echo world >> C:\1.txt

    Если нет, делайте экспорт задания, посмотрим.

    30 августа 2019 г. 8:27
  • echo world >> C:\1.txt - работает даже из планировщика заданий

    Вот экспорт проблемного задания

    <Task xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task" version="1.3">
    <RegistrationInfo>
    <Date>2019-08-29T13:16:28.5381738</Date>
    <Author>SQL1\Администратор</Author>
    </RegistrationInfo>
    <Triggers>
    <CalendarTrigger>
    <StartBoundary>2019-08-29T22:15:44</StartBoundary>
    <Enabled>true</Enabled>
    <ScheduleByDay>
    <DaysInterval>1</DaysInterval>
    </ScheduleByDay>
    </CalendarTrigger>
    </Triggers>
    <Principals>
    <Principal id="Author">
    <UserId>SQL1\Администратор</UserId>
    <LogonType>Password</LogonType>
    <RunLevel>HighestAvailable</RunLevel>
    </Principal>
    </Principals>
    <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
    <StopOnIdleEnd>true</StopOnIdleEnd>
    <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
    </Settings>
    <Actions Context="Author">
    <Exec>
    <Command>D:\Scripts\Backup.cmd</Command>
    </Exec>
    </Actions>

    </Task>

    Содержание D:\Scripts\Backup.cmd приведено в первом посте


    30 августа 2019 г. 11:01
  • Не знаю, как быть в Вашем коде, но я проверил и у меня работает так.

    Код на PowerShell.

    $path = "C:\Data"
    $file = Get-ChildItem -Path $path | Sort-Object LastWriteTime | Select-Object -Last 1
    
    $sMessage = $path + "\" + $file.Name
    
    Copy-Item $sMessage -Destination "D:\Data"

    Единственное поправьте здесь:

    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

    -ExecutionPolicy Bypass -File "C:\test.ps1"

    У меня находит последний измененный файл в:

    C:\Data

    И перемещает его в:

    D:\Data

    И лучше не запускать от Вашей админской учетной записи задание, выберите "СИСТЕМА".

    Понимаю, что видимо я набыдлокодил, но PowerShell плохо знаю. Может придет батька Vector BCO и по доброте душевной в одну тру строчку сделает.



    30 августа 2019 г. 12:32
  • Спасибо за пример на PS!

    Сделал по Вашей инструкции, переделал скрипт под себя. Руками выполняется корректно. ИЗ планировщика - картина та же. Запускаю, пишет, что выполнено и задача завершилась успешно. Копирования не происходит. Вот экспорт задачи

    <Task xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task" version="1.4">
    <RegistrationInfo>
    <Date>2019-08-29T18:20:39.9330823</Date>
    <Author>administrator</Author>
    </RegistrationInfo>
    <Triggers>
    <CalendarTrigger>
    <StartBoundary>2019-08-29T22:20:25</StartBoundary>
    <Enabled>true</Enabled>
    <ScheduleByDay>
    <DaysInterval>1</DaysInterval>
    </ScheduleByDay>
    </CalendarTrigger>
    </Triggers>
    <Principals>
    <Principal id="Author">
    <UserId>S-1-5-18</UserId>
    <RunLevel>HighestAvailable</RunLevel>
    </Principal>
    </Principals>
    <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
    <StopOnIdleEnd>true</StopOnIdleEnd>
    <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
    </Settings>
    <Actions Context="Author">
    <Exec>
    <Command>
    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
    </Command>
    <Arguments>-ExecutionPolicy Bypass -File "D:\Script\1.ps1"</Arguments>
    </Exec>
    </Actions>

    </Task>

    Прямо напасть какая-то..

    30 августа 2019 г. 13:11
  • У меня выполняется. Посмотрите есть ли права откуда выполняется скрипт и куда копируются документы, на систему ?



    30 августа 2019 г. 13:18
  • Права полные на целевой, там, откуда копирую - на чтение.

    Ставил и запуск от админа задания, не работает. Что-то со связкой скрипт-планировщик. Что - понять не могу... На win 2012R2 std всё делаю.

    30 августа 2019 г. 13:31
  • Ну тогда пока нет идей. Попробуйте выполнить скрипт:

    Add-Content -Value "$(Get-Date)" -Path 'Z:\log.txt' -Encoding UTF8

    Появится файл с датой? Диск нужный поменяйте.



    30 августа 2019 г. 13:44
  • Приветствую.

    В свойствах таска используйте параметр "Выполнять с наивысшими правами",

    так же проверьте настройки UAC.

    То Андрей:

    Таски по умолчанию использую системную учетную запись


    Я не волшебник, только учусь. MCTS, CCNA. Если Вам помог чей-либо ответ, пожалуйста, не забывайте нажать на кнопку "Отметить как ответ" или проголосовать за "полезное сообщение". Disclaimer: Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции работодателя. Вся информация предоставляется как есть, без каких-либо на то гарантий. Блог IT Инженера, Яндекс Дзен, YouTube, GitHub.


    30 августа 2019 г. 14:00
    Модератор
  • Возможно еще нужно -ExecutionPolicy Bypass
    30 августа 2019 г. 14:03
  • Приветствую.

    В свойствах таска используйте параметр "Выполнять с наивысшими правами",

    так же проверьте настройки UAC.

    То Андрей:

    Таски по умолчанию использую системную учетную запись


    Я не волшебник, только учусь. MCTS, CCNA. Если Вам помог чей-либо ответ, пожалуйста, не забывайте нажать на кнопку "Отметить как ответ" или проголосовать за "полезное сообщение". Disclaimer: Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции работодателя. Вся информация предоставляется как есть, без каких-либо на то гарантий. Блог IT Инженера, Яндекс Дзен, YouTube, GitHub.


    В последнем планировщике который выложил автор от системы, с наивысшими.

    А что покажет get-executionpolicy ?

    30 августа 2019 г. 14:05
  • Возможно еще нужно -ExecutionPolicy Bypass
    Емнип правильнее Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

    Я не волшебник, только учусь. MCTS, CCNA. Если Вам помог чей-либо ответ, пожалуйста, не забывайте нажать на кнопку "Отметить как ответ" или проголосовать за "полезное сообщение". Disclaimer: Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции работодателя. Вся информация предоставляется как есть, без каких-либо на то гарантий. Блог IT Инженера, Яндекс Дзен, YouTube, GitHub.

    30 августа 2019 г. 14:09
    Модератор
  • Z: - это не сетевой ли диск? Если сетевой, то в сессии, где выполняется задание планировщика, его может не быть.

    Для проверки там, где вы делали echo world >> C:\1.txt сделайте dir Z:\ >> C:\1.txt


    Слава России!


    • Изменено M.V.V. _ 30 августа 2019 г. 14:20
    30 августа 2019 г. 14:20
  • Да, Z - это сетевой диск.

    cho world >> C:\1.txt сделайте dir Z:\ >> C:\1.txt при смене пути на Z, руками выполняется, а из планировщика нет.

    Как-то можно обойти этот момент?

    30 августа 2019 г. 14:26
  • Вот вывод команды

    PS H:\> Get-ExecutionPolicy
    RemoteSigned

    30 августа 2019 г. 14:27
  • Как-то можно обойти этот момент?

    Используйте вместо имени диска (Z:\) соответствующий ему сетевой путь в формате UNC (\\Server\Share\)


    Слава России!




    • Изменено M.V.V. _ 30 августа 2019 г. 16:57
    • Помечено в качестве ответа LiOH 2 сентября 2019 г. 9:00
    30 августа 2019 г. 16:50
  • Изменение на UNC формат путей в скрипте решило проблему.

    Всем спасибо!

    2 сентября 2019 г. 9:01