You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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参数,用于完成重启后的剩余步骤。你可以将安装流程拆分为两步:

  1. 第一步执行预安装并触发重启
  2. 第二步通过系统级任务计划,在重启后执行/continue参数完成安装

具体实现可以结合方案1的任务计划逻辑,将任务的Action参数改为:

$taskAction = New-ScheduledTaskAction -Execute 'C:\temp\Install\VDAServerSetup_1912.exe' -Argument '/continue /quiet /noreboot'

内容的提问来源于stack exchange,提问作者Rohit Kachroo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:08:59