From 77787691ab55c1208c9f2582ed328d09704ccee8 Mon Sep 17 00:00:00 2001 From: Aaron Parker Date: Wed, 23 Jul 2025 18:58:22 +1000 Subject: [PATCH] Update Install FSLogix.ps1 Updates code to use full PowerShell commands (not aliases), simplifies code with use of variables to replace repeated path strings, fixes use of setting TLS (which was on the wrong line), resolves the FSLogix aka.ms link before downloading it, removes progress bars for Invoke-WebRequest and Expand-Archive for faster processing, updates the logic for finding the installer and installing the FSLogix agent and ensures logging during install. Removes the 'FSLogix Apps Online Help' shortcut created in the Start menu --- .../windows-scripts/Install FSLogix.ps1 | 106 ++++++++++++------ 1 file changed, 70 insertions(+), 36 deletions(-) diff --git a/scripted-actions/windows-scripts/Install FSLogix.ps1 b/scripted-actions/windows-scripts/Install FSLogix.ps1 index 2f94a0a..29b88b2 100644 --- a/scripted-actions/windows-scripts/Install FSLogix.ps1 +++ b/scripted-actions/windows-scripts/Install FSLogix.ps1 @@ -1,58 +1,92 @@ -#description: Downloads and installs FSLogix on the session hosts +#description: Downloads and installs the Microsoft FSLogix Agent on target session hosts #Written by Johan Vanneuville #No warranties given for this script #execution mode: IndividualWithRestart #tags: Nerdio, Apps install, FSLogix <# -Notes: -This script installs FSLogix on AVD Session hosts. - + Notes: + This script installs FSLogix on AVD Session hosts. #> +$FslogixUrl = "https://aka.ms/fslogix/download" -$FslogixUrl = "https://aka.ms/fslogix_download" - -# Start powershell logging -$SaveVerbosePreference = $VerbosePreference -$VerbosePreference = 'continue' +# Start PowerShell logging +$VerbosePreference = "Continue" +$ProgressPreference = [System.Management.Automation.ActionPreference]::SilentlyContinue # Suppress verbose output during script execution for faster performance $VMTime = Get-Date $LogTime = $VMTime.ToUniversalTime() -mkdir "C:\Windows\temp\NerdioManagerLogs\ScriptedActions\fslogix" -Force -Start-Transcript -Path "C:\Windows\temp\NerdioManagerLogs\ScriptedActions\fslogix\ps_log.txt" -Append +New-Item -Path "$Env:SystemRoot\Temp\NerdioManagerLogs\ScriptedActions\fslogix" -ItemType "Directory" -Force +Start-Transcript -Path "$Env:SystemRoot\Temp\NerdioManagerLogs\ScriptedActions\fslogix\ps_log.txt" -Append Write-Host "################# New Script Run #################" -Write-host "Current time (UTC-0): $LogTime" +Write-Host "Current time (UTC-0): $LogTime" # Make directory to hold install files +$SavePath = "$Env:SystemRoot\Temp\fslogix\install" +if (Test-Path -Path $SavePath) { + Get-ChildItem -Path $SavePath | Remove-Item -Recurse -Force +} +New-Item -Path $SavePath -ItemType Directory -Force | Out-Null -mkdir "C:\Windows\Temp\fslogix\install" -Force - -Get-ChildItem C:\Windows\Temp\fslogix\install\ | Remove-Item -Recurse -Force - -Invoke-WebRequest -Uri $FslogixUrl -OutFile "C:\Windows\Temp\fslogix\install\FSLogixAppsSetup.zip" -UseBasicParsing +# Download the FSLogix installer +try { + if ($PSEdition -eq "Desktop") { + Add-Type -AssemblyName "System.Net.Http" + Add-Type -AssemblyName "System.Web" + } + [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 + $HttpClient = New-Object -TypeName "System.Net.Http.HttpClient" + $FslogixResolvedUrl = $HttpClient.SendAsync((New-Object -TypeName "System.Net.Http.HttpRequestMessage" -ArgumentList "HEAD", $FslogixUrl)).Result.RequestMessage.RequestUri.AbsoluteUri + Write-Host "Resolved FSLogix download URL: $FslogixResolvedUrl" + $HttpClient.Dispose() -Expand-Archive ` - -LiteralPath "C:\Windows\Temp\fslogix\install\FSLogixAppsSetup.zip" ` - -DestinationPath "C:\Windows\Temp\fslogix\install" ` - -Force ` - -Verbose -[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -cd "C:\Windows\Temp\fslogix\install\" + $params = @{ + Uri = $FslogixResolvedUrl + OutFile = "$SavePath\FSLogixAppsSetup.zip" + UseBasicParsing = $true + ErrorAction = "Stop" + } + Invoke-WebRequest @params + Write-Host "Downloaded FSLogix installer to: $($OutFile.FullName)" +} +catch { + Write-Host "ERROR: Failed to download FSLogix installer. Please check the URL or your network connection." + Stop-Transcript + exit 1 +} -$Dir = Get-ChildItem C:\Windows\Temp\fslogix\install\ | Where-Object PSIsContainer -eq $true -if ($Dir.Count -gt 1) { - $Dir = Get-ChildItem C:\Windows\Temp\fslogix\ | Where-Object PSIsContainer -eq $true +# Expand the installer +$params = @{ + LiteralPath = "$SavePath\FSLogixAppsSetup.zip" + DestinationPath = $SavePath + Force = $true + ErrorAction = "Stop" } +Expand-Archive @params +Write-Host "Extracted FSLogix installer to: $SavePath" -# Install FSLogix. -Write-Host "INFO: Installing FSLogix. . ." -Start-Process "$($Dir.FullName)\x64\Release\FSLogixAppsSetup.exe" ` - -ArgumentList "/install /quiet" ` - -Wait ` - -Passthru ` - +# Find the installer from the extracted files and install +$Installers = Get-ChildItem -Path $SavePath -Recurse -Include "FSLogixAppsSetup.exe" | Where-Object { $_.Directory -match "x64" } +foreach ($Installer in $Installers) { + Write-Host "Installing Microsoft FSLogix Apps agent" + $params = @{ + FilePath = $Installer.FullName + ArgumentList = "/install /quiet /norestart /log `"$Env:SystemRoot\Temp\NerdioManagerLogs\ScriptedActions\fslogix\fslogix_install.log`"" + Wait = $true + PassThru = $true + ErrorAction = "Stop" + } + $Result = Start-Process @params + Write-Host "FSLogix installation process result: $($Result.ExitCode)" +} +# Clean up +Remove-Item -Path $SavePath -Recurse -Force -ErrorAction "Ignore" -Write-Host "INFO: FSLogix install finished." +# Remove an unnecessary shortcut +Start-Sleep -Seconds 5 +$Shortcut = "$Env:ProgramData\Microsoft\Windows\Start Menu\FSLogix\FSLogix Apps Online Help.lnk" +Write-Host "Removing shortcut: $Shortcut" +Remove-Item -Path $Shortcut -Force -ErrorAction "Ignore" # End Logging +Write-Host "INFO: FSLogix install finished." Stop-Transcript -$VerbosePreference=$SaveVerbosePreference