如何在计算机启动时运行Powershell脚本



我正在尝试在启动时Daily.ps1运行PowerShell脚本,但是,由于管理员设置(我不能以管理员身份运行,这不是一个选项),我无法通过任务计划程序运行它。例如,这是Daily.ps1的内容:

if (1 -eq 1) {
"Hello there!"
}  
  1. 所以我试图让一个批处理脚本Daily.cmd启动时运行(通过启动文件夹),它运行,但我无法让它运行Daily.ps1,并且我收到一条消息,说正在运行脚本被禁用。(两个文件位于同一目录中)

    powershell C:UsersSimonDesktopDaily.ps1
    

    无法加载文件 C:\Users\Simon\Desktop\Daily.ps1,因为在此系统上禁用了运行脚本

  2. 然后,我尝试使用我学到的直接绕过运行脚本的技巧中的这行代码:

    powershell cat Daily.ps1 | powershell invoke-expression
    

    这有效,但仅适用于一个衬垫。 所以我添加了-raw标志cat,在Powershell中工作,但在CMD中不起作用。 出于某种原因,Daily.ps1的文本仍然存储为字符串数组。(对格式表示歉意)

    cmdlet 命令管道位置 1 处的调用表达式

    提供以下参数的值:

    命令: if (1 -eq 1) {

    • 调用表达式 : 在行:1 字符:14
    • 如果 (1 -eq 1) {
    • 语句块或类型定义中缺少结束"}"。
    • 行:1 字符:1
    • 调用表达式 ~
    • ~~~~~~~~~~~~~~~
  3. 所以我试图将其添加到Daily.cmd

    powershell
    cat -raw Daily.ps1 | powershell-invoke-expression
    

    但是,一旦我进入PowerShell,脚本的其余部分根本不会执行。

我不知道如何让Daily.ps1通过批处理命令运行。 有没有我错过的方法,或者我尝试的方法之一有问题(没有管理员权限)?

编辑:澄清一下,ExecutionPolicy设置为Restricted,并且无法更改。 此外,我可以通过右键单击文件并使用PS运行来运行PowerShell脚本。

创建要在计算机启动时运行的计划任务。将powershell.exe放在"程序/脚本"字段中,-File "C:pathtoyour.ps1"放在"参数"字段中(您可能希望避免将脚本放在用户配置文件中)。将任务设置为无论用户是否登录都运行。

我找到了答案!

在尝试了许多不同的方法之后,我遇到了这行代码,如果ExecutionProperty设置为restricted,它允许您运行 PS 脚本:

start powershell "cat -raw C:UsersSimonDesktopDaily.ps1 | invoke-expression"

这将运行 powershell 并使用将cat -raw [file.ps1]的结果管道到invoke-expression的技巧。 如果ExecutionProperty设置为restricted,这是有用的解决方法。

然后,您可以将此行保存到.cmd.bat文件中,并使用任务计划程序(更具可自定义性)或将其放在启动文件夹中。

附言对于所有一直说将ExecutionProperty更改为restricted以外的其他东西的人. 我多次明确表示我不能那样做(不是管理员),系统管理员也不会那样做,也永远不会发生(必须保持restricted):)

最新更新