Session 2026-03-30: SOPS vault, SC-Syncro sync, Syncro scripts
- SOPS+age credential vault created (59 encrypted files, separate repo) - Updated CLAUDE.md credential access to reference SOPS vault - Updated memory for ACG-5070 (Windows 11, replaces CachyOS) - SC-Syncro sync script: enriched 410 SC sessions with company/device data - Syncro scripts: SC property updater, SC deployer, rogue SC killer - Session log with full details Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
94
scripts/syncro-update-sc-properties.ps1
Normal file
94
scripts/syncro-update-sc-properties.ps1
Normal file
@@ -0,0 +1,94 @@
|
||||
# Syncro Script: Update ScreenConnect Session Properties via RESTful API
|
||||
#
|
||||
# Runs on each machine to self-report its company/device info to ScreenConnect.
|
||||
# Designed to run on a schedule (e.g., daily) alongside other maintenance scripts.
|
||||
#
|
||||
# Syncro Platform Variables (set in script editor):
|
||||
# $OrgName - platform - {{customer_business_name_or_customer_name}}
|
||||
#
|
||||
# File Type: PowerShell | Run as: System | Max Run Time: 5 minutes
|
||||
|
||||
Import-Module $env:SyncroModule
|
||||
|
||||
# ============================================================================
|
||||
# Configuration
|
||||
# ============================================================================
|
||||
|
||||
$SCBaseUrl = "https://computerguru.screenconnect.com"
|
||||
$SCExtGuid = "2d558935-686a-4bd0-9991-07539f5fe749"
|
||||
$SCAuthSecret = "FTnl15dK1uaKCOeFzkO1UnjGqpgtqCA5vRExWeXT38LjAV4vF9W/mYf8GpCyqlAv"
|
||||
|
||||
# ============================================================================
|
||||
# Check if ScreenConnect is installed
|
||||
# ============================================================================
|
||||
|
||||
$SCService = Get-Service -Name "ScreenConnect Client*" -ErrorAction SilentlyContinue
|
||||
if (-not $SCService) {
|
||||
Write-Host "ScreenConnect not installed - skipping."
|
||||
exit 0
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# Extract session GUID from service name
|
||||
# ============================================================================
|
||||
|
||||
# Service name format: "ScreenConnect Client (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)"
|
||||
$guidMatch = $SCService.Name | Select-String -Pattern '\(([0-9a-f\-]{36})\)' -AllMatches
|
||||
if (-not $guidMatch -or -not $guidMatch.Matches) {
|
||||
Write-Host "Could not extract session GUID from service: $($SCService.Name)"
|
||||
exit 1
|
||||
}
|
||||
|
||||
$SessionGuid = $guidMatch.Matches[0].Groups[1].Value
|
||||
Write-Host "SC Session GUID: $SessionGuid"
|
||||
|
||||
# ============================================================================
|
||||
# Determine device type
|
||||
# ============================================================================
|
||||
|
||||
$DeviceType = "Desktop"
|
||||
try {
|
||||
$chassis = (Get-CimInstance -ClassName Win32_SystemEnclosure).ChassisTypes
|
||||
if ($chassis | Where-Object { $_ -in @(8,9,10,11,12,14,18,21,31,32) }) { $DeviceType = "Laptop" }
|
||||
if ($chassis | Where-Object { $_ -in @(17,23) }) { $DeviceType = "Server" }
|
||||
$model = (Get-CimInstance -ClassName Win32_ComputerSystem).Model
|
||||
if ($model -match "Virtual|VMware|VirtualBox|Hyper-V|KVM|Xen") { $DeviceType = "Virtual $DeviceType" }
|
||||
} catch {
|
||||
Write-Host "Could not detect device type, defaulting to Desktop"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# Build and send API request
|
||||
# ============================================================================
|
||||
|
||||
$Company = if ([string]::IsNullOrWhiteSpace($OrgName)) { "Unassigned" } else { $OrgName }
|
||||
|
||||
Write-Host "Updating SC: Company='$Company', DeviceType='$DeviceType', Tag='Syncro-Matched'"
|
||||
|
||||
# CP1=Company, CP2=Site, CP3=Department, CP4=DeviceType, CP5=Tag, CP6-8=blank
|
||||
$body = ConvertTo-Json @(
|
||||
$SessionGuid,
|
||||
@($Company, "", "", $DeviceType, "Syncro-Matched", "", "", "")
|
||||
) -Compress
|
||||
|
||||
$url = "$SCBaseUrl/App_Extensions/$SCExtGuid/Service.ashx/UpdateSessionCustomProperties"
|
||||
|
||||
try {
|
||||
$response = Invoke-WebRequest -Uri $url -Method POST -Body $body -ContentType "application/json" -Headers @{
|
||||
"CTRLAuthHeader" = $SCAuthSecret
|
||||
"Origin" = $SCBaseUrl
|
||||
} -UseBasicParsing -ErrorAction Stop
|
||||
|
||||
if ($response.StatusCode -eq 200) {
|
||||
Write-Host "Success - SC session updated."
|
||||
Log-Activity -Message "SC Properties: $Company / $DeviceType" -EventName "ScreenConnect"
|
||||
} else {
|
||||
Write-Host "Unexpected status: $($response.StatusCode)"
|
||||
Write-Host $response.Content
|
||||
}
|
||||
} catch {
|
||||
$err = $_.Exception.Message
|
||||
Write-Host "API call failed: $err"
|
||||
Log-Activity -Message "SC Properties FAILED: $err" -EventName "ScreenConnect"
|
||||
exit 1
|
||||
}
|
||||
Reference in New Issue
Block a user