Powershell запускает работу при запуске с правами администратора, используя ScheduledJob

Чтобы облегчить некоторые из моих работ, я создал файл powershell script, который должен:

  • Запуск при запуске.
  • Запуск с правами администратора, поскольку он должен записываться в папку c:\program files.

Я создал службу запуска с помощью powershell, как это:

function MakeStartupService
{
    Write-Host "Adding script as a startup service"
    $trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:15
    Try
    {
      Register-ScheduledJob -Trigger $trigger -FilePath "absolute_path" -Name "Job-name" -EA Stop
    }
    Catch [system.exception]
    {
        Write-Host "Looks like an existing startup service exists for the same. Overwriting existing job"
        Unregister-ScheduledJob "Job-name"
        Register-ScheduledJob -Trigger $trigger -FilePath "absolute_path" -Name "Job-name"
    }
}

Задание регистрируется как служба запуска успешно и отображается внутри планировщика задач. Если я запустил его с помощью Start-Job -DefinitionName Job-name или щелкнув правой кнопкой мыши из Task Scheduler, он отлично работает, но не запускается, когда запускаются окна.

В настоящее время я тестирую это на своей личной системе Windows 10 и проверил в другой системе Windows 10, но поведение оставалось именем. Я прикрепляю снимок экрана окна планировщика задач для этого задания. введите описание изображения здесь

Извините, если этот вопрос звучит неоднократно или немой (я новичок в PowerShell), но поверьте, ни одно из решений, которые я нашел в Интернете, не работало для этого.

Спасибо заранее!

Ответы

Ответ 1

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

function Invoke-PrepareScheduledTask
{
    $taskName = "UCM_MSSQL"
    $task = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue
    if ($task -ne $null)
    {
        Unregister-ScheduledTask -TaskName $taskName -Confirm:$false 
    }

    # TODO: EDIT THIS STUFF AS NEEDED...
    $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-File "C:\Invoke-MYSCRIPT.ps1"'
    $trigger = New-ScheduledTaskTrigger -AtStartup -RandomDelay 00:00:30
    $settings = New-ScheduledTaskSettingsSet -Compatibility Win8

    $principal = New-ScheduledTaskPrincipal -UserId SYSTEM -LogonType ServiceAccount -RunLevel Highest

    $definition = New-ScheduledTask -Action $action -Principal $principal -Trigger $trigger -Settings $settings -Description "Run $($taskName) at startup"

    Register-ScheduledTask -TaskName $taskName -InputObject $definition

    $task = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue

    # TODO: LOG AS NEEDED...
    if ($task -ne $null)
    {
        Write-Output "Created scheduled task: '$($task.ToString())'."
    }
    else
    {
        Write-Output "Created scheduled task: FAILED."
    }
}

Ответ 2

Если это работает, это не проблема script. Присвойте его учетной записи SYSTEM или сделайте отдельную учетную запись службы, а не показанную учетную запись Gagan. Убедитесь, что учетная запись службы имеет "Разрешение на запуск как пакетное задание" в локальной политике безопасности.

Ответ 3

Установите флажок " Выполнить с наивысшими привилегиями" для задачи в планировщике задач и повторите попытку. В настоящее время на скриншоте выше он не отмечен.

Я обвел его красным цветом для вашей легкой ссылки: checkbox required checked

Ответ 4

Вот статья в блоге Microsoft о том, что вы можете проверить, если ваша запланированная задача не запущена: https://blogs.technet.microsoft.com/askperf/2015/02/18/help-my-scheduled-task-does-not-run/

Как упоминалось в других ответах, здесь также говорится:

  • Попробуйте запустить script с учетной записью SYSTEM