我正在尝试在启动时Daily.ps1
运行PowerShell脚本,但是,由于管理员设置(我不能以管理员身份运行,这不是一个选项),我无法通过任务计划程序运行它。例如,这是Daily.ps1
的内容:
if (1 -eq 1) {
"Hello there!"
}
所以我试图让一个批处理脚本
Daily.cmd
启动时运行(通过启动文件夹),它运行,但我无法让它运行Daily.ps1
,并且我收到一条消息,说正在运行脚本被禁用。(两个文件位于同一目录中)powershell C:UsersSimonDesktopDaily.ps1
无法加载文件 C:\Users\Simon\Desktop\Daily.ps1,因为在此系统上禁用了运行脚本
然后,我尝试使用我学到的直接绕过运行脚本的技巧中的这行代码:
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
- 调用表达式 ~ ~~~~~~~~~~~~~~~
所以我试图将其添加到
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
):)