94 lines
4.2 KiB
PowerShell
94 lines
4.2 KiB
PowerShell
# 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
|