param( [Parameter(Mandatory=$true)] [string]$SteamUser, [Parameter(Mandatory=$true)] [string]$SteamPass ) Set-ExecutionPolicy Bypass -Scope Process -Force $scriptDir = if ($PSScriptRoot) { $PSScriptRoot } else { Split-Path -Parent $MyInvocation.MyCommand.Definition } if (-not $scriptDir) { $scriptDir = Get-Location } [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $appId = "223350" $installDir = Join-Path $scriptDir "game_server" $vcRedistUrl = "https://aka.ms/vs/17/release/vc_redist.x64.exe" $vcRedistPath = Join-Path -Path $env:TEMP -ChildPath "vc_redist_x64.exe" try { Write-Host "正在下载 VC++ 运行库..." (New-Object System.Net.WebClient).DownloadFile($vcRedistUrl, $vcRedistPath) if (Test-Path $vcRedistPath) { Write-Host "正在静默安装 VC++ 运行库..." $installProcess = Start-Process -FilePath $vcRedistPath ` -ArgumentList "/install /quiet /norestart" ` -Wait -NoNewWindow -PassThru Remove-Item $vcRedistPath -Force } } catch { Write-Error "VC++安装失败: $_" exit 1 } $steamcmdDir = Join-Path $scriptDir "steamcmd" $steamcmdUrl = "https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip" $steamcmdZip = Join-Path $steamcmdDir "steamcmd.zip" try { if (-not (Test-Path $steamcmdDir)) { New-Item -Path $steamcmdDir -ItemType Directory -Force | Out-Null } Write-Host "正在下载 SteamCMD..." (New-Object System.Net.WebClient).DownloadFile($steamcmdUrl, $steamcmdZip) if (Test-Path $steamcmdZip) { Write-Host "正在解压 SteamCMD..." Expand-Archive -Path $steamcmdZip -DestinationPath $steamcmdDir -Force Remove-Item $steamcmdZip -Force } } catch { Write-Error "SteamCMD操作失败: $_" exit 1 } $steamcmdExe = Join-Path $steamcmdDir "steamcmd.exe" try { if (Test-Path $steamcmdExe) { Write-Host "正在更新游戏服务器 (AppID: $appId)..." $arguments = @( "+force_install_dir `"$installDir`"", "+login `"$SteamUser`" `"$SteamPass`"", "+app_update $appId validate", "+quit" ) $process = Start-Process -FilePath $steamcmdExe ` -ArgumentList $arguments ` -Wait -NoNewWindow -PassThru ` } else { throw "SteamCMD可执行文件未找到: $steamcmdExe" } } catch { Write-Error "游戏更新失败: $_" exit 1 } $updateBatPath = Join-Path $scriptDir "更新服务器.bat" $batContent = @" @echo off set STEAMCMD_PATH="$steamcmdDir" set STEAM_USER=$SteamUser set STEAM_PASS=$SteamPass set INSTALL_DIR="$installDir" set APP_ID=$appId cd /d %STEAMCMD_PATH% steamcmd.exe +login %STEAM_USER% %STEAM_PASS% +force_install_dir %INSTALL_DIR% +app_update %APP_ID% validate +quit echo 服务器已更新完成! pause "@ $batContent | Out-File -FilePath $updateBatPath -Encoding Default Write-Host "已创建更新脚本: $updateBatPath" -ForegroundColor Cyan Write-Host "双击此文件可一键更新服务器" -ForegroundColor Green Write-Host "`n所有操作已完成!" -ForegroundColor Green