我有一个 powershell 脚本,每次登录时都想在电脑上运行它。我已将其作为 REG_SZ 添加到当前用户的“运行”键中,但它从未执行过。
我已将执行策略改为“不受限制”,但仍然没有运气。
注册表值的内容如下:
powershell.exe c:\path\myscript.ps1
这在命令提示符下确实有效。知道为什么它不能从注册表运行吗?
谢谢。
答案1
我通常以这种方式运行 PowerShell 脚本:
powershell.exe -file c:\path\myscript.ps1
有关更多信息,请从命令行运行以下命令:
powershell.exe -help
答案2
今天我读到了一个关于 powershell 脚本的文章,它在重启电脑后继续运行。为了做到这一点,脚本编写者会自动写入他的运行键。如果你看一下这博客文章,您会看到他只是将脚本名称及其参数写入注册表项。
我还没有能够测试它,但如果它对他有用,那就意味着你不要在脚本名称前面附加“powershell.exe”。
答案3
好的,我解决了这个问题。您需要将执行策略设置为 remotesigned,而不是 Microsoft 告诉我的“绕过”。为此,在 powershell 中运行以下命令:
set-executionpolicy remotesigned
那么这是我的注册表运行键中的 REG_SZ
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -file c:\path\myscript.ps1
所以现在我有一个 powershell 脚本,它可以启动我所有常用的程序,但它们之间有一定的间隙,这样我就可以立即在我的计算机上工作,而不会因为每个应用程序同时试图打开而导致速度变慢。
这是我的 *.PS1 文件的一小段代码,其他人可能会觉得它有用:
# Chrome Browser
Start-Sleep -s 20
& "C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe"
# Outlook
Start-Sleep -s 10
& "c:\Program Files (x86)\Microsoft Office\Office14\OUTLOOK.EXE"
# Messenger
Start-Sleep -s 10
& "c:\Program Files (x86)\Windows Live\Messenger\msnmsgr.exe" /background
# Snagit
Start-Sleep -s 30
& "C:\Program Files (x86)\TechSmith\Snagit 10\Snagit32.exe" /i /h
# Evernote
Start-Sleep -s 60
& "C:\Program Files (x86)\Evernote\Evernote\EvernoteTray.exe"
答案4
如果我没记错的话,您不能直接执行 powershell 脚本(如双击它),必须从命令行执行。也许 Windows 将从注册表执行视为直接执行。您可以尝试(我在这里可能有点冒险)从批处理文件调用脚本,然后从注册表调用批处理文件。