#requires -version 5 <# ============================================================ MINERO XMR - instalador facil (RandomX / Monero) ============================================================ Software 100% visible y de codigo abierto (XMRig). Solo para maquinas propias o con permiso del dueno. USO NORMAL (te pregunta la wallet): Clic derecho sobre este archivo > "Ejecutar con PowerShell" USO ADMIN (pre-configurado, ideal para el locutorio): .\instalar.ps1 -Wallet 4TU_WALLET -Nombre "pc-01" -Intensidad 100 -PausaEnUso 60 #> param( [string]$Wallet = "", [string]$Nombre = $env:COMPUTERNAME, [ValidateRange(10,100)][int]$Intensidad = 50, # % de nucleos de CPU a usar [int]$PausaEnUso = 120, # segundos parados antes de reanudar mineria [string]$Pool = "pool.supportxmr.com:443", [bool]$Autostart = $true, # arrancar solo al encender [bool]$Iniciar = $true # empezar a minar al terminar de instalar ) $ErrorActionPreference = "Stop" [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 function Info($m){ Write-Host " $m" -ForegroundColor Cyan } function Ok($m){ Write-Host " [OK] $m" -ForegroundColor Green } function Warn($m){ Write-Host " [!] $m" -ForegroundColor Yellow } Write-Host "" Write-Host " ============================================" -ForegroundColor White Write-Host " MINERO XMR - instalacion" -ForegroundColor White Write-Host " ============================================" -ForegroundColor White Write-Host "" # --- 1) Wallet ------------------------------------------------------------- if([string]::IsNullOrWhiteSpace($Wallet)){ $Wallet = Read-Host " Pega la direccion de wallet XMR donde quieres COBRAR" } $Wallet = $Wallet.Trim() if($Wallet -notmatch '^[48][0-9A-Za-z]{94,105}$'){ Warn "Esa direccion no parece una wallet XMR valida (empieza por 4 u 8, ~95 caracteres)." $seguir = Read-Host " Continuar de todos modos? (s/N)" if($seguir -ne 's'){ Write-Host " Cancelado."; exit 1 } } # --- 2) Carpeta ------------------------------------------------------------ $dir = Join-Path $env:LOCALAPPDATA "MineroXMR" New-Item -ItemType Directory -Force -Path $dir | Out-Null Info "Carpeta de instalacion: $dir" # --- 3) Descargar la ultima version de XMRig (Windows) --------------------- Info "Buscando la ultima version de XMRig en GitHub..." $headers = @{ "User-Agent" = "minero-xmr" } $rel = Invoke-RestMethod "https://api.github.com/repos/xmrig/xmrig/releases/latest" -Headers $headers $asset = $rel.assets | Where-Object { $_.name -match '\.zip$' -and $_.name -match 'win' -and $_.name -match '(x64|win64)' -and $_.name -notmatch 'arm' } | Sort-Object { if($_.name -match 'gcc'){1}else{0} } | Select-Object -First 1 if(-not $asset){ throw "No encontre el paquete de Windows de XMRig." } $zip = Join-Path $dir $asset.name Info "Descargando $($asset.name) ..." Invoke-WebRequest $asset.browser_download_url -OutFile $zip -Headers $headers Info "Extrayendo..." Expand-Archive -Path $zip -DestinationPath $dir -Force $exeEncontrado = Get-ChildItem -Path $dir -Recurse -Filter xmrig.exe | Select-Object -First 1 if(-not $exeEncontrado){ throw "No se encontro xmrig.exe tras extraer." } $xmrigExe = Join-Path $dir "xmrig.exe" Copy-Item $exeEncontrado.FullName $xmrigExe -Force Remove-Item $zip -Force -ErrorAction SilentlyContinue Ok "XMRig instalado ($($rel.tag_name))" # --- 4) Configuracion ------------------------------------------------------ $config = @" { "autosave": true, "cpu": { "enabled": true, "max-threads-hint": $Intensidad, "priority": 1, "yield": true }, "pause-on-active": $PausaEnUso, "pause-on-battery": true, "pools": [ { "algo": "rx/0", "url": "$Pool", "user": "$Wallet", "pass": "$Nombre", "tls": true, "keepalive": true } ] } "@ $configPath = Join-Path $dir "config.json" [IO.File]::WriteAllText($configPath, $config, (New-Object System.Text.UTF8Encoding($false))) $fin = $Wallet.Substring([Math]::Max(0,$Wallet.Length-6)) Ok "Config guardada (wallet ...$fin, trabajador '$Nombre', intensidad $Intensidad%, pausa $PausaEnUso s)" # --- 5) Accesos directos (Iniciar / Parar) --------------------------------- $ws = New-Object -ComObject WScript.Shell $desktop = [Environment]::GetFolderPath("Desktop") function Nuevo-Acceso($ruta, $target, $args, $icono){ $l = $ws.CreateShortcut($ruta) $l.TargetPath = $target if($args){ $l.Arguments = $args } $l.WorkingDirectory = $dir $l.WindowStyle = 7 # 7 = minimizado if($icono){ $l.IconLocation = $icono } $l.Save() } $argsMina = "--config=`"$configPath`"" Nuevo-Acceso (Join-Path $desktop "Iniciar minero.lnk") $xmrigExe $argsMina "$xmrigExe,0" Nuevo-Acceso (Join-Path $desktop "Parar minero.lnk") "$env:SystemRoot\System32\cmd.exe" "/c taskkill /IM xmrig.exe /F" "$env:SystemRoot\System32\shell32.dll,27" Ok "Accesos 'Iniciar minero' y 'Parar minero' creados en el escritorio." # --- 6) Autostart ---------------------------------------------------------- if($Autostart){ $startup = [Environment]::GetFolderPath("Startup") Nuevo-Acceso (Join-Path $startup "MineroXMR.lnk") $xmrigExe $argsMina "$xmrigExe,0" Ok "Se iniciara solo al encender el ordenador." } # --- 7) Aviso Defender + arranque ----------------------------------------- Write-Host "" Warn "Windows Defender puede marcar xmrig.exe como 'CoinMiner' (PUA / RiskWare)." Warn "Es NORMAL en CUALQUIER minero, no significa virus. En TU ordenador, para" Warn "que no lo borre, anade una exclusion (PowerShell como Administrador):" Write-Host "" Write-Host " Add-MpPreference -ExclusionPath `"$dir`"" -ForegroundColor Gray Write-Host "" if($Iniciar){ Info "Iniciando el minero (ventana minimizada)..." Start-Process -FilePath $xmrigExe -ArgumentList $argsMina -WorkingDirectory $dir -WindowStyle Minimized Ok "Minando. Abre 'panel.html' para ver hashrate y ganancias." } Write-Host "" Ok "Instalacion completada." Write-Host ""