[CmdletBinding()] param([string]$InstallRoot = (Split-Path -Parent $PSScriptRoot), [string]$JavaHome, [switch]$Remove) . (Join-Path $PSScriptRoot 'Common.ps1') $root = [System.IO.Path]::GetFullPath($InstallRoot) $sha = [System.Security.Cryptography.SHA256]::Create() try { $hash = [BitConverter]::ToString($sha.ComputeHash([Text.Encoding]::UTF8.GetBytes($root.ToLowerInvariant()))).Replace('-', '').Substring(0, 12) } finally { $sha.Dispose() } $taskName = 'PXHJ-XTRH-' + $hash if ($Remove) { if (Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue) { Unregister-ScheduledTask -TaskName $taskName -Confirm:$false } Write-Output ('已移除此部署实例的自动启动:' + $taskName) return } $java = Get-XtrhJava -JavaHome $JavaHome $resolvedJavaHome = Split-Path -Parent (Split-Path -Parent $java) $startScript = Join-Path $root 'scripts/Start-Xtrh.ps1' $arguments = '-NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File "' + $startScript + '" -InstallRoot "' + $root + '" -JavaHome "' + $resolvedJavaHome + '"' $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument $arguments -WorkingDirectory $root $user = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name $trigger = New-ScheduledTaskTrigger -AtLogOn -User $user $principal = New-ScheduledTaskPrincipal -UserId $user -LogonType Interactive -RunLevel Limited $settings = New-ScheduledTaskSettingsSet -StartWhenAvailable -MultipleInstances IgnoreNew -ExecutionTimeLimit ([TimeSpan]::Zero) Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Principal $principal -Settings $settings -Force | Out-Null Write-Output ('已配置当前用户登录后后台自动启动:' + $taskName)