param( $Action, [hashtable] $Arguments ) & { param ($Parameters) . "$PSScriptRoot/../../../Common/Scripts/Software.ps1"; . "$PSScriptRoot/../../Scripts/Restoration.ps1"; $configPath = "$env:LocalAppData/LGHUB"; <# .SYNOPSIS Stops the running Logitech G Hub instance. #> function Stop-LGHub { [OutputType([string])] param() $hubName = "lghub_system_tray.exe"; $candidates = Get-Process | Where-Object { $_.Path -and ((Split-Path -Leaf $_.Path) -eq $hubName) }; if ($candidates.Count -gt 0) { $lghubPath = $candidates[0].Path; } else { $lghubPath = $null; } $mainProcesses = Get-Process | Where-Object { $_.Path -and (@("lghub.exe", "lghub_agent.exe", "lghub_updater.exe", $hubName) -contains (Split-Path -Leaf $_.Path)) -and (($_.Parent.ProcessName -eq "explorer") -or ($null -eq $_.Parent)) }; $null = $mainProcesses | ForEach-Object { $_.Kill($true) }; return $lghubPath; } <# .SYNOPSIS Edits the Logitech G Hub configuration. #> function Edit-LGHubConfig { param( [scriptblock] $Action ) Write-Host "Stopping Logitech G Hub"; $path = Stop-LGHub; & $Action; if ($path) { Write-Host "Restarting Logitech G Hub"; Start-Process $path; } } Start-SoftwareInstaller @Parameters ` -Installer { Install-ChocoPackage lghub; Remove-DesktopIcon "*G HUB*"; } ` -UserBackup { param( [hashtable] $Arguments ) Edit-LGHubConfig { Add-BackupArtifacts -User $Arguments.Name -Source $configPath -Path "LGHub" ` -Include @("settings.db", "icon_cache") }; } ` -UserConfigurator { param( [hashtable] $Arguments ) Edit-LGHubConfig { Expand-BackupArtifacts -User $Arguments.Name -Path "LGHub" -Target $configPath; }; }; } $PSBoundParameters; # ToDo: Add restoration