it-swarm.com.de

Powershell-Ausführungsjob beim Start mit Administratorrechten unter Verwendung von ScheduledJob

Zur Vereinfachung meiner Arbeit habe ich ein Powershell-Skript erstellt, das Folgendes tun muss: 

  1. Beim Start ausführen.
  2. Führen Sie mit Administratorrechten aus, da in den Ordner c:\program files geschrieben werden muss.

Ich habe den Startdienst mit Powershell folgendermaßen erstellt:

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

Der Job wurde erfolgreich als Startdienst registriert und ist im Taskplaner sichtbar. Wenn ich es mit Start-Job -DefinitionName Job-name oder durch Rechtsklick aus dem Taskplaner starte, funktioniert es gut, aber es startet nicht, wenn Windows gestartet wird.

Derzeit teste ich dies auf meinem persönlichen Windows 10-System und habe ein anderes Windows 10-System eingecheckt, das Verhalten blieb jedoch bestehen. Ich füge einen Screenshot des Aufgabenplanungsfensters für diesen Job an.  enter image description here

Tut mir leid, wenn sich diese Frage wiederholt oder dumm anhört (ich bin ein Anfänger in Powershell), aber glauben Sie mir, keine der Lösungen, die ich online gefunden habe, hat dafür funktioniert.

Danke im Voraus !!

16
Gagan93

Dies ist der Code, den ich bereits in der Produktion verwende. Wenn es für Sie nicht funktioniert, müssen Sie mit Ihrem System etwas anderes tun.

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."
    }
}
11
Kory Gill

Wenn es funktioniert, ist es kein Skriptproblem. Weisen Sie es dem SYSTEM-Konto zu oder erstellen Sie ein separates Dienstkonto anstelle des angezeigten Gagan-Kontos. Stellen Sie sicher, dass das Dienstkonto in Ihrer lokalen Sicherheitsrichtlinie "Berechtigung zur Ausführung als Batch-Job" hat. 

1
Sencha718

Aktivieren Sie das Kontrollkästchen "Run mit höchsten Berechtigungen" für die Task im Taskplaner, und versuchen Sie es erneut. Im obigen Screenshot ist es derzeit nicht aktiviert.

Ich habe es unten in rot für eine einfache Referenz eingekreist:  checkbox required checked

0
Aman Sharma

Hier ist ein Blogartikel von Microsoft, den Sie überprüfen können, wenn Ihre geplante Aufgabe nicht ausgeführt wird: https://blogs.technet.Microsoft.com/askperf/2015/02/18/help-my-scheduled-task- läuft nicht/

Wie auch in anderen Antworten erwähnt, heißt es auch:

  • Versuchen Sie, Ihr Skript mit dem SYSTEM-Konto auszuführen
0
A189198