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

时间:2019-07-18 20:45:15

标签: powershell batch-file

我试图在启动时运行PowerShell脚本Daily.ps1,但是由于管理员设置(我无法以admin身份运行,这不是一个选项),因此无法通过Task Scheduler运行它。例如,这是Daily.ps1的内容:

if (1 -eq 1) {
    "Hello there!"
}  
  1. 因此,我尝试在启动时(通过启动文件夹)运行批处理脚本Daily.cmd,该脚本可以运行,但是我无法让其运行Daily.ps1,我收到一条消息,指出正在运行的脚本已禁用。 (两个文件都在同一目录中)

    powershell C:\Users\Simon\Desktop\Daily.ps1
    
      

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

  2. 然后,我从一个学会了直接绕过运行脚本的技巧中尝试使用以下代码:

    powershell cat Daily.ps1 | powershell invoke-expression
    

    这有效,但仅适用于一个衬板。所以我添加了-raw标志 cat,在Powershell中可用,但在CMD中不可用。由于某些原因,Daily.ps1的文本仍存储为字符串数组。 (道歉)

      

    cmdlet Invoke-Expression在命令管道位置1

         
        

    提供以下参数的值:

             
          

    命令:if(1 -eq 1){

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

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

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

我不知道让Daily.ps1通过批处理命令运行。是我错过了一种方法,还是我尝试过的一种方法(没有管理员权限)?

编辑:为明确起见,ExecutionPolicy设置为Restricted,并且不能更改。此外,我可以通过右键单击文件并使用PS来运行PowerShell脚本。

2 个答案:

答案 0 :(得分:0)

创建计划任务以在计算机启动时运行。将git checkout develop git checkout -b master develop 放在“程序/脚本”字段中,并将git checkout --orphan master git reset --hard 放在“参数”字段中(您可能希望避免将脚本放在用户个人资料中)。设置任务以无论用户是否登录都运行。

答案 1 :(得分:-1)

我找到了答案!

尝试了许多不同的方法后,我遇到了以下代码行,如果ExecutionProperty设置为restricted,则可以运行PS脚本:

start powershell "cat -raw C:\Users\Simon\Desktop\Daily.ps1 | invoke-expression"

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

然后,您可以将该行保存到.cmd.bat文件中,并使用Task Scheduler(可定制性更高)或将其放在启动文件夹中。

P.S。对于一直说“ ExecutionProperty”而不是“ restricted”的所有人。我清楚地多次声明我不能执行此操作(非管理员),系统管理员也不会执行该操作,也永远不会发生(必须保持restricted):)