PowerShell 在启动时使用任务计划程序启动脚本

问题描述 投票:0回答:2

我想使用任务计划程序自动运行我的 AutoHotkey 工具包,因为“启动”文件夹在启动时也会弹出 CMD 屏幕,而此方法不会。但是,我无法让以下内容正常工作。启动时什么也没有发生。然后我发现快速启动可能是一个问题(启用此功能时,Windows 实际上会休眠内核,因此冷启动不会触发此问题),因此我调整了从休眠恢复时运行的参数。到目前为止,没有任何效果,我不知道问题出在哪里;我希望对任务计划程序有更多了解的人可能有办法解决这个问题。

# Check if running as administrator
$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (!$isAdmin) {
    Write-Host "You need to run PowerShell as an administrator to run this script."
    return
}

# Import the required module
Import-Module ScheduledTasks

# Specify the script to run at startup
$action = New-ScheduledTaskAction -Execute 'C:\Program Files\AutoHotkey\AutoHotkey.exe' -Argument 'C:\Users\roysu\OneDrive\0_Scripts_AutoHotKey\Basics-AHK\Basics.ahk'

$trigger = New-ScheduledTaskTrigger -AtStartup   # AtStartup defines when it will happen
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -DontStopOnIdleEnd -StartWhenAvailable   # Allow the task to be run on demand
$principal = New-ScheduledTaskPrincipal -UserId "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount   # Required for Fast Start situations

# Register the scheduled task
Register-ScheduledTask -TaskName "Run Basics.ahk at Startup" -Action $action -Trigger $trigger -Settings $settings -Description "Run a script at startup" -Principal $principal

powershell scheduled-tasks autohotkey startup startupscript
2个回答
1
投票

您的任务,鉴于它启动 AutoHotkey 脚本,需要在登录会话的上下文中运行(以在您的窗口站/桌面上执行操作):

  • 确保您的任务在(您的)用户登录

    -AtLogon
    ,而不是在机器启动
    -AtStartup
    )时运行:

    • New-ScheduledTaskTrigger -AtLogon
  • 以您自己的用户身份交互运行:

    • New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType Interactive

      • 注意:如果您选择此选项,即使没有海拔,您也应该能够运行任务创建脚本。
    • 或者,要为所有用户运行任务:

      • $user = New-ScheduledTaskPrincipal -GroupId Users
  • 原则上,这会在登录时运行任务visible,但是启动

    .ahk
    脚本本身并不会创建可见窗口(它只会向通知区域添加一个图标),所以这不应该是一个问题。

      通常,如果您的操作启动
    • console子系统应用程序,您可以隐藏控制台窗口,该窗口总是通过GUI子系统帮助程序应用程序创建,该应用程序本身不创建窗口并启动隐藏的控制台应用程序。 例如,您可以使用通过
      wscript.exe
       启动的助手 VBScript,如
      这个答案所示。

0
投票
在脚本的顶部,他们创建了一个内置的“关键字”来为您完成所有这些操作,而不是查看主机是否已提升的所有代码。只需将此注释添加到脚本的顶行即可。

#Requires -RunAsAdministrator
您可以使用“help about_Requires”阅读更多相关信息,它工作得非常好,并且可以节省您自己编写所有代码的时间。

计划任务 CMDLET 的所有内容看起来都是正确的,并且完美遵循

示例。我唯一无法复制的是 autohotkey 实用程序。我知道它是什么,但我不使用它,也没有安装它。

是任务没有创建的问题,还是在Windows任务计划程序中但没有触发的问题?您可能需要确保目标计算机安装了自动热键。您可以使用测试路径 CMDLET 来确保它首先存在。但我需要更多详细信息,因为在我看来一切都是正确的,应该为您添加任务。

© www.soinside.com 2019 - 2024. All rights reserved.