diff --git a/office-deploy.ps1 b/office-deploy.ps1 new file mode 100644 index 0000000..a904b85 --- /dev/null +++ b/office-deploy.ps1 @@ -0,0 +1,115 @@ +<# +.SYNOPSIS + Script di livello enterprise per automatizzare il download e l'installazione di Microsoft Office tramite l'ODT. +.DESCRIPTION + Questo script autonomo gestisce l'intero processo: download dell'ultima versione dell'ODT, estrazione silenziosa, + e installazione di Microsoft 365 Apps for Enterprise basata su una configurazione predefinita. +.PARAMETER WorkingDirectory + Directory temporanea per il download e l'estrazione dei file. +.PARAMETER Mode + Specifica la modalità di esecuzione: 'Download', 'Configure' o 'All'. +.EXAMPLE + .\Deploy-Office.ps1 -Mode All +#> + +param( + [Parameter(Mandatory = $false)] + [string]$WorkingDirectory = "C:\Temp\ODT_Install", + + [Parameter(Mandatory = $false)] + + [string]$Mode = 'All' +) + +# --- Inizio Esecuzione --- + +# Definizione della configurazione XML di Office +# Questo script installa Microsoft 365 Apps for Enterprise (64-bit) dal canale "Current". +# Esclude Groove, Lync e Teams. L'installazione è silenziosa. +$OfficeConfigurationXml = @" + + + + + + + + + + + + + +"@ + +# Funzione per ottenere l'URL di download più recente dell'ODT +function Get-LatestOdtUrl { + try { + $response = Invoke-WebRequest -Uri "https://www.microsoft.com/en-us/download/details.aspx?id=49117" -UseBasicParsing + $url = $response.Links | Where-Object { $_.href -like "*officedeploymenttool*.exe" } | Select-Object -ExpandProperty href -First 1 + return $url + } + catch { + Write-Error "Impossibile recuperare l'URL di download dell'ODT. $_" + return $null + } +} + +try { + # 1. Preparazione dell'ambiente + if (-not (Test-Path $WorkingDirectory)) { + New-Item -Path $WorkingDirectory -ItemType Directory -Force | Out-Null + Write-Host "Directory di lavoro creata in: $WorkingDirectory" + } + $OdtDownloaderPath = Join-Path $WorkingDirectory "officedeploymenttool.exe" + $SetupExePath = Join-Path $WorkingDirectory "setup.exe" + $ConfigurationXmlPath = Join-Path $WorkingDirectory "configuration.xml" + + # Salvataggio del file di configurazione XML + $OfficeConfigurationXml | Out-File -FilePath $ConfigurationXmlPath -Encoding UTF8 + Write-Host "File di configurazione di Office salvato in: $ConfigurationXmlPath" + + # 2. Download ed Estrazione dell'ODT (se non già presente) + if (-not (Test-Path $SetupExePath)) { + Write-Host "setup.exe non trovato. Avvio del download dell'ODT..." + $latestOdtUrl = Get-LatestOdtUrl + if ($latestOdtUrl) { + Invoke-WebRequest -Uri $latestOdtUrl -OutFile $OdtDownloaderPath + if (-not (Test-Path $OdtDownloaderPath)) { throw "Download dell'ODT fallito." } + + Write-Host "Estrazione silenziosa dell'ODT..." + $extractArgs = "/extract:$WorkingDirectory /quiet" + Start-Process -FilePath $OdtDownloaderPath -ArgumentList $extractArgs -Wait -NoNewWindow + if (-not (Test-Path $SetupExePath)) { throw "Estrazione dell'ODT fallita." } + Write-Host "Estrazione completata con successo." + } + } else { + Write-Host "setup.exe già presente. Saltato il download e l'estrazione." + } + + # 3. Esecuzione delle modalità richieste + if ($Mode -in ('Download', 'All')) { + Write-Host "Avvio della modalità Download..." + $downloadArgs = "/download `"$ConfigurationXmlPath`"" + $process = Start-Process -FilePath $SetupExePath -ArgumentList $downloadArgs -Wait -PassThru + if ($process.ExitCode -ne 0) { throw "La fase di Download è fallita con codice di uscita: $($process.ExitCode)" } + Write-Host "Download completato con successo." + } + + if ($Mode -in ('Configure', 'All')) { + Write-Host "Avvio della modalità Configure..." + $configureArgs = "/configure `"$ConfigurationXmlPath`"" + $process = Start-Process -FilePath $SetupExePath -ArgumentList $configureArgs -Wait -PassThru + if ($process.ExitCode -ne 0) { throw "La fase di Configure è fallita con codice di uscita: $($process.ExitCode)" } + Write-Host "Configurazione completata con successo." + } + +} +catch { + Write-Error "Si è verificato un errore durante il processo di distribuzione: $_" +} +finally { + # Opzionale: Pulizia dei file di installazione + # Remove-Item -Path $WorkingDirectory -Recurse -Force + # Write-Host "Pulizia della directory di lavoro completata." +}