Come utilizzare PowerShell per automatizzare le installazioni di Office 365

Nel mondo frenetico ed esigente dell’IT, ogni strumento che fa risparmiare tempo e semplifica le attività vale oro. Oggi esploreremo il modo in cui gli script PowerShell possono essere utilizzati per automatizzare le installazioni di Office 365, un’operazione fondamentale che può far risparmiare innumerevoli ore nel lungo periodo. Infatti, con uno script ben scritto, è possibile gestire le installazioni di un’intera rete dalla propria scrivania. Questo post è rivolto ai professionisti IT e ai Managed Service Provider (MSP) che desiderano semplificare le loro implementazioni di Office 365 utilizzando la potenza di PowerShell.

Perché automatizzare le installazioni di Office 365 con PowerShell?

PowerShell è un linguaggio di scripting avanzato e una shell sviluppata da Microsoft. È parte integrante dell’ecosistema Windows fin da Windows 7 e la sua potenza e flessibilità lo hanno reso uno strumento fondamentale per molti professionisti IT e MSP. Automatizzare le installazioni di Office 365 tramite PowerShell può ridurre drasticamente il tempo e l’impegno necessari per distribuire Office 365 su più macchine. 

Inoltre, gli script PowerShell possono essere personalizzati in base alle proprie esigenze. Ad esempio, lo script può essere configurato per installare componenti specifici di Office 365, applicare determinate impostazioni e persino effettuare la pulizia dopo l’installazione. Questo livello di personalizzazione consente ai professionisti IT e agli MSP di garantire che Office 365 venga distribuito in modo coerente su tutti i computer, allineandosi alle policy e agli standard IT dell’azienda. 

Un’immersione profonda nello script PowerShell per automatizzare le installazioni di Office 365

Vediamo un esempio di script PowerShell per automatizzare le installazioni di Office 365. Tale script è stato progettato per automatizzare le installazioni di Office 365 utilizzando un file di configurazione personalizzato o uno predefinito. Nel caso in cui l’installazione non vada a buon fine, lo script fornisce un messaggio di errore, rendendo più semplice la risoluzione dei problemi.

Ciò che rende questo script per automatizzare le installazioni di Office particolarmente utile è la capacità di scaricare e utilizzare Office Deployment Tool dai server di Microsoft. Questa funzionalità garantisce che per l’installazione venga sempre utilizzata la versione più recente di Office 365. Inoltre, lo script verifica se la suite Office 365 è stata installata correttamente, fornendo un ulteriore livello di garanzia.

Quando l’installazione è riuscita, lo script attiva il riavvio del sistema. Ciò è particolarmente utile perché alcuni componenti di Office 365 richiedono un riavvio del sistema per funzionare correttamente. Lo script è inoltre dotato di un meccanismo di pulizia che può essere attivato per rimuovere i file di installazione dopo che Office 365 è stato installato.

Script PowerShell per automatizzare le installazioni di Office 365

#Requires -Version 5.1

<# .SYNOPSIS Installs Office 365 from a config file or creates a generic config file and installs. .DESCRIPTION Installs Office 365 from a config file or creates a generic config file and installs. .EXAMPLE No parameters need if you want to use the default config file OR change the $OfficeXML variable to use your XML config file's content. .EXAMPLE -ConfigurationXMLFile https://replace.me/configuration.xml Install Office 365 and use a local config file. You can use https://config.office.com/deploymentsettings to help build the config file. .OUTPUTS None .NOTES This will reboot after a successful install. Minimum OS Architecture Supported: Windows 10, Windows Server 2016 Release Notes: Renamed script and added Script Variable support, made restarts optional, changed default download path to %TEMP%\Office365Install, switched to downloading an xml instead of using a local path. #>

[CmdletBinding()]
param(
    # Use a existing config file
    [Parameter()]
    [String]$ConfigurationXMLFile,
    # Path where we will store our install files and our XML file
    [Parameter()]
    [String]$OfficeInstallDownloadPath = "$env:TEMP\Office365Install",
    [Parameter()]
    [Switch]$Restart = [System.Convert]::ToBoolean($env:restartComputer)
)

begin {
    if ($env:linkToConfigurationXml -and $env:linkToConfigurationXml -notlike "null") { $ConfigurationXMLFile = $env:linkToConfigurationXml }

    $CleanUpInstallFiles = $True

    # In case 'https://' is omitted from the URL.
    if ($ConfigurationXMLFile -and $ConfigurationXMLFile -notmatch "^http(s)?://") {
        Write-Warning "http(s):// is required to download the file. Adding https:// to your input...."
        $ConfigurationXMLFile = "https://$ConfigurationXMLFile"
        Write-Warning "New Url $ConfigurationXMLFile."
    }

    # Set TLS Version
    $SupportedTLSversions = [enum]::GetValues('Net.SecurityProtocolType')
    if ( ($SupportedTLSversions -contains 'Tls13') -and ($SupportedTLSversions -contains 'Tls12') ) {
        [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol::Tls13 -bor [System.Net.SecurityProtocolType]::Tls12
    }
    elseif ( $SupportedTLSversions -contains 'Tls12' ) {
        [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12
    }
    else {
        # Not everything requires TLS 1.2, but we'll try anyway.
        Write-Warning "TLS 1.2 and or TLS 1.3 are not supported on this system. This script may fail!"
        if ($PSVersionTable.PSVersion.Major -lt 3) {
            Write-Warning "PowerShell 2 / .NET 2.0 doesn't support TLS 1.2."
        }
    }

    function Set-XMLFile {
        # XML data that will be used for the download/install
        # Example config below generated from https://config.office.com/
        # To use your own config, just replace  to  with your xml config file content.
        # Notes:
        #  "@ can not have any character after it
        #  @" can not have any spaces or character before it.
        $OfficeXML = [XML]@"

  
  
    
      
      
      
      
      
      
    
  
  
  
  
  
  
  
  
    
    
    
    
  
  
   
  

"@
        #Save the XML file
        $OfficeXML.Save("$OfficeInstallDownloadPath\OfficeInstall.xml")
      
    }
    function Get-ODTURL {
    
        [String]$MSWebPage = Invoke-RestMethod 'https://www.microsoft.com/en-us/download/confirmation.aspx?id=49117'
    
        $MSWebPage | ForEach-Object {
            if ($_ -match 'url=(https://.*officedeploymenttool.*\.exe)') {
                $matches[1]
            }
        }
    
    }
    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        if ($p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator))
        { Write-Output $true }
        else
        { Write-Output $false }
    }

    # Utility function for downloading files.
    function Invoke-Download {
        param(
            [Parameter()]
            [String]$URL,
            [Parameter()]
            [String]$Path,
            [Parameter()]
            [int]$Attempts = 3,
            [Parameter()]
            [Switch]$SkipSleep
        )
        Write-Host "URL given, Downloading the file..."

        $i = 1
        While ($i -le $Attempts) {
            # Some cloud services have rate-limiting
            if (-not ($SkipSleep)) {
                $SleepTime = Get-Random -Minimum 3 -Maximum 15
                Write-Host "Waiting for $SleepTime seconds."
                Start-Sleep -Seconds $SleepTime
            }
        
            if ($i -ne 1) { Write-Host "" }
            Write-Host "Download Attempt $i"

            try {
                # Invoke-WebRequest is preferred because it supports links that redirect, e.g., https://t.ly
                if ($PSVersionTable.PSVersion.Major -lt 4) {
                    # Downloads the file
                    $WebClient = New-Object System.Net.WebClient
                    $WebClient.DownloadFile($URL, $Path)
                }
                else {
                    # Standard options
                    $WebRequestArgs = @{
                        Uri                = $URL
                        OutFile            = $Path
                        MaximumRedirection = 10
                        UseBasicParsing    = $true
                    }

                    # Downloads the file
                    Invoke-WebRequest @WebRequestArgs
                }

                $File = Test-Path -Path $Path -ErrorAction SilentlyContinue
            }
            catch {
                Write-Warning "An error has occurred while downloading!"
                Write-Warning $_.Exception.Message

                if (Test-Path -Path $Path -ErrorAction SilentlyContinue) {
                    Remove-Item $Path -Force -Confirm:$false -ErrorAction SilentlyContinue
                }

                $File = $False
            }

            if ($File) {
                $i = $Attempts
            }
            else {
                Write-Warning "File failed to download."
                Write-Host ""
            }

            $i++
        }

        if (-not (Test-Path $Path)) {
            Write-Error -Message "Failed to download file!" -Category InvalidResult -Exception (New-Object System.Deployment.Application.DeploymentDownloadException)
            exit 1
        }
    }

    # Check's the two Uninstall registry keys to see if the app is installed. Needs the name as it would appear in Control Panel.
    function Find-UninstallKey {
        [CmdletBinding()]
        param (
            [Parameter(ValueFromPipeline)]
            [String]$DisplayName,
            [Parameter()]
            [Switch]$UninstallString
        )
        process {
            $UninstallList = New-Object System.Collections.Generic.List[Object]

            $Result = Get-ChildItem HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Get-ItemProperty | 
                Where-Object { $_.DisplayName -like "*$DisplayName*" }

            if ($Result) { $UninstallList.Add($Result) }

            $Result = Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Get-ItemProperty | 
                Where-Object { $_.DisplayName -like "*$DisplayName*" }

            if ($Result) { $UninstallList.Add($Result) }

            # Programs don't always have an uninstall string listed here so to account for that I made this optional.
            if ($UninstallString) {
                # 64 Bit
                $UninstallList | Select-Object -ExpandProperty UninstallString -ErrorAction Ignore
            }
            else {
                $UninstallList
            }
        }
    }
}
process {
    $VerbosePreference = 'Continue'
    $ErrorActionPreference = 'Stop'

    if (-not (Test-IsElevated)) {
        Write-Error -Message "Access Denied. Please run with Administrator privileges." -Category PermissionDenied -Exception (New-Object System.Security.SecurityException)
        exit 1
    }

    if (-not (Test-Path $OfficeInstallDownloadPath )) {
        New-Item -Path $OfficeInstallDownloadPath -ItemType Directory | Out-Null
    }

    if (-not ($ConfigurationXMLFile)) {
        Set-XMLFile
    }
    else {
        Invoke-Download -URL $ConfigurationXMLFile -Path "$OfficeInstallDownloadPath\OfficeInstall.xml"
    }

    $ConfigurationXMLFile = "$OfficeInstallDownloadPath\OfficeInstall.xml"
    $ODTInstallLink = Get-ODTURL

    #Download the Office Deployment Tool
    Write-Host 'Downloading the Office Deployment Tool...'
    Invoke-Download -URL $ODTInstallLink -Path "$OfficeInstallDownloadPath\ODTSetup.exe"

    #Run the Office Deployment Tool setup
    try {
        Write-Host 'Running the Office Deployment Tool...'
        Start-Process "$OfficeInstallDownloadPath\ODTSetup.exe" -ArgumentList "/quiet /extract:$OfficeInstallDownloadPath" -Wait -NoNewWindow
    }
    catch {
        Write-Warning 'Error running the Office Deployment Tool. The error is below:'
        Write-Warning $_
        exit 1
    }

    #Run the O365 install
    try {
        Write-Host 'Downloading and installing Microsoft 365'
        $Install = Start-Process "$OfficeInstallDownloadPath\Setup.exe" -ArgumentList "/configure $ConfigurationXMLFile" -Wait -PassThru -NoNewWindow

        if ($Install.ExitCode -ne 0) {
            Write-Error -Message "Exit Code does not indicate success!" -Category InvalidResult -Exception (New-Object System.Deployment.Application.DeploymentException)
            exit 1
        }
    }
    Catch {
        Write-Warning 'Error running the Office install. The error is below:'
        Write-Warning $_
    }

    $OfficeInstalled = Find-UninstallKey -DisplayName "Microsoft 365"

    if ($CleanUpInstallFiles) {
        Write-Host "Cleaning up install files..."
        Remove-Item -Path $OfficeInstallDownloadPath -Force -Recurse
    }

    if ($OfficeInstalled) {
        Write-Host "$($OfficeInstalled.DisplayName) installed successfully!"
        if ($Restart) { Start-Process shutdown.exe -ArgumentList "-r -t 60" -Wait -NoNewWindow }
        exit 0
    }
    else {
        Write-Error -Message 'Microsoft 365 was not detected after the install ran!' -Category InvalidResult -Exception (New-Object System.Deployment.Application.DeploymentException)
        exit 1
    }
}
end {}

 

Accedi a oltre 700 script nel Dojo di NinjaOne

Ottieni l’accesso

Scenari esemplificativi dello script per automatizzare le installazioni di Office

Scenario n.1: Distribuzione su larga scala

Supponiamo che tu sia un amministratore IT di un’azienda che sta per assumere un centinaio di nuovi dipendenti. Installare manualmente Office 365 su ogni computer sarebbe un’impresa ardua. È invece possibile utilizzare questo script PowerShell per automatizzare le installazioni di Office. Utilizzando NinjaOne per eseguire lo script da remoto su ogni dispositivo, è possibile automatizzare le installazioni di Office 365 in tutta la rete. Questo approccio semplificato non solo fa risparmiare tempo prezioso, ma garantisce anche l’uniformità, una caratteristica essenziale per gestire efficacemente una grande infrastruttura IT.

Scopri come NinjaOne può migliorare l’efficienza della tua infrastruttura IT.  

Link: https://www.ninjaone.com/it/efficienza-it

Scenario 2: Forza lavoro a distanza 

Con l’aumento del lavoro a distanza, molte aziende hanno dipendenti che lavorano da varie posizioni con i propri dispositivi. Assicurarsi che ogni lavoratore remoto abbia una versione di Office 365 correttamente installata e configurata può essere una sfida. Distribuire questo script PowerShell per automatizzare le installazioni di Office alla tua forza lavoro remota consentirà a tutti i dipendenti di avere Office 365 senza doversi preoccupare dell’installazione. Lo script assicura che Office 365 sia installato correttamente e configurato in base agli standard dell’organizzazione.

Scenario 3: Gestione dei clienti MSP

Come fornitore di servizi gestiti (MSP) è possibile che tu gestisca l’IT di diverse piccole imprese, ognuna con esigenze e configurazioni specifiche. Con questo script PowerShell è possibile creare più file di configurazione XML su misura per ogni cliente. Quando è il momento di installare o aggiornare Office 365 per un cliente, è sufficiente eseguire lo script con il file di configurazione appropriato. Questo garantisce una configurazione personalizzata e coerente di Office 365 per ciascuno dei tuoi clienti. 

Scenario 4: Aggiornamenti regolari  

Office 365 viene aggiornato regolarmente da Microsoft e mantenere aggiornate le installazioni della tua organizzazione può essere un compito dispendioso in termini di tempo. Con questo script, è possibile programmare l’esecuzione di aggiornamenti automatici in un momento opportuno, garantendo un’interruzione minima del flusso di lavoro del team. Lo script utilizza Office Deployment Tool per scaricare e installare l’ultima versione di Office 365, assicurando che il team abbia sempre accesso alle ultime funzionalità e agli aggiornamenti di sicurezza. 

In ognuno dei scenari, questo script PowerShell può semplificare in modo significativo il processo di installazione e di gestione di Office 365. Automatizzando queste attività, è possibile risparmiare tempo, ridurre il rischio di errori e garantire agli utenti un’esperienza Office 365 coerente e affidabile. 

Utilizzo dello script per automatizzare le installazioni di Office 365 nel flusso di lavoro

L’integrazione di questo script PowerShell nel proprio flusso di lavoro può semplificare il processo di distribuzione di Office 365. Invece di scaricare ed eseguire manualmente Office Deployment Tool su ogni computer, lo script può essere eseguito in remoto da una postazione centrale per automatizzare le installazioni di Office. Questo riduce le possibilità di errore umano e garantisce una configurazione standard per tutte le installazioni.

Inoltre, personalizzando il file di configurazione XML, è possibile adattare l’installazione di Office 365 alle esigenze della propria organizzazione. Questo include l’indicazione della versione di Office 365, del canale di aggiornamento e persino dei singoli componenti di Office da installare.

Considerazioni finali

L’automazione è la migliore amica di un professionista IT e PowerShell offre un modo potente per automatizzare le installazioni di Office 365. Questo pratico script non solo semplifica il processo di distribuzione, ma fornisce anche opzioni di personalizzazione e funzionalità di pulizia.

Integrando lo script per automatizzare le installazioni di Office 365 nel tuo flusso di lavoro, potrai ridurre significativamente il tempo e l’impegno necessari per gestire le installazioni di Office 365 nella tua rete. Quindi, sfrutta la potenza di PowerShell e rendi semplici le implementazioni di Office 365.

NinjaOne è in grado di semplificare le operazioni automatizzando le attività ripetitive e che richiedono molto tempo. L’interfaccia intuitiva consente ai tecnici di tutti i livelli di applicare facilmente l’automazione agli endpoint, compresi gli script personalizzati da un’ampia libreria, rendendo la risoluzione facile e intuitiva. Come ha notato Chris Hesler della Crossroads Church, “NinjaOne ci ha aiutato… a ridurre le ore di lavoro… siamo in grado di automatizzare maggiormente la libreria di script per risolvere i nostri problemi ricorrenti”. Scopri il potere rivoluzionario dell’automazione nelle tue operazioni IT con NinjaOne, uno strumento progettato all’insegna della flessibilità e dell’intuitività. 

Passi successivi

La creazione di un team IT efficiente ed efficace richiede una soluzione centralizzata che funga da principale strumento per la fornitura di servizi. NinjaOne consente ai team IT di monitorare, gestire, proteggere e supportare tutti i dispositivi, ovunque essi si trovino, senza la necessità di una complessa infrastruttura locale.

Per saperne di più su NinjaOne Endpoint Management, fai un tour dal vivo, o inizia la tua prova gratuita della piattaforma NinjaOne.

Ti potrebbe interessare anche

Guarda una demo×
×

Guarda NinjaOne in azione!

Inviando questo modulo, accetto La politica sulla privacy di NinjaOne.

Termini e condizioni NinjaOne

Cliccando sul pulsante “Accetto” qui sotto, dichiari di accettare i seguenti termini legali e le nostre condizioni d’uso:

  • Diritti di proprietà: NinjaOne possiede e continuerà a possedere tutti i diritti, i titoli e gli interessi relativi allo script (compreso il copyright). NinjaOne ti concede una licenza limitata per l’utilizzo dello script in conformità con i presenti termini legali.
  • Limitazione d’uso: Puoi utilizzare lo script solo per legittimi scopi personali o aziendali interni e non puoi condividere lo script con altri soggetti.
  • Divieto di ripubblicazione: In nessun caso ti è consentito ripubblicare lo script in una libreria di script appartenente o sotto il controllo di un altro fornitore di software.
  • Esclusione di garanzia: Lo script viene fornito “così com’è” e “come disponibile”, senza garanzie di alcun tipo. NinjaOne non promette né garantisce che lo script sia privo di difetti o che soddisfi le tue esigenze o aspettative specifiche.
  • Assunzione del rischio: L’uso che farai dello script è da intendersi a tuo rischio. Riconosci che l’utilizzo dello script comporta alcuni rischi intrinseci, che comprendi e sei pronto ad assumerti.
  • Rinuncia e liberatoria: Non riterrai NinjaOne responsabile di eventuali conseguenze negative o indesiderate derivanti dall’uso dello script e rinuncerai a qualsiasi diritto legale o di equità e a qualsiasi rivalsa nei confronti di NinjaOne in relazione all’uso dello script.
  • EULA: Se sei un cliente NinjaOne, l’uso dello script è soggetto al Contratto di licenza con l’utente finale (EULA) applicabile.