Windows Powershell在启动时使用ScheduledJob以管理员权限运行作业

Windows Powershell在启动时使用ScheduledJob以管理员权限运行作业,windows,powershell,startup,Windows,Powershell,Startup,为了简化我的一些工作,我创建了一个powershell脚本,它需要: 在启动时运行 以管理员权限运行,因为它必须写入c:\program files文件夹 我使用powershell创建了启动服务,如下所示: function MakeStartupService { Write-Host "Adding script as a startup service" $trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:15

为了简化我的一些工作,我创建了一个powershell脚本,它需要:

  • 在启动时运行
  • 以管理员权限运行,因为它必须写入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
    或从任务计划程序中右键单击来启动它,它工作正常,但在windows启动时不会启动

    目前,我正在我的个人Windows 10系统上测试此功能,并已在另一个Windows 10系统中进行了检查,但其行为仍然是匿名的。我附上此作业的任务计划程序窗口的屏幕截图。

    很抱歉,如果这个问题听起来重复或愚蠢(我是powershell的初学者),但相信我,我在网上找到的任何解决方案都不能解决这个问题


    提前谢谢

    请选中任务计划程序中任务的“以最高权限运行”复选框,然后重试。当前在上面的屏幕截图中未选中

    为了便于参考,我在下面用红色圈了圈:

    如果它有效,那就不是脚本问题。将其分配给系统帐户或创建单独的服务帐户,而不是所示的Gagan帐户。确保服务帐户在本地安全策略中具有“作为批处理作业运行的权限”

    这是我使用的已经投入生产的代码。如果它对您不起作用,您的系统中肯定还有其他问题

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

    如果选中“以最高权限运行”怎么办?即使这样也不起作用请尝试从作业触发器中删除-RandomDelay参数。只需使用-AtStartup,看看它是否有效。您是否对ScheduledTask开放而不是ScheduledJob?作业是否可以作为系统而不是用户帐户运行?如果是这样的话,我相信我有一个解决方案给你。我的答案在这里被删除为相同的。因此,我只能建议你看看我的答案,因为它确实在做事情。这并不能回答这个问题。一旦你有足够的钱,你将能够;相反是的。我建议使用“系统”帐户来完成任务。这正是其他人发布的脚本所做的。这不是代码的问题。这是运行它的用户权限。Sencha718已正确识别关键要求:用于运行作业的帐户需要“作为批处理作业登录”权限。默认情况下,只有系统帐户具有此权限,但可以将此权限授予其他用户,通常通过本地安全策略。当使用ScheduleTasks GUI创建任务时,这可以自动完成,但PowerShell似乎无法完成。查看新任务主体是否为系统,这是否意味着由自动化作业创建的文件将归系统所有?我希望在启动时以我自己的身份运行powershell脚本,但具有提升的管理员权限。手动方式是在以我自己的身份登录时以管理员权限运行powershell shell,然后执行脚本。这对我很有效,-主体解决了我的问题。我试图通过powershell为帐户管理员创建任务,并作为普通用户登录。即使在手动从任务计划程序执行任务时,该任务也没有运行,并一直说“任务尚未运行”。(0x41303)“上次运行结果”中的“”。计划作业也是如此。如果我在任务调度程序中编辑,它不会要求输入密码。添加主体参数修复了它。添加“-Credential Administrator”也可用于计划的作业,但在通过powershell创建任务时给出了密码提示。@KoryGill我制作了一个名为
    msgbox.exe
    的小程序,我的任务计划程序显示正在运行
    0x41301
    ,但没有显示任何消息框。它是关于程序还是仅仅是messagebox实用程序本身?@arberg怎么办this@turmuka我不认为作为系统/服务帐户运行的计划任务有一个用户可以看到任何UI的桌面。搜索该错误表示任务可能正在运行,我猜应用程序只是坐在那里等待(但没有人可以与它交互以关闭它)。