Files
kubescape/install.ps1
2025-12-15 08:52:05 +01:00

97 lines
3.3 KiB
PowerShell

Write-Host "Installing Kubescape..." -ForegroundColor Cyan
$BASE_DIR = "$env:USERPROFILE\.kubescape"
$KUBESCAPE_EXEC = "kubescape.exe"
# Determine architecture
$arch = if ([Environment]::Is64BitOperatingSystem) {
if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") { "arm64" } else { "amd64" }
} else {
Write-Host "Error: 32-bit systems are not supported" -ForegroundColor Red
exit 1
}
# Get latest release version from GitHub API
function Get-LatestVersion {
try {
$release = Invoke-RestMethod -Uri "https://api.github.com/repos/kubescape/kubescape/releases/latest" -UseBasicParsing
return $release.tag_name
} catch {
Write-Host "Error: Failed to fetch latest release version" -ForegroundColor Red
exit 1
}
}
# Parse command line arguments for version
$version = $null
for ($i = 0; $i -lt $args.Count; $i++) {
if ($args[$i] -eq "-v" -and $i + 1 -lt $args.Count) {
$version = $args[$i + 1]
}
}
# Get version (use provided or fetch latest)
if (-not $version) {
$version = Get-LatestVersion
Write-Host "Latest version: $version" -ForegroundColor Cyan
}
# Remove 'v' prefix if present for the filename
$versionNum = $version -replace '^v', ''
# Create installation directory if needed
New-Item -Path $BASE_DIR -ItemType "directory" -ErrorAction SilentlyContinue | Out-Null
# Build download URL with new naming pattern: kubescape_{version}_windows_{arch}.exe
$downloadUrl = "https://github.com/kubescape/kubescape/releases/download/$version/kubescape_${versionNum}_windows_${arch}.exe"
Write-Host "Downloading from: $downloadUrl" -ForegroundColor Cyan
$outputPath = Join-Path $BASE_DIR $KUBESCAPE_EXEC
# Download the binary
try {
$useBitTransfer = $null -ne (Get-Module -Name BitsTransfer -ListAvailable) -and ($PSVersionTable.PSVersion.Major -le 5)
if ($useBitTransfer) {
Write-Host "Using BitsTransfer for download..." -ForegroundColor Gray
Start-BitsTransfer -Source $downloadUrl -Destination $outputPath
} else {
$ProgressPreference = 'SilentlyContinue' # Speeds up Invoke-WebRequest
Invoke-WebRequest -Uri $downloadUrl -OutFile $outputPath -UseBasicParsing
}
} catch {
Write-Host "Error: Failed to download kubescape" -ForegroundColor Red
Write-Host $_.Exception.Message -ForegroundColor Red
exit 1
}
# Verify download was successful
if (-not (Test-Path $outputPath) -or (Get-Item $outputPath).Length -eq 0) {
Write-Host "Error: Download failed or file is empty" -ForegroundColor Red
Remove-Item $outputPath -ErrorAction SilentlyContinue
exit 1
}
# Update user PATH if needed
$currentPath = [Environment]::GetEnvironmentVariable("Path", "User")
if (-not $currentPath.Contains($BASE_DIR)) {
$confirmation = Read-Host "Add kubescape to user PATH? (y/n)"
if ($confirmation -eq 'y') {
$newPath = $currentPath + ";$BASE_DIR"
[Environment]::SetEnvironmentVariable("Path", $newPath, "User")
$env:Path = $env:Path + ";$BASE_DIR"
Write-Host "Added $BASE_DIR to PATH" -ForegroundColor Green
}
}
Write-Host "`nFinished Installation." -ForegroundColor Green
# Try to run version command
try {
& $outputPath version
} catch {
Write-Host "Installed to: $outputPath" -ForegroundColor Green
}
Write-Host "`nUsage: kubescape scan" -ForegroundColor Magenta