mirror of
https://github.com/Gu1llaum-3/sshm.git
synced 2025-09-07 05:10:41 +02:00
136 lines
4.2 KiB
PowerShell
136 lines
4.2 KiB
PowerShell
# SSHM Windows Installation Script
|
|
# Usage:
|
|
# Online: irm https://raw.githubusercontent.com/Gu1llaum-3/sshm/main/install/windows.ps1 | iex
|
|
# Local: .\install\windows.ps1 -LocalBinary ".\sshm.exe"
|
|
|
|
param(
|
|
[string]$InstallDir = "$env:LOCALAPPDATA\sshm",
|
|
[switch]$Force = $false,
|
|
[string]$LocalBinary = ""
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
# Colors for output
|
|
function Write-ColorOutput($ForegroundColor) {
|
|
$fc = $host.UI.RawUI.ForegroundColor
|
|
$host.UI.RawUI.ForegroundColor = $ForegroundColor
|
|
if ($args) {
|
|
Write-Output $args
|
|
}
|
|
$host.UI.RawUI.ForegroundColor = $fc
|
|
}
|
|
|
|
function Write-Info { Write-ColorOutput Green $args }
|
|
function Write-Warning { Write-ColorOutput Yellow $args }
|
|
function Write-Error { Write-ColorOutput Red $args }
|
|
|
|
Write-Info "🚀 Installing SSHM - SSH Manager"
|
|
Write-Info ""
|
|
|
|
# Check if SSHM is already installed
|
|
$existingSSHM = Get-Command sshm -ErrorAction SilentlyContinue
|
|
if ($existingSSHM -and -not $Force) {
|
|
$currentVersion = & sshm --version 2>$null | Select-String "version" | ForEach-Object { $_.ToString().Split()[-1] }
|
|
Write-Warning "SSHM is already installed (version: $currentVersion)"
|
|
$response = Read-Host "Do you want to continue with the installation? (y/N)"
|
|
if ($response -ne "y" -and $response -ne "Y") {
|
|
Write-Info "Installation cancelled."
|
|
exit 0
|
|
}
|
|
}
|
|
|
|
# Detect architecture
|
|
$arch = if ([Environment]::Is64BitOperatingSystem) { "amd64" } else { "386" }
|
|
Write-Info "Detected platform: Windows ($arch)"
|
|
|
|
# Check if using local binary
|
|
if ($LocalBinary -ne "") {
|
|
if (-not (Test-Path $LocalBinary)) {
|
|
Write-Error "Local binary not found: $LocalBinary"
|
|
exit 1
|
|
}
|
|
|
|
Write-Info "Using local binary: $LocalBinary"
|
|
$targetPath = "$InstallDir\sshm.exe"
|
|
|
|
# Create installation directory
|
|
if (-not (Test-Path $InstallDir)) {
|
|
Write-Info "Creating installation directory: $InstallDir"
|
|
New-Item -ItemType Directory -Path $InstallDir -Force | Out-Null
|
|
}
|
|
|
|
# Copy local binary
|
|
Write-Info "Installing binary to: $targetPath"
|
|
Copy-Item -Path $LocalBinary -Destination $targetPath -Force
|
|
|
|
} else {
|
|
# Online installation
|
|
Write-Info "Starting online installation..."
|
|
|
|
# Get latest version
|
|
Write-Info "Fetching latest version..."
|
|
try {
|
|
$latestRelease = Invoke-RestMethod -Uri "https://api.github.com/repos/Gu1llaum-3/sshm/releases/latest"
|
|
$latestVersion = $latestRelease.tag_name
|
|
Write-Info "Target version: $latestVersion"
|
|
} catch {
|
|
Write-Error "Failed to fetch version information"
|
|
exit 1
|
|
}
|
|
|
|
# Download binary
|
|
$fileName = "sshm-windows-$arch.zip"
|
|
$downloadUrl = "https://github.com/Gu1llaum-3/sshm/releases/download/$latestVersion/$fileName"
|
|
$tempFile = "$env:TEMP\$fileName"
|
|
|
|
Write-Info "Downloading $fileName..."
|
|
try {
|
|
Invoke-WebRequest -Uri $downloadUrl -OutFile $tempFile
|
|
} catch {
|
|
Write-Error "Download failed"
|
|
exit 1
|
|
}
|
|
|
|
# Create installation directory
|
|
if (-not (Test-Path $InstallDir)) {
|
|
New-Item -ItemType Directory -Path $InstallDir -Force | Out-Null
|
|
}
|
|
|
|
# Extract archive
|
|
Write-Info "Extracting..."
|
|
try {
|
|
Expand-Archive -Path $tempFile -DestinationPath $env:TEMP -Force
|
|
$extractedBinary = "$env:TEMP\sshm-windows-$arch.exe"
|
|
$targetPath = "$InstallDir\sshm.exe"
|
|
|
|
Move-Item -Path $extractedBinary -Destination $targetPath -Force
|
|
} catch {
|
|
Write-Error "Extraction failed"
|
|
exit 1
|
|
}
|
|
|
|
# Clean up
|
|
Remove-Item $tempFile -Force
|
|
}
|
|
|
|
# Check PATH
|
|
$userPath = [Environment]::GetEnvironmentVariable("Path", "User")
|
|
if ($userPath -notlike "*$InstallDir*") {
|
|
Write-Warning "The directory $InstallDir is not in your PATH."
|
|
Write-Info "Adding to user PATH..."
|
|
[Environment]::SetEnvironmentVariable("Path", "$userPath;$InstallDir", "User")
|
|
Write-Info "Please restart your terminal to use the 'sshm' command."
|
|
}
|
|
|
|
Write-Info ""
|
|
Write-Info "✅ SSHM successfully installed to: $targetPath"
|
|
Write-Info "You can now use the 'sshm' command!"
|
|
|
|
# Verify installation
|
|
if (Test-Path $targetPath) {
|
|
Write-Info ""
|
|
Write-Info "Verifying installation..."
|
|
& $targetPath --version
|
|
}
|