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