RunOnce在启动时未运行

时间:2018-05-18 20:03:20

标签: powershell

我的启动脚本在重启时没有运行时出现问题。

我正在尝试让我的系统执行一系列脚本,但每次运行后重新启动等等。此脚本将设置注册表项,但在自动注册后,PowerShell根本不会运行。< / p>

#Sets Autologin for scripts
$RegPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion \Winlogon"
$DefaultUsername = Read-Host -Prompt "User's O365 Cred"
$DefaultPassword = Read-Host -Prompt "User's O365 Pass"
Set-ItemProperty $RegPath "AutoAdminLogon" -Value "1" -type String
Set-ItemProperty $RegPath "DefaultUsername" -Value "$DefaultUsername" -type String
Set-ItemProperty $RegPath "DefaultPassword" -Value "$DefaultPassword" -type String


#Reboots and starts next script
$RunOnceKey = "HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce"
set-itemproperty $RunOnceKey "NextRun" ('C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe  -File ' + "~\Downloads\systemrename.ps1")
Start-Sleep 10
Restart-Computer

提前致谢!!

4 个答案:

答案 0 :(得分:0)

通过预定任务的替代解决方案:

## Create the action
$action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-Command "c:\temp\systemrename.ps1"'

## Set to run as local system, No need to store Credentials!!!
$principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest

## set to run at startup could also do -AtLogOn for the trigger
$trigger = New-ScheduledTaskTrigger -AtStartup

## register it (save it) and it will show up in default folder of task scheduler.
Register-ScheduledTask -Action $action -TaskName 'mytask' -TaskPath '\' -Principal $principal -Trigger $trigger

注意所有这些命令都支持通过cimsession进行远程处理,如下所示:

## Create remote cimsession
$cimSession = New-CimSession -ComputerName 'computername'

## Create the action
$action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-Command "c:\temp\systemrename.ps1"' -CimSession $cimSession

## Set to run as local system, No need to store Credentials!!!
$principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest -CimSession $cimSession

## set to run at startup could also do -AtLogOn for the trigger
$trigger = New-ScheduledTaskTrigger -AtStartup -CimSession $cimSession

## register it (save it) and it will show up in default folder of task scheduler.
Register-ScheduledTask -Action $action -TaskName 'mytask' -TaskPath '\' -Principal $principal -Trigger $trigger -CimSession $cimSession

## clean up cimsession
Remove-CimSession -CimSession $cimSession

答案 1 :(得分:0)

尝试将Set-ItemProperty行更改为:

Set-ItemProperty -Path $RunOnceKey -Name 'NextRun' -Value 'C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe -executionpolicy Bypass -File "~\Downloads\systemrename.ps1" '

可能是阻止文件执行的执行策略。

答案 2 :(得分:0)

您是否已检查GPO中的以下设置不适用?

计算机配置\管理模板\系统\禁用一次运行列表 (请参阅https://msdn.microsoft.com/en-gb/library/ms815142.aspx

当我由GPO应用了此设置并且尝试使用runonce reg键时,重新启动后输入的值仍会保留,表明Windows甚至没有尝试运行它。

执行组策略管理中的组策略结果(或您喜欢的执行RSoP [策略结果集]的任何方法)将向您显示适用于计算机/用户的所有GPO,以允许您缩小哪个GPO的范围正在应用设置。

答案 3 :(得分:0)

根据MS,runonce在用户登录(而非启动)时触发。根据MS文档:

运行和RunOnce注册表项会导致程序在用户登录时每次运行。键的数据值是命令行,长度不能超过260个字符。通过添加形式为description-string = commandline的条目来注册要运行的程序。您可以在一个键下编写多个条目。如果在一个特定的密钥下注册了多个程序,则这些程序的运行顺序不确定。

来源:https://docs.microsoft.com/en-us/windows/win32/setupapi/run-and-runonce-registry-keys

唯一的方法是创建如上所述的计划任务或服务。

上面的文档中曾经有一个RunServicesOnce注册表项,但显然与Windows ME一起消失了。