首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell在启动时使用ScheduledJob运行具有管理权限的作业

Powershell在启动时使用ScheduledJob运行具有管理权限的作业
EN

Stack Overflow用户
提问于 2016-04-25 16:59:07
回答 4查看 17.9K关注 0票数 22

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

  1. 在启动时运行。
  2. 使用管理员权限运行,因为它必须在c:\program文件夹中写入。

我使用powershell创建了启动服务,如下所示:

代码语言:javascript
复制
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 10系统上测试这一点,并且已经签入了另一个windows 10系统,但是行为仍然是名称。我是附加的任务调度程序窗口的屏幕截图为这项工作。

对不起,如果这个问题听起来很重复或愚蠢(我是powershell的初学者),但是相信我,我在网上找到的解决方案都没有用。

提前谢谢!!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-07 19:55:21

这是我已经在生产中使用的代码。如果它对你不起作用,你必须对你的系统做些别的事情。

代码语言:javascript
复制
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."
    }
}
票数 18
EN

Stack Overflow用户

发布于 2016-09-06 20:31:41

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

票数 2
EN

Stack Overflow用户

发布于 2021-10-18 14:35:39

如果你想摆脱那些“关于电池”的废话,再加上

代码语言:javascript
复制
-DontStopIfGoingOnBatteries -AllowStartIfOnBatteries

到选项。

因此,在Kory Gill的答案中,$settings变成了:

代码语言:javascript
复制
$settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -DontStopIfGoingOnBatteries -AllowStartIfOnBatteries

因此,任务将被创建,以摆脱电池限制。

如果您只想修改现有任务,可以使用以下方法完成:

代码语言:javascript
复制
Set-ScheduledTask -taskname "taskName" -settings $(New-ScheduledTaskSettingsSet -DontStopIfGoingOnBatteries -AllowStartIfOnBatteries)

或来自cmd:

代码语言:javascript
复制
powershell -executionpolicy bypass Set-ScheduledTask -taskname "taskName" -settings $(New-ScheduledTaskSettingsSet -DontStopIfGoingOnBatteries -AllowStartIfOnBatteries)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36846688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档