From af51917cc05bab6a991b7a46f089b4fe6bac8217 Mon Sep 17 00:00:00 2001 From: Stephan Yelle Date: Sat, 20 Dec 2025 19:53:50 -0500 Subject: [PATCH] Update samy.ps1 --- samy.ps1 | 76 +++++++++++++++++++++----------------------------------- 1 file changed, 29 insertions(+), 47 deletions(-) diff --git a/samy.ps1 b/samy.ps1 index 4be463a..b90514c 100644 --- a/samy.ps1 +++ b/samy.ps1 @@ -687,19 +687,34 @@ function Get-SamyTasks { try { $json = Get-RemoteText -Url $Url - if ([string]::IsNullOrWhiteSpace($json)) { - throw "Tasks JSON was empty." + if ([string]::IsNullOrWhiteSpace($json)) { throw "Tasks JSON was empty." } + + $tasks = @($json | ConvertFrom-Json -ErrorAction Stop) + if ($tasks.Count -eq 0) { throw "Tasks JSON parsed but contained no tasks." } + + foreach ($t in $tasks) { + $tooltip = $null + if ($t.PSObject.Properties.Name -contains 'Tooltip') { $tooltip = [string]$t.Tooltip } + if ([string]::IsNullOrWhiteSpace($tooltip)) { $tooltip = [string]$t.Label } + + # Escape for HTML attribute + $tooltip = $tooltip -replace '&','&' + $tooltip = $tooltip -replace "'",''' + $tooltip = $tooltip -replace '"','"' + $tooltip = $tooltip -replace '<','<' + $tooltip = $tooltip -replace '>','>' + + if ($t.PSObject.Properties.Name -contains 'Tooltip') { + $t.Tooltip = $tooltip + } else { + $t | Add-Member -NotePropertyName Tooltip -NotePropertyValue $tooltip -Force + } } - $tasks = $json | ConvertFrom-Json -ErrorAction Stop - if (-not $tasks -or @($tasks).Count -eq 0) { - throw "Tasks JSON parsed but contained no tasks." - } - - return @($tasks) + return $tasks } catch { - Write-LogHybrid "Failed to load tasks from ${Url}: $($_.Exception.Message)" Warning UI -LogToEvent + Write-LogHybrid "Failed to load tasks from ${Url}: $($_.Exception.Message)" Error UI -LogToEvent return $null } } @@ -782,42 +797,11 @@ function Initialize-SamyTasks { # Page → which tab/page it appears on # Embedded fallback (keep your current list here) -$Script:EmbeddedSamyTasks = @( - # On-Boarding, left column - @{ Id='setSVSPowerplan'; Name='setSVSPowerplan'; Label='Set SVS Powerplan'; HandlerFn='Invoke-setSVSPowerPlan'; Page='onboard'; Column='left' }, - @{ Id='installSVSMSPModule'; Name='installSVSMSPModule'; Label='Install SVSMSP Module'; HandlerFn='Invoke-InstallSVSMSP'; Page='onboard'; Column='left' }, - @{ Id='installCyberQP'; Name='installCyberQP'; Label='Install CyberQP'; HandlerFn='Invoke-InstallCyberQP'; Page='onboard'; Column='left' }, - @{ Id='installHelpDesk'; Name='installHelpDesk'; Label='Install HelpDesk'; HandlerFn='Invoke-InstallHelpDesk'; Page='onboard'; Column='left' }, - @{ Id='installThreatLocker'; Name='installThreatLocker'; Label='Install ThreatLocker'; HandlerFn='Invoke-InstallThreatLocker'; Page='onboard'; Column='left' }, - @{ Id='installRocketCyber'; Name='installRocketCyber'; Label='Install RocketCyber'; HandlerFn='Invoke-InstallRocketCyber'; Page='onboard'; Column='left' }, - @{ Id='installDattoRMM'; Name='installDattoRMM'; Label='Install DattoRMM'; HandlerFn='Invoke-InstallDattoRMM'; Page='onboard'; Column='left'; - SubOptions= @( - @{ Value='inputVar'; Label='Copy Site Variables' }, - @{ Value='rmm'; Label='Install RMM Agent' }, - @{ Value='exe'; Label='Download Executable' } - ) - }, - - # On-Boarding, right column (optional bits) - @{ Id='enableBitLocker'; Name='EnableBitLocker'; Label='Enable BitLocker'; HandlerFn='Set-SVSBitLocker'; Page='onboard'; Column='right' }, - @{ Id='setEdgeDefaultSearch';Name='setedgedefaultsearch';Label='Set Edge Default Search'; Tooltip='Will configure Edge to use Google as default search provider'; HandlerFn='Invoke-SetEdgeDefaultSearchEngine';Page='onboard'; Column='right' }, - @{ Id='renameComputer'; Name='renameComputer'; Label='Rename Computer'; HandlerFn ='Invoke-RenameComputer'; Page='onboard';Column= 'right' }, - @{ Id='disableAnimations'; Name='disableAnimations'; Label='Disable Animations'; HandlerFn='Disable-Animations'; Page='onboard';Column= 'right' }, - @{ Id='wingetChrome'; Name='wingetChrome'; Label='Google Chrome'; HandlerFn='Invoke-InstallChrome'; Page='onboard';Column= 'right' }, - @{ Id='wingetAcrobat'; Name='wingetAcrobat'; Label='Adobe Acrobat Reader (64-bit)'; HandlerFn='Invoke-InstallAcrobat'; Page='onboard';Column= 'right' }, - - # Off-Boarding - @{ Id='offUninstallCyberQP'; Name='offUninstallCyberQP'; Label='Uninstall CyberQP'; HandlerFn='Invoke-UninstallCyberQP'; Page='offboard' }, - @{ Id='offUninstallHelpDesk'; Name='offUninstallHelpDesk'; Label='Uninstall HelpDesk'; HandlerFn='Invoke-UninstallHelpDesk'; Page='offboard' }, - @{ Id='offUninstallThreatLocker'; Name='offUninstallThreatLocker'; Label='Uninstall ThreatLocker'; HandlerFn='Invoke-UninstallThreatLocker'; Page='offboard' }, - @{ Id='offUninstallRocketCyber'; Name='offUninstallRocketCyber'; Label='Uninstall RocketCyber'; HandlerFn='Invoke-UninstallRocketCyber'; Page='offboard' }, - @{ Id='offCleanupSVSMSPModule'; Name='offCleanupSVSMSPModule'; Label='Cleanup SVSMSP Toolkit'; HandlerFn='Invoke-CleanupSVSMSP'; Page='offboard' } - -) | ForEach-Object { [pscustomobject]$_ } - - -$Global:SamyTasks = Initialize-SamyTasks -Url $Script:SamyTasksUrl -FallbackTasks $Script:EmbeddedSamyTasks +$Global:SamyTasks = Get-SamyTasks -Url $Script:SamyTasksUrl +if (-not $Global:SamyTasks) { + throw "SAMY cannot continue: failed to load tasks from $Script:SamyTasksUrl" +} #endregion building the Menus @@ -840,9 +824,7 @@ $Global:SamyTasks = Initialize-SamyTasks -Url $Script:SamyTasksUrl -FallbackTask $tasks | ForEach-Object { $taskId = $_.Id - $tooltip = if ($_.PSObject.Properties.Name -contains 'Tooltip' -and $_.Tooltip) { - " title='$($_.Tooltip)'" - } else { '' } + $tooltip = " title='$($_.Tooltip)'" $html = " $($_.Label)"