# ============================================ # MENU SIMPLES - IFSOLTEC # COM VERIFICACAO DE POLITICA DE EXECUCAO # ============================================ # ===== VERIFICACAO DE POLITICA DE EXECUCAO ===== function Verificar-PoliticaExecucao { $politicaAtual = Get-ExecutionPolicy if ($politicaAtual -eq "Restricted") { Write-Host "=========================================" -ForegroundColor Red Write-Host " EXECUCAO DE SCRIPTS DESABILITADA! " -ForegroundColor Red Write-Host "=========================================" -ForegroundColor Red Write-Host "" Write-Host "O sistema esta bloqueando a execucao de scripts do PowerShell." -ForegroundColor Yellow Write-Host "" Write-Host "Escolha uma opcao:" -ForegroundColor Cyan Write-Host " [1] Habilitar automaticamente (Recomendado)" -ForegroundColor Green Write-Host " [2] Ver instrucoes para habilitar manualmente" -ForegroundColor Yellow Write-Host " [3] Sair do programa" -ForegroundColor Red Write-Host "" do { $key = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") $opcao = $key.Character.ToString() switch ($opcao) { "1" { try { Write-Host "`nTentando habilitar execucao de scripts..." -ForegroundColor Green # Tenta definir política para o usuário atual Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned -Force -ErrorAction Stop Write-Host "Politica alterada com sucesso!" -ForegroundColor Green Write-Host "Continuando com o programa..." -ForegroundColor Cyan Start-Sleep -Seconds 2 return $true } catch { Write-Host "`nERRO: Nao foi possivel alterar a politica automaticamente." -ForegroundColor Red Write-Host "Motivo: $($_.Exception.Message)" -ForegroundColor Red Write-Host "" Write-Host "Tente executar o PowerShell como Administrador e execute:" -ForegroundColor Yellow Write-Host "Set-ExecutionPolicy RemoteSigned -Scope CurrentUser" -ForegroundColor White Write-Host "" Write-Host "Pressione qualquer tecla para sair..." -ForegroundColor Gray $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") | Out-Null exit } } "2" { Write-Host "`n=========================================" -ForegroundColor Yellow Write-Host " INSTRUCOES MANUAIS " -ForegroundColor Yellow Write-Host "=========================================" -ForegroundColor Yellow Write-Host "" Write-Host "Opcao 1 - Para usuario atual (Recomendado):" -ForegroundColor Cyan Write-Host " 1. Abra o PowerShell como Administrador" -ForegroundColor White Write-Host " 2. Digite: Set-ExecutionPolicy RemoteSigned -Scope CurrentUser" -ForegroundColor White Write-Host " 3. Digite 'S' para confirmar" -ForegroundColor White Write-Host "" Write-Host "Opcao 2 - Para todos os usuarios:" -ForegroundColor Cyan Write-Host " 1. Abra o PowerShell como Administrador" -ForegroundColor White Write-Host " 2. Digite: Set-ExecutionPolicy RemoteSigned" -ForegroundColor White Write-Host " 3. Digite 'S' para confirmar" -ForegroundColor White Write-Host "" Write-Host "Opcao 3 - Bypass temporario (so para este script):" -ForegroundColor Cyan Write-Host " Execute este comando para rodar o menu:" -ForegroundColor White Write-Host " powershell -ExecutionPolicy Bypass -File `"$($MyInvocation.MyCommand.Path)`"" -ForegroundColor White Write-Host "" Write-Host "Pressione qualquer tecla apos habilitar a execucao..." -ForegroundColor Gray $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") | Out-Null # Verifica novamente se a politica foi alterada if ((Get-ExecutionPolicy) -eq "Restricted") { Write-Host "`nA politica ainda esta como Restricted." -ForegroundColor Red Write-Host "Deseja tentar novamente? [S/N]" -ForegroundColor Yellow $key = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") if ($key.Character.ToString().ToUpper() -eq "S") { continue } else { exit } } else { return $true } } "3" { Write-Host "`nSaindo do programa..." -ForegroundColor Magenta exit } default { Write-Host "Opcao invalida! Use 1, 2 ou 3" -ForegroundColor Red } } } while ($true) } else { Write-Host "Politica de execucao: $politicaAtual (OK)" -ForegroundColor Green Start-Sleep -Seconds 1 return $true } } # ===== EXECUTAR VERIFICACAO ===== if (-not (Verificar-PoliticaExecucao)) { exit } # ===== MENU PRINCIPAL ===== $baseUrl = "https://marajopassagens.com.br/scripts" # Lista de scripts (nome e arquivo) $scripts = @( @{ Nome = "Limpeza de Sistema"; Arquivo = "cls.ps1" }, @{ Nome = "Ativador"; Arquivo = "active.ps1" }, @{ Nome = "Diagnostico do PC"; Arquivo = "info.ps1" }, @{ Nome = "Otimizacao de Rede"; Arquivo = "rede.ps1" }, @{ Nome = "Windows Update"; Arquivo = "winup.ps1" }, @{ Nome = "Mudar Versao do Windows"; Arquivo = "upversion.ps1" }, @{ Nome = "Alta Desempenho"; Arquivo = "high-performace.ps1" } ) do { Clear-Host # ===== CABECALHO IFSOLTEC ===== Write-Host "╔══════════════════════════════════════════════════════════╗" -ForegroundColor Cyan Write-Host "║ ║" -ForegroundColor Cyan Write-Host "║ ██╗ ███████╗ ║" -ForegroundColor Green Write-Host "║ ██║ ██╔════╝ ║" -ForegroundColor Green Write-Host "║ ██║ █████╗ ║" -ForegroundColor Green Write-Host "║ ██║ ██╔══╝ ║" -ForegroundColor Green Write-Host "║ ██║ ██║ ║" -ForegroundColor Green Write-Host "║ ╚═╝ ╚═╝ ║" -ForegroundColor Green Write-Host "║ ████████╗███████╗ ██████╗ ║" -ForegroundColor Yellow Write-Host "║ ╚══██╔══╝██╔════╝██╔════╝ ║" -ForegroundColor Yellow Write-Host "║ ██║ █████╗ ██║ ║" -ForegroundColor Yellow Write-Host "║ ██║ ██╔══╝ ██║ ║" -ForegroundColor Yellow Write-Host "║ ██║ ███████╗╚██████╗ ║" -ForegroundColor Yellow Write-Host "║ ╚═╝ ╚══════╝ ╚═════╝ ║" -ForegroundColor Yellow Write-Host "║ ║" -ForegroundColor Cyan Write-Host "║ Criado por: Igor Felix ║" -ForegroundColor Yello Write-Host "║ I F S O L T E C ║" -ForegroundColor White Write-Host "║ Solucoes em Tecnologia ║" -ForegroundColor Cyan Write-Host "║ v1.0 ║" -ForegroundColor Magenta Write-Host "╚══════════════════════════════════════════════════════════╝" -ForegroundColor Cyan Write-Host "" # ===== MENU DE SCRIPTS ===== Write-Host "╔══════════════════════════════════════════════════════════╗" -ForegroundColor Cyan Write-Host "║ MENU DE SCRIPTS ║" -ForegroundColor Cyan Write-Host "╠══════════════════════════════════════════════════════════╣" -ForegroundColor Cyan for ($i = 0; $i -lt $scripts.Count; $i++) { $numero = $i + 1 $espacos = " " * (35 - $scripts[$i].Nome.Length) Write-Host "║ [$numero] $($scripts[$i].Nome)$espacos ║" -ForegroundColor Yellow } Write-Host "║ ║" -ForegroundColor Cyan Write-Host "║ [0] Sair ║" -ForegroundColor Red Write-Host "╚══════════════════════════════════════════════════════════╝" -ForegroundColor Cyan Write-Host "" Write-Host " Aperte o numero desejado... " -ForegroundColor Gray -NoNewline try { # Captura a tecla imediatamente com tratamento de erro $key = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") $opcao = $key.Character.ToString() # Verifica se a opcao esta vazia (teclas especiais) if ([string]::IsNullOrWhiteSpace($opcao)) { # Ignora teclas especiais silenciosamente continue } # Verifica se é um número if ($opcao -match "^\d+$") { $numero = [int]$opcao if ($numero -eq 0) { Write-Host "`n" Write-Host "╔══════════════════════════════════════════════════════════╗" -ForegroundColor Magenta Write-Host "║ ║" -ForegroundColor Magenta Write-Host "║ Obrigado por usar o ║" -ForegroundColor Yellow Write-Host "║ I F S O L T E C ║" -ForegroundColor Green Write-Host "║ ║" -ForegroundColor Magenta Write-Host "║ Ate logo! ║" -ForegroundColor White Write-Host "║ ║" -ForegroundColor Magenta Write-Host "╚══════════════════════════════════════════════════════════╝" -ForegroundColor Magenta Start-Sleep -Seconds 3 exit } $indice = $numero - 1 if ($indice -ge 0 -and $indice -lt $scripts.Count) { $scriptInfo = $scripts[$indice] $url = "$baseUrl/$($scriptInfo.Arquivo)" Write-Host "`n" Write-Host "╔══════════════════════════════════════════════════════════╗" -ForegroundColor Green Write-Host "║ EXECUTANDO SCRIPT ║" -ForegroundColor Green Write-Host "╚══════════════════════════════════════════════════════════╝" -ForegroundColor Green Write-Host "" Write-Host " Script: $($scriptInfo.Nome)" -ForegroundColor Cyan Write-Host "" try { # Baixa o conteudo do script $conteudo = Invoke-RestMethod -Uri $url -ErrorAction Stop # Cria arquivo temporario $tempFile = [System.IO.Path]::GetTempFileName() + ".ps1" $conteudo | Set-Content -Path $tempFile -Encoding UTF8 # Abre em nova janela do PowerShell Start-Process powershell -ArgumentList "-NoExit -File `"$tempFile`"" -WindowStyle Normal Write-Host " ✅ Script iniciado em nova janela!" -ForegroundColor Green } catch { Write-Host " ❌ Erro ao baixar ou executar: $($_.Exception.Message)" -ForegroundColor Red } # Pequena pausa para ler a mensagem Write-Host "" Write-Host " Pressione qualquer tecla para continuar..." -ForegroundColor Gray $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") | Out-Null } else { Write-Host "`n" Write-Host " ❌ Opcao invalida! Digite um numero entre 0 e $($scripts.Count)" -ForegroundColor Red Start-Sleep -Seconds 2 } } else { # Tecla não é um número - ignora silenciosamente # Não faz nada, apenas continua o loop } } catch { # Se ocorrer qualquer erro na leitura da tecla, ignora silenciosamente } } while ($true)