Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Powershell run job at startup with admin rights using ScheduledJob

Tags:

To ease some of my work I have created a powershell script which needs to :

  1. Run at startup.
  2. Run with admin rights as it has to write in c:\program files folder.

I created the startup service using powershell like this :

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"     } } 

The job is registered as a startup service successfully and is visible inside task scheduler. If I start it using Start-Job -DefinitionName Job-name or by right clicking from Task Scheduler, it works fine but it doesn't start when windows starts.

Currently I am testing this on my personal Windows 10 system, and have checked in another windows 10 system but the behavior remained name. I am attaching screenshot of task scheduler window for this job. enter image description here

Sorry if this questions sounds repeated or dumb (I am a beginner in powershell), but believe me, none of the solutions I found online worked for this.

Thanks in advance !!

like image 386
Gagan93 Avatar asked Apr 25 '16 16:04

Gagan93


People also ask

How do I run a PowerShell script with administrator privileges?

Use the Run Application You can open Windows PowerShell with administrator privileges from Run. First, press Windows+R to open Run, and then type “powershell” in the text box. Next, press Ctrl+Shift+Enter. Windows PowerShell will open in admin mode.

How do I run PowerShell as administrator on startup?

To create the job trigger, open the Windows PowerShell console with admin rights by right clicking the Windows PowerShell icon on the Start page or from the task bar, and then choosing Run as Administrator from the action menu.

How do I run a PowerShell command in the background?

The Start-Job cmdlet starts a PowerShell background job on the local computer. A PowerShell background job runs a command without interacting with the current session. When you start a background job, a job object returns immediately, even if the job takes an extended time to finish.


1 Answers

This is code that is already in production that I use. If it does not work for you, you must have something else going on with your system.

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."     } } 
like image 181
Kory Gill Avatar answered Sep 29 '22 01:09

Kory Gill