$isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) if (-not $isAdmin) { Start-Process powershell -Verb RunAs -ArgumentList "-NoExit -ExecutionPolicy Bypass -File `"$PSCommandPath`"" exit } Set-Location $PSScriptRoot Write-Host "1. Tắt các tiến trình Tray cũ..." -ForegroundColor Yellow Stop-Process -Name "tailscale-tray" -Force -ErrorAction SilentlyContinue Stop-Process -Name "tailscale_tray" -Force -ErrorAction SilentlyContinue Stop-Process -Name "tailscale" -Force -ErrorAction SilentlyContinue Stop-Process -Name "tailscaled" -Force -ErrorAction SilentlyContinue Write-Host "2. Gỡ bỏ Service cũ nếu có..." -ForegroundColor Yellow Stop-Service -Name "Tailscale-Custom" -Force -ErrorAction SilentlyContinue sc.exe delete "Tailscale-Custom" | Out-Null Write-Host "3. Gỡ cài đặt MSI bản cập nhật cũ (nếu có)..." -ForegroundColor Yellow $msiPath = "$PSScriptRoot\Tailscale-Custom-Setup.msi" Start-Process msiexec -ArgumentList "/x `"$msiPath`" /qn" -Wait Start-Sleep -Seconds 2 Write-Host "4. Tiến hành Cài đặt MSI mới nhất (chế độ tự động, có hiển thị thanh tiến trình)..." -ForegroundColor Cyan Start-Process msiexec -ArgumentList "/i `"$msiPath`" /passive" -Wait Start-Sleep -Seconds 4 Write-Host "5. KẾT QUẢ KIỂM TRA:" -ForegroundColor Green $processes = Get-Process | Where-Object { $_.Name -match "tailscale" } if ($processes) { $processes | Format-Table Id, ProcessName, MainWindowTitle, Path Write-Host "=> Thanh cong! Cac tien trinh tren da duoc khoi dong." -ForegroundColor Green } else { Write-Host "=> Khong tim thay tien trinh nao chay!" -ForegroundColor Red }