从注册表启动 powershell 脚本

从注册表启动 powershell 脚本

我有一个 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 将从注册表执行视为直接执行。您可以尝试(我在这里可能有点冒险)从批处理文件调用脚本,然后从注册表调用批处理文件。

相关内容