# Descarga 7-Zip Extra y ODBC para empaquetar en CloudRestoreAS.exe $ErrorActionPreference = "Stop" $Root = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent $Versions = Get-Content (Join-Path $Root "packaging\bundled-versions.json") | ConvertFrom-Json $Bundled = Join-Path $Root "packaging\bundled\windows" $Seven = Join-Path $Bundled "7zip" $Odbc = Join-Path $Bundled "odbc" New-Item -ItemType Directory -Force -Path $Seven, $Odbc | Out-Null Write-Host "==> 7-Zip Extra ($($Versions.seven_zip))" -ForegroundColor Cyan if (-not (Test-Path (Join-Path $Seven "7z.exe"))) { $tmp = Join-Path $env:TEMP "cloudrestore-7z-$(Get-Random)" New-Item -ItemType Directory -Path $tmp | Out-Null $sevenR = Join-Path $tmp "7zr.exe" $extra = Join-Path $tmp "7z-extra.7z" Invoke-WebRequest -Uri $Versions.seven_zip_windows_7zr -OutFile $sevenR Invoke-WebRequest -Uri $Versions.seven_zip_windows_extra -OutFile $extra & $sevenR x $extra ("-o" + $Seven) -y | Out-Null $x64Exe = Join-Path $Seven "x64\7za.exe" $x64Dll = Join-Path $Seven "x64\7za.dll" if (Test-Path $x64Exe) { Copy-Item $x64Exe (Join-Path $Seven "7z.exe") -Force Copy-Item $x64Exe (Join-Path $Seven "7za.exe") -Force } if (Test-Path $x64Dll) { Copy-Item $x64Dll (Join-Path $Seven "7z.dll") -Force Copy-Item $x64Dll (Join-Path $Seven "7za.dll") -Force } Remove-Item -Recurse -Force $tmp Write-Host " 7z.exe en $Seven" } else { Write-Host " 7-Zip ya existe" } Write-Host "==> ODBC Driver 18 (extraer DLLs del MSI)" -ForegroundColor Cyan $Msi = Join-Path $Odbc "msodbcsql18.msi" if (-not (Test-Path (Join-Path $Odbc "msodbcsql18.dll"))) { if (-not (Test-Path $Msi)) { Invoke-WebRequest -Uri $Versions.msodbcsql18_msi -OutFile $Msi } $extract = Join-Path $Odbc "_msi_extract" if (Test-Path $extract) { Remove-Item -Recurse -Force $extract } New-Item -ItemType Directory -Path $extract | Out-Null $msiArgs = @("/a", "`"$Msi`"", "/qn", "TARGETDIR=`"$extract`"", "IACCEPTMSODBCSQLLICENSETERMS=YES") $proc = Start-Process msiexec.exe -ArgumentList $msiArgs -Wait -PassThru if ($proc.ExitCode -ne 0) { Write-Host " msiexec /a fallo (codigo $($proc.ExitCode)); intentando instalacion silenciosa local..." -ForegroundColor Yellow $local = Join-Path $Odbc "driver_install" New-Item -ItemType Directory -Force -Path $local | Out-Null Start-Process msiexec.exe -ArgumentList "/i", "`"$Msi`"", "/qn", "IACCEPTMSODBCSQLLICENSETERMS=YES", "ADDLOCAL=ALL" -Wait $sysOdbc = "${env:ProgramFiles}\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn" if (Test-Path $sysOdbc) { Get-ChildItem $sysOdbc -Filter "*.dll" | Copy-Item -Destination $Odbc -Force } $driverDir = "${env:ProgramFiles}\Microsoft SQL Server\Client SDK\ODBC\180\Tools\Binn" if (Test-Path $driverDir) { Get-ChildItem $driverDir -Filter "*.dll" | Copy-Item -Destination $Odbc -Force } foreach ($dll in @("msodbcsql18.dll", "msodbcsql17.dll")) { $sys = Join-Path $env:SystemRoot "System32\$dll" if (Test-Path $sys) { Copy-Item $sys $Odbc -Force } } } else { Get-ChildItem -Path $extract -Recurse -Filter "msodbcsql*.dll" | ForEach-Object { Copy-Item $_.FullName $Odbc -Force } Get-ChildItem -Path $extract -Recurse -Filter "*.dll" | Where-Object { $_.Name -match "mso|odbc|ssl|crypto|bcp" } | ForEach-Object { Copy-Item $_.FullName $Odbc -Force -ErrorAction SilentlyContinue } Remove-Item -Recurse -Force $extract -ErrorAction SilentlyContinue } Write-Host " DLLs ODBC en $Odbc" } else { Write-Host " ODBC ya existe" } if (-not (Test-Path (Join-Path $Odbc "odbcinst.ini"))) { @" [ODBC Driver 18 for SQL Server] Description=Microsoft ODBC Driver 18 for SQL Server Driver=msodbcsql18.dll UsageCount=1 [ODBC Driver 17 for SQL Server] Description=Microsoft ODBC Driver 17 for SQL Server Driver=msodbcsql17.dll UsageCount=1 "@ | Set-Content (Join-Path $Odbc "odbcinst.ini") -Encoding ASCII "[ODBC Data Sources]" | Set-Content (Join-Path $Odbc "odbc.ini") -Encoding ASCII } Write-Host "Listo: $Bundled" -ForegroundColor Green