Update samy.ps1

This commit is contained in:
2025-12-20 17:02:28 -05:00
parent 8f295c1a1b
commit e73f8ea9e9

169
samy.ps1
View File

@@ -1,172 +1,3 @@
<#
Last changes made should fix the issues we had wen running thi in Windows 11 25H2
change this line for the message
<!-- Big red line under tagline -->
<div id="samyHint" class="samy-hint">Please use samy.svstools.ca</div>
Invoke-installprinters you can uncomment whatif in the function
# SAMY asset config (change branch or base once and it updates everything)
$Script:SamyBranch = 'beta' # or 'main'
line 268 - 281
.SYNOPSIS
Script Automation Monkey (SAMY) is a unified MSP assistant that automates onboarding, headless offboarding,
Datto RMM deployments, and toolkit management through a local UI, HTTP endpoints, or direct PowerShell switches.
.DESCRIPTION
Install-DattoRMM is the core helper that handles credential retrieval (webhook or direct), OAuth token management,
site list fetching/persistence, registry variable pushes, agent downloads/installs, and optional installer archiving.
The UI exposes all tasks as checkboxes with select-all helpers, and each action is wrapped in detailed logging plus
HTTP responders so callers can see success or failure.$jsContent = Get-RemoteText -Url $Script:SamyJsUrl
Key features:
- Credential retrieval - securely fetches ApiUrl, ApiKey, and ApiSecretKey from a webhook when requested.
- OAuth management - automatically acquires and refreshes bearer tokens over TLS to talk to Datto.
- Site list fetching - returns the list of RMM sites and validates OutputFile extensions (.csv/.json).
- Site list persistence - saves fetched site lists to the requester's desktop as CSV or JSON.
- Registry variable push - writes site-specific variables under HKLM:\Software\SVS\Deployment.
- Agent download & install - pulls the Datto RMM agent, launches it, and optionally saves a copy to C:\Temp.
- HTTP endpoints - /getpw and /installDattoRMM handle UI or API-triggered workflows with failure trapping.
- Idempotent & WhatIf support - uses ShouldProcess/SupportsShouldProcess to protect installs.
- Headless Offboard - runs every offboarding task serially just like "Select All" in the UI.
Throughout, secrets are never written to logs or console, and all operations produce clear success/failure messages via Write-LogHybrid.
.PARAMETER UseWebhook
Switch that forces credential retrieval from the webhook at WebhookUrl using WebhookPassword.
When omitted, you must supply ApiUrl, ApiKey, and ApiSecretKey directly.
.PARAMETER WebhookPassword
Password to authenticate to the credentials-fetch webhook. Mandatory when -UseWebhook is set.
.PARAMETER WebhookUrl
URL of the credentials webhook endpoint. Defaults to $Global:DattoWebhookUrl.
.PARAMETER ApiUrl
Direct Datto RMM API base URL (used if not fetching from webhook).
.PARAMETER ApiKey
Direct Datto RMM API key (used if not fetching from webhook).
.PARAMETER ApiSecretKey
Direct Datto RMM secret (used if not fetching from webhook).
.PARAMETER FetchSites
Switch to fetch the list of RMM sites and skip all install or variable-push actions.
.PARAMETER SaveSitesList
Switch to save the fetched site list to the desktop as a file named by OutputFile.
Must be used together with -FetchSites.
.PARAMETER OutputFile
Name of the file to write the site list to (must end in “.csv” or “.json”).
Defaults to 'datto_sites.csv'.
.PARAMETER PushSiteVars
Switch to fetch site-specific variables and write them under HKLM:\Software\SVS\Deployment.
.PARAMETER InstallRMM
Switch to download and launch the Datto RMM agent installer for the specified site.
.PARAMETER SaveCopy
Switch to save a copy of the downloaded Datto RMM installer into C:\Temp.
.PARAMETER Offboard
Switch that runs every off-boarding task sequentially (same behavior as checking "Select All" on the Off-Boarding tab) without launching the web UI.
.PARAMETER SiteUID
The unique identifier of the Datto RMM site. Mandatory when performing install or variable-push.
.PARAMETER SiteName
The friendly name of the Datto RMM site (used in logging). Mandatory when performing install or variable-push.
.NOTES
Default EventLog : SVSMSP Events
Default Source : SAMY
.EXAMPLE
& ([ScriptBlock]::Create( (iwr 'https://samy.svstools.com' -UseBasicParsing).Content )) `
-UseWebhook
-WebhookPassword 'pwd'
-SiteUID 'site-123'
-SiteName 'Acme Corp'
-PushSiteVars
-InstallRMM
# Headlessly installs the Datto RMM agent on “Acme Corp” and writes site variables to the registry.
.EXAMPLE
& ([ScriptBlock]::Create( (iwr 'https://samy.svstools.com' -UseBasicParsing).Content )) `
-ApiUrl 'https://api.example.com' `
-ApiKey 'YourApiKey' `
-ApiSecretKey 'YourSecretKey' `
-SiteUID 'site-123' `
-SiteName 'Acme Corp' `
-PushSiteVars `
-InstallRMM
# Headlessly installs the Datto RMM agent on “Acme Corp” and writes site variables to the registry.
.EXAMPLE
& ([ScriptBlock]::Create( (iwr 'https://samy.svstools.com' -UseBasicParsing).Content )) `
-UseWebhook `
-WebhookPassword 'pwd' `
-FetchSites `
-SaveSitesList `
-OutputFile 'sites.json'
# Fetches the full site list via webhook and saves it as JSON to your Desktop.
.EXAMPLE
& ([ScriptBlock]::Create( (iwr 'https://samy.svstools.com' -UseBasicParsing).Content )) `
-ApiUrl 'https://api.example.com' `
-ApiKey 'YourApiKey' `
-ApiSecretKey 'YourSecretKey' `
-SiteUID 'site-123' `
-SiteName 'Acme Corp' `
-SaveCopy
# Downloads the RMM installer for “Acme Corp” and saves a copy under C:\Temp without running it.
.EXAMPLE
& ([ScriptBlock]::Create( (iwr 'https://samy.svstools.com' -UseBasicParsing).Content )) `
-ApiUrl 'https://api.example.com' `
-ApiKey 'YourApiKey' `
-ApiSecretKey 'YourSecretKey' `
-SiteUID 'site-123' `
-SiteName 'Acme Corp' `
-InstallRMM `
-WhatIf
# Shows what would happen when installing the RMM agent, without making any changes.
.EXAMPLE
& ([ScriptBlock]::Create((iwr 'samy.svstools.ca').Content )) -SilentInstall
.EXAMPLE
& ([ScriptBlock]::Create((iwr 'samy.svstools.com').Content)) -Cleanup
.EXAMPLE
& ([ScriptBlock]::Create((iwr 'samy.svstools.ca').Content)) -Offboard
# Runs the off-boarding tasks in sequence without launching the UI.
.Notes
RMM can call this directly
$profiles = Get-SvsPrinterProfilesFromServer -Uri 'https://bananas.svstools.ca/getprinters' -Password $pw
Set-SvsPrinterLocalConfig -PrinterProfiles $profiles -SkipIfEmpty
#>
#region Safely bypass Restricted Execution Policy
# ─── Safely bypass Restricted Execution Policy ───
#region Safely bypass Restricted Execution Policy
# Safely bypass Restricted Execution Policy
if ($ExecutionContext.SessionState.LanguageMode -ne 'FullLanguage' -or