- 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>
95 lines
3.9 KiB
PowerShell
95 lines
3.9 KiB
PowerShell
# 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
|
|
}
|