Atualizacao versao 2025.09

This commit is contained in:
2025-09-11 11:27:13 -03:00
parent 2f93b9cf72
commit 8d12006d2d
10 changed files with 1291 additions and 0 deletions

View File

@@ -0,0 +1,154 @@
<#
Atualiza C:\plhDownloads\ com o conteúdo do repositório (branch main)
http://git.mgcs.com.br/suporte/vlt-install e executa pl_inst.ps1
Requisitos:
- PowerShell com permissões para escrever em C:\plhDownloads\
- Preferível executar em janela elevada (winget pode pedir UAC)
O script:
1) Garante winget e usa-o para instalar/atualizar Git (Git.Git).
2) Clona/atualiza o repo em pasta temporária.
3) Copia por cima (sem /MIR) para C:\plhDownloads\ (exclui .git).
4) Executa pl_inst.ps1
#>
$ErrorActionPreference = 'Stop'
# ===== Configurações =====
$RepoUrl = 'http://git.mgcs.com.br/suporte/vlt-install'
$Branch = 'main' # sempre main
$TargetDir = 'C:\plhDownloads'
$WorkDir = Join-Path $env:TEMP 'vlt-install_repo'
# ===== Utilitárias =====
function Write-Info($m){ Write-Host "[INFO ] $m" -ForegroundColor Cyan }
function Write-Ok($m) { Write-Host "[ OK ] $m" -ForegroundColor Green }
function Write-Warn($m){ Write-Host "[WARN ] $m" -ForegroundColor Yellow }
function Write-Err($m) { Write-Host "[ERRO ] $m" -ForegroundColor Red }
function Ensure-Dir([string]$Path){
if (-not (Test-Path -LiteralPath $Path)) {
New-Item -ItemType Directory -Path $Path -Force | Out-Null
}
}
function Test-Winget {
return [bool](Get-Command winget -ErrorAction SilentlyContinue)
}
function Ensure-Git-WithWinget {
if (-not (Test-Winget)) {
Write-Err "winget não encontrado. Instale o 'App Installer' da Microsoft Store para habilitar o winget."
throw "winget ausente"
}
Write-Info "Verificando Git via winget..."
$argsCommon = @('--accept-package-agreements','--accept-source-agreements')
# Detecta se Git está instalado
$gitInstalled = $false
try {
# 'winget list' retorna errolevel 0 mesmo sem pacote; interpretamos saída
$list = winget list --id Git.Git -e 2>$null
if ($list -match 'Git\s+Git') { $gitInstalled = $true }
} catch { }
if ($gitInstalled) {
Write-Info "Atualizando Git (se necessário)..."
# silencia prompts; se não houver upgrade disponível, winget finaliza OK.
winget upgrade --id Git.Git -e @argsCommon --silent | Out-Null
} else {
Write-Info "Instalando Git..."
winget install --id Git.Git -e @argsCommon --silent | Out-Null
}
# Garante que o git esteja acessível
$gitCmd = Get-Command git -ErrorAction SilentlyContinue
if (-not $gitCmd) {
# tenta caminho usual
$maybeGit = 'C:\Program Files\Git\cmd\git.exe'
if (Test-Path $maybeGit) {
$env:Path = "C:\Program Files\Git\cmd;$env:Path"
}
}
$ver = git --version 2>$null
if (-not $ver) { throw "Git não acessível após instalação/atualização." }
Write-Ok "Git pronto: $ver"
}
# ===== Fluxo principal =====
try {
Ensure-Git-WithWinget
Ensure-Dir $TargetDir
# Prepara/atualiza repositório no diretório de trabalho
if (Test-Path (Join-Path $WorkDir '.git')) {
Write-Info "Atualizando repositório existente em $WorkDir ..."
Push-Location $WorkDir
try { git remote set-url origin $RepoUrl | Out-Null } catch { }
git fetch --all --prune
git checkout $Branch
git reset --hard "origin/$Branch"
Pop-Location
} else {
Write-Info "Clonando repositório (branch $Branch) para $WorkDir ..."
try { Remove-Item -LiteralPath $WorkDir -Recurse -Force -ErrorAction SilentlyContinue } catch { }
Ensure-Dir $WorkDir
git clone --depth 1 --branch $Branch $RepoUrl $WorkDir
Write-Ok "Clone concluído."
}
# Copiar por cima para o destino (sem espelhar/sem apagar o que já existe)
Write-Info "Copiando arquivos para $TargetDir (sem espelhar)..."
$log = Join-Path $env:TEMP 'vlt-install_copy.log'
# Robocopy:
# /E -> inclui subpastas (inclui vazias)
# /IS -> inclui arquivos “iguais” (força overwrite)
# /IT -> inclui arquivos “tweak”
# /XO -> (opcional) pula arquivos mais antigos na origem; REMOVIDO para forçar overwrite
# /NFL /NDL /NP -> logs mais limpos
$rc = robocopy `
$WorkDir `
$TargetDir `
* `
/E /IS /IT /R:1 /W:1 /NFL /NDL /NP `
/XD ".git" `
/XF ".gitignore" ".gitattributes" `
/LOG:$log
if ($LASTEXITCODE -ge 8) {
Write-Err "Falha ao copiar arquivos. Veja o log: $log"
exit $LASTEXITCODE
} else {
Write-Ok "Cópia finalizada. (código robocopy: $LASTEXITCODE) Log: $log"
}
# Executa o instalador
$InstallScript = Join-Path $TargetDir 'pl_inst.ps1'
if (Test-Path -LiteralPath $InstallScript) {
Write-Info "Executando $InstallScript ..."
try { Unblock-File -LiteralPath $InstallScript -ErrorAction SilentlyContinue } catch { }
$p = Start-Process -FilePath 'powershell.exe' -ArgumentList @(
'-NoProfile','-ExecutionPolicy','Bypass','-File', $InstallScript
) -Wait -PassThru
if ($p.ExitCode -ne 0) {
Write-Err "pl_inst.ps1 retornou código $($p.ExitCode)."
exit $p.ExitCode
} else {
Write-Ok "pl_inst.ps1 executado com sucesso."
}
} else {
Write-Warn "Arquivo não encontrado: $InstallScript. Execução ignorada."
}
Write-Ok "Processo concluído."
exit 0
} catch {
Write-Err ("Erro: " + $_.Exception.Message)
exit 1
}