mirror of
https://github.com/kubescape/kubescape.git
synced 2026-02-14 09:59:54 +00:00
97 lines
3.3 KiB
PowerShell
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
|