diff --git a/tool/install.ps1 b/tool/install.ps1 index 1ea8f84..b9b77db 100644 --- a/tool/install.ps1 +++ b/tool/install.ps1 @@ -1,33 +1,35 @@ # --------------------------------------------------------------- # File Name : install.ps1 -# File Authors : Aoran Zeng -# | ChatGPT +# File Authors : xuan +# | ChatGPT +# Contributors : Aoran Zeng +# | # Created On : <2024-10-26> # Last Modified : <2024-10-27> # -# # chsrc installer for Windows -# # --------------------------------------------------------------- + # 定义参数 param( [switch] $h, - $d = "${HOME}\Downloads", + $d = "${HOME}\Downloads", $v = "pre" ) + $fileName = "\chsrc.exe" -$default_path = "${HOME}\Downloads" +$default_path = "${HOME}\Downloads" $binary_name = "chsrc" $platform = "Windows" -$global:path = "" -$global:arch = "" -$global:version = "" -$global:url = "" +$global:path = "" +$global:arch = "" +$global:version = "" +$global:url = "" $global:flag = 0 -# 安装说明的多行字符串 + $installInstructions = @" Hey friend @@ -43,19 +45,19 @@ $installInstructions https://github.com/RubyMetric/chsrc "@ - exit # 退出脚本 + exit } function Help { - Write-Host + Write-Host @" chsrc-installer: Install chsrc on ${platform}. Usage: install.sh [options] Options: - -h Print this help information. - -d Specify installation directory, default is $default_path. - -v Specify chsrc version. +-h Print this help information +-d Specify installation directory, default is $default_path +-v Specify chsrc version "@ } @@ -66,51 +68,53 @@ if ($h) { exit } -function Get_Path { +function output_info () { + Write-Host "[INFO] $args" +} + +function output_error () { + Write-Host "[ERROR] $args" + exit 1 +} + + +function Set_Install_Dir { # 检查目录是否存在 if (-not (Test-Path -Path $d -PathType Container)) { # 如果目录不存在,执行下面的代码块 try { New-Item -Path $d -ItemType Directory -Force | Out-Null - Write-Host "Directory created: $d" + output_info "Directory created: $d" $global:flag = 1 } catch { - # 捕获异常并输出错误信息 - Write-Host "Failed to create directory: $_" - exit 1 + output_error "Failed to create directory: $_" } } $global:path=$d # 输出最终路径 - Write-Output "The path is set to: $global:path" + output_info "Set install dir to: $global:path" } -function Get_Version { - # 定义有效的版本 +function Set_Version { $pattern = '^(0\.1\.[4-9]|pre)$' - # 检查版本号是否符合 if ($v -notmatch $pattern) { - # 输出错误信息并结束程序 - Write-Host "Error: Invalid version '$v'." - Write-Host "Please provide a valid version (0.1.4 - 0.1.9 or 'pre')." - exit 1 + output_error "Invalid version '$v'. Please provide a valid version (0.1.4 - 0.1.9 or 'pre')." } # 设置版本号 $global:version=$v - Write-Host "Version: $global:version" + output_info "Set chsrc version: $global:version" } -function Get_Url { +function Set_URL { # 获取 CPU 型号 $cpuArchitecture = Get-WmiObject Win32_Processor ` | Select-Object -First 1 -ExpandProperty Architecture - # 将 CPU 型号转换为 x64 或 x86 switch ($cpuArchitecture) { 0 { $global:arch = 'x86' } - 9 { + 9 { # 如果是 64 位操作系统,选择 x64 安装包,否则选择 x86 if ([Environment]::Is64BitOperatingSystem) { $global:arch = "x64" @@ -120,12 +124,10 @@ function Get_Url { } } default { - Write-Host "Error: Unsupported architecture '$cpuArchitecture'." - Write-Host "Only x86 or x64 architectures are supported." - exit 1 + output_error "Unsupported architecture '$cpuArchitecture'. Only x86 or x64 architectures are supported." } } - Write-Host "CPU Architecture: $global:arch" + output_info "My CPU architecture: $global:arch" # Set URL if ($version -eq "pre") { @@ -137,55 +139,51 @@ function Get_Url { "v" + "${global:version}/chsrc-${global:arch}-windows.exe" } - Write-Host "DownLoad URL: $global:url." + output_info "Set downLoad URL: $global:url" } -function DownLoad { +function Install { try { # 设置安全协议为 TLS 1.2 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 - + # 检查 URL 是否可访问 $response = Invoke-WebRequest -Uri $global:url -Method Head -ErrorAction Stop - - # 检查状态码是否为 200 + if ($response.StatusCode -ne 200) { - Write-Host "Error: Unable to access $global:url. Status code: $($response.StatusCode)" - exit 1 # 状态码不为 200,退出 + output_error "Unable to access $global:url. Status code: $($response.StatusCode)" } } catch { Write-Host "Unable to download ${binary_name}. Please check your internet connection." - exit 1 # 下载失败,输出错误信息并退出 + exit 1 } - # 执行下载 try { + output_info "Downloading $binary_name ($global:arch architecture, $platform platform, version $global:version) to $global:path ..." Invoke-WebRequest -OutFile ($global:path + $fileName) -Uri $global:url -ErrorAction Stop - Write-Host "Downloading $binary_name ($global:arch architecture, $platform platform, version $global:version) to $global:path" - Write-Host "🎉 Installation completed, path: $global:path" + output_info "🎉 Installation completed, path: $global:path" } catch { - Write-Host "Error: Unable to download $binary_name. Error: $_" - exit 1 # 下载失败,输出错误信息并退出 + output_error "Unable to download $binary_name. Error: $_" } } -# 定义清理函数 -function Cleanup { + +function cleanup { if ($flag -eq 1) { if (Test-Path -Path $path) { Remove-Item -Path $path -Recurse -Force # 删除路径及其内容 - Write-Host "Deleted the path: $path" + output_info "Deleted the path: $path" } } } -# 注册退出事件 -$null = Register-EngineEvent PowerShell.Exiting -Action { Cleanup } -# 下载chsrc +$null = Register-EngineEvent PowerShell.Exiting -Action { cleanup } -Get_Path -Get_Version -Get_Url -DownLoad + +# main +Set_Install_Dir +Set_Version +Set_URL +Install