如何实现PowerShell远程升级程序时重启自动续跑(无需登录)
解决Citrix VDA远程升级重启后需用户登录的问题
针对你远程升级Citrix VDA时遇到的重启后流程停滞、必须用户登录才能继续的问题,我整理了几个无需依赖自动登录的可行方案,你可以根据实际环境尝试:
方案1:创建系统级启动任务计划
系统级任务计划以NT AUTHORITY\SYSTEM权限运行,无需用户登录即可触发,刚好适配重启后的后续安装流程。你可以在初始脚本中提前创建这个任务,确保重启后自动完成剩余升级步骤:
Invoke-Command -ComputerName $name -ScriptBlock { # 解锁安装文件 Unblock-File 'C:\temp\Install\VDAServerSetup_1912.exe' # 定义任务计划:系统启动时以SYSTEM权限执行剩余安装 $taskAction = New-ScheduledTaskAction -Execute 'C:\temp\Install\VDAServerSetup_1912.exe' -Argument '/components VDA /disableexperiencemetrics /enable_hdx_ports /enable_hdx_udp_ports /enable_real_time_transport /enable_remote_assistance "/includeadditional `"Citrix Personalization for App-V - VDA`" "/exclude `"Personal vDisk`,`"Machine Identity Service`" "/logpath `"c:\becnet\xenapp`" /masterimage /quiet /virtualmachine /disableexperiencemetrics /optimize /virtualmachine /norestart"' $taskTrigger = New-ScheduledTaskTrigger -AtStartup $taskPrincipal = New-ScheduledTaskPrincipal -UserId "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest $taskSettings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries # 注册任务,避免重复创建用-Force参数 Register-ScheduledTask -TaskName "VDAUpgradePostRestart" -Action $taskAction -Trigger $taskTrigger -Principal $taskPrincipal -Settings $taskSettings -Force # 启动初始安装,触发重启 Start-Process -FilePath 'C:\temp\Install\VDAServerSetup_1912.exe' -ArgumentList '/components VDA', '/disableexperiencemetrics', '/enable_hdx_ports', '/enable_hdx_udp_ports', '/enable_real_time_transport', '/enable_remote_assistance', '/includeadditional "Citrix Personalization for App-V - VDA"','/exclude "Personal vDisk","Machine Identity Service"', '/includeadditional "Citrix Personalization for App-V - VDA"', '/logpath "c:\becnet\xenapp"', '/masterimage', '/quiet', '/virtualmachine', '/disableexperiencemetrics', '/optimize', '/virtualmachine', '/wait', '/forcerestart' }
提示:安装完成后,记得在脚本末尾添加删除该任务的逻辑(
Unregister-ScheduledTask -TaskName "VDAUpgradePostRestart" -Confirm:$false),避免后续重启时重复触发。
方案2:迁移安装程序的RunOnce项到系统级注册表路径
部分安装程序会将重启后的后续步骤注册到用户上下文的HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce,这个路径必须用户登录才会执行。你可以将该项迁移到系统级的HKLM对应路径,让系统启动时自动执行:
Invoke-Command -ComputerName $name -ScriptBlock { Unblock-File 'C:\temp\Install\VDAServerSetup_1912.exe' # 启动预安装,暂不重启 Start-Process -FilePath 'C:\temp\Install\VDAServerSetup_1912.exe' -ArgumentList '<你的完整安装参数>', '/wait', '/norestart' # 查找HKCU下的VDA相关RunOnce项 $runOnceItems = Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\RunOnce" | Where-Object { $_.PSObject.Properties.Name -match "Citrix|VDA" } # 复制到HKLM的系统级RunOnce路径 foreach ($item in $runOnceItems.PSObject.Properties) { if ($item.Name -notin @("PSPath", "PSParentPath", "PSChildName", "PSDrive", "PSProvider")) { Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce" -Name $item.Name -Value $item.Value -Force # 删除原用户上下文的项 Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\RunOnce" -Name $item.Name -Force } } # 手动触发重启 Restart-Computer -Force }
方案3:验证Citrix VDA安装参数的完整性
部分版本的Citrix VDA安装程序支持/continue参数,用于完成重启后的剩余步骤。你可以将安装流程拆分为两步:
- 第一步执行预安装并触发重启
- 第二步通过系统级任务计划,在重启后执行
/continue参数完成安装
具体实现可以结合方案1的任务计划逻辑,将任务的Action参数改为:
$taskAction = New-ScheduledTaskAction -Execute 'C:\temp\Install\VDAServerSetup_1912.exe' -Argument '/continue /quiet /noreboot'
内容的提问来源于stack exchange,提问作者Rohit Kachroo
相关产品推荐
相关产品推荐

