Add Solidworks licenses, scripts, and update server docs

- Add Solidworks license files and install guides
- Add PowerShell privacy lockdown scripts for Solidworks telemetry
- Add Siemens License Server v5.1 binary for NX
- Update DALIDOU-SERVER.md with storage layout, backup system, and DNS fixes
- Add MEGA-PLAN-BRAIN-SYSTEM.md for unified knowledge management
- Add Claude Code local settings

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-25 11:56:23 -05:00
parent 222c604203
commit 57bcfa4a9a
17 changed files with 8162 additions and 43 deletions

View File

@@ -0,0 +1,696 @@
#Requires -RunAsAdministrator
<#
.SYNOPSIS
Master installation script for SolidWorks Privacy Lockdown.
.DESCRIPTION
Runs all privacy lockdown components in sequence:
1. Blocks telemetry domains via hosts file
2. Disables update/background services
3. Configures firewall rules
4. Disables in-app telemetry via registry
5. Verifies the lockdown
Generates a detailed report of all changes made.
.NOTES
Author: Atomaste Solution
Requires: Administrator privileges
Run this script to apply all privacy protections at once.
.EXAMPLE
.\00-install-privacy-lockdown.ps1
Applies all privacy protections.
.EXAMPLE
.\00-install-privacy-lockdown.ps1 -Undo
Removes all privacy protections and restores original settings.
.EXAMPLE
.\00-install-privacy-lockdown.ps1 -DryRun
Shows what would be changed without making any modifications.
#>
param(
[switch]$Undo, # Remove all protections
[switch]$DryRun, # Preview changes without applying
[switch]$SkipVerify, # Skip verification step
[string]$InstallPath = "C:\Program Files\SOLIDWORKS Corp",
[string]$ReportPath # Custom report path (default: script directory)
)
$scriptDir = $PSScriptRoot
$timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
$reportDir = if ($ReportPath) { $ReportPath } else { Join-Path $scriptDir "reports" }
$reportFile = Join-Path $reportDir "lockdown-report_$timestamp.txt"
# Global report content
$script:report = @()
$script:changes = @{
HostsFile = @()
Services = @()
Firewall = @()
Registry = @()
}
function Initialize-Report {
# Create reports directory if needed
if (-not (Test-Path $reportDir)) {
New-Item -Path $reportDir -ItemType Directory -Force | Out-Null
}
$header = @"
================================================================================
SOLIDWORKS PRIVACY LOCKDOWN REPORT
Generated: $(Get-Date -Format "yyyy-MM-dd HH:mm:ss")
Computer: $env:COMPUTERNAME
User: $env:USERNAME
Mode: $(if ($Undo) { "UNINSTALL" } elseif ($DryRun) { "DRY RUN (preview)" } else { "INSTALL" })
================================================================================
"@
$script:report += $header
Write-Host $header -ForegroundColor Cyan
}
function Add-ReportSection {
param(
[string]$Title,
[string]$Content
)
$section = @"
--------------------------------------------------------------------------------
$Title
--------------------------------------------------------------------------------
$Content
"@
$script:report += $section
}
function Add-ReportLine {
param([string]$Line)
$script:report += $Line
}
function Write-Log {
param(
[string]$Message,
[string]$Level = "INFO", # INFO, OK, WARN, ERROR, CHANGE
[string]$Category # HostsFile, Services, Firewall, Registry
)
$prefix = switch ($Level) {
"OK" { "[OK] "; $color = "Green" }
"WARN" { "[WARN] "; $color = "Yellow" }
"ERROR" { "[ERROR] "; $color = "Red" }
"CHANGE" { "[CHANGE]"; $color = "Magenta" }
"SKIP" { "[SKIP] "; $color = "Gray" }
"BEFORE" { "[BEFORE]"; $color = "DarkGray" }
"AFTER" { "[AFTER] "; $color = "White" }
default { "[INFO] "; $color = "White" }
}
$logLine = "$prefix $Message"
Write-Host $logLine -ForegroundColor $color
Add-ReportLine $logLine
# Track changes by category
if ($Category -and $Level -eq "CHANGE") {
$script:changes[$Category] += $Message
}
}
function Save-Report {
# Add summary section
$summary = @"
================================================================================
CHANGES SUMMARY
================================================================================
HOSTS FILE CHANGES ($($script:changes.HostsFile.Count)):
"@
if ($script:changes.HostsFile.Count -eq 0) {
$summary += "`n (no changes)"
} else {
foreach ($change in $script:changes.HostsFile) {
$summary += "`n - $change"
}
}
$summary += @"
SERVICES CHANGES ($($script:changes.Services.Count)):
"@
if ($script:changes.Services.Count -eq 0) {
$summary += "`n (no changes)"
} else {
foreach ($change in $script:changes.Services) {
$summary += "`n - $change"
}
}
$summary += @"
FIREWALL CHANGES ($($script:changes.Firewall.Count)):
"@
if ($script:changes.Firewall.Count -eq 0) {
$summary += "`n (no changes)"
} else {
foreach ($change in $script:changes.Firewall) {
$summary += "`n - $change"
}
}
$summary += @"
REGISTRY CHANGES ($($script:changes.Registry.Count)):
"@
if ($script:changes.Registry.Count -eq 0) {
$summary += "`n (no changes)"
} else {
foreach ($change in $script:changes.Registry) {
$summary += "`n - $change"
}
}
$totalChanges = $script:changes.HostsFile.Count + $script:changes.Services.Count +
$script:changes.Firewall.Count + $script:changes.Registry.Count
$summary += @"
================================================================================
TOTAL CHANGES: $totalChanges
REPORT SAVED: $reportFile
================================================================================
"@
$script:report += $summary
# Write report to file
$script:report -join "`n" | Set-Content -Path $reportFile -Force -Encoding UTF8
Write-Host ""
Write-Host "========================================" -ForegroundColor Green
Write-Host " REPORT SAVED" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Green
Write-Host " Location: $reportFile" -ForegroundColor White
Write-Host " Total changes: $totalChanges" -ForegroundColor White
Write-Host ""
}
function Test-IsAdmin {
$currentUser = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = New-Object Security.Principal.WindowsPrincipal($currentUser)
return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
function Get-SystemState {
Add-ReportSection -Title "SYSTEM STATE BEFORE CHANGES" -Content ""
# Hosts file state
Write-Log "Checking hosts file..." -Level "INFO"
$hostsPath = "C:\Windows\System32\drivers\etc\hosts"
$hostsContent = Get-Content $hostsPath -Raw -ErrorAction SilentlyContinue
if ($hostsContent -match "SOLIDWORKS TELEMETRY BLOCK") {
Write-Log "Hosts file: SolidWorks block already present" -Level "BEFORE"
} else {
Write-Log "Hosts file: No SolidWorks block found" -Level "BEFORE"
}
# Services state
Write-Log "Checking services..." -Level "INFO"
$services = Get-Service -DisplayName "*SOLIDWORKS*","*3DEXPERIENCE*","*Dassault*" -ErrorAction SilentlyContinue
if ($services) {
foreach ($svc in $services) {
Write-Log "Service: $($svc.DisplayName) - Status: $($svc.Status), StartType: $($svc.StartType)" -Level "BEFORE"
}
} else {
Write-Log "Services: No SolidWorks services found" -Level "BEFORE"
}
# Firewall rules state
Write-Log "Checking firewall rules..." -Level "INFO"
$rules = Get-NetFirewallRule -DisplayName "SolidWorks Privacy -*" -ErrorAction SilentlyContinue
if ($rules) {
foreach ($rule in $rules) {
Write-Log "Firewall: $($rule.DisplayName) - Action: $($rule.Action), Enabled: $($rule.Enabled)" -Level "BEFORE"
}
} else {
Write-Log "Firewall: No SolidWorks Privacy rules found" -Level "BEFORE"
}
# Registry state
Write-Log "Checking registry..." -Level "INFO"
$swBasePath = "HKCU:\Software\SolidWorks"
if (Test-Path $swBasePath) {
$versions = Get-ChildItem -Path $swBasePath -ErrorAction SilentlyContinue |
Where-Object { $_.PSChildName -like "SOLIDWORKS *" }
foreach ($version in $versions) {
Write-Log "Registry: Found $($version.PSChildName)" -Level "BEFORE"
$perfPath = Join-Path $version.PSPath "Performance"
if (Test-Path $perfPath) {
$props = Get-ItemProperty -Path $perfPath -ErrorAction SilentlyContinue
if ($props.PSObject.Properties.Name -contains "OptInStatus") {
Write-Log " CEIP OptInStatus = $($props.OptInStatus)" -Level "BEFORE"
}
}
}
} else {
Write-Log "Registry: No SolidWorks keys found (SW may not be installed)" -Level "BEFORE"
}
Add-ReportLine ""
}
function Apply-HostsFileBlock {
Add-ReportSection -Title "HOSTS FILE MODIFICATIONS" -Content ""
$hostsPath = "C:\Windows\System32\drivers\etc\hosts"
$backupPath = "C:\Windows\System32\drivers\etc\hosts.backup.solidworks.$timestamp"
$blockDomains = @(
"api.3ds.com",
"www.3ds.com",
"swym.3ds.com",
"iam.3ds.com",
"cas.3ds.com",
"eu1-ds-iam.3dexperience.3ds.com",
"eu1-ds.3dexperience.3ds.com",
"update.solidworks.com",
"www.solidworks.com",
"sentry.io",
"o136956.ingest.sentry.io",
"telemetry.solidworks.com",
"analytics.3ds.com",
"collect.3ds.com",
"ifwe.3ds.com",
"eu1-ifwe.3dexperience.3ds.com",
"passport.3ds.com",
"3dswym.3ds.com"
)
$licensingDomains = @(
"activation.solidworks.com",
"license.solidworks.com",
"licensing.solidworks.com"
)
Write-Log "Licensing domains (preserved):" -Level "INFO"
foreach ($domain in $licensingDomains) {
Write-Log " ALLOW: $domain" -Level "OK"
}
Write-Log "" -Level "INFO"
Write-Log "Telemetry domains to block:" -Level "INFO"
if ($DryRun) {
foreach ($domain in $blockDomains) {
Write-Log " Would block: $domain" -Level "INFO"
}
Write-Log "[DRY RUN] No changes made to hosts file" -Level "WARN"
return
}
# Backup
Copy-Item -Path $hostsPath -Destination $backupPath -Force
Write-Log "Backup created: $backupPath" -Level "OK"
$content = Get-Content $hostsPath -Raw
$markerStart = "# === SOLIDWORKS TELEMETRY BLOCK START ==="
$markerEnd = "# === SOLIDWORKS TELEMETRY BLOCK END ==="
# Remove existing block if present
if ($content -match [regex]::Escape($markerStart)) {
$pattern = "$([regex]::Escape($markerStart))[\s\S]*?$([regex]::Escape($markerEnd))\r?\n?"
$content = $content -replace $pattern, ""
Write-Log "Removed existing block" -Level "INFO"
}
# Build new block
$blockContent = @()
$blockContent += ""
$blockContent += $markerStart
$blockContent += "# Blocks telemetry/analytics while preserving licensing"
$blockContent += "# Generated: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"
$blockContent += "#"
foreach ($domain in $blockDomains) {
$blockContent += "127.0.0.1 $domain"
Write-Log "BLOCKED: $domain -> 127.0.0.1" -Level "CHANGE" -Category "HostsFile"
}
$blockContent += $markerEnd
# Apply
Set-Content -Path $hostsPath -Value $content.TrimEnd() -Force -NoNewline
Add-Content -Path $hostsPath -Value ($blockContent -join "`r`n") -Force
Write-Log "Hosts file updated successfully" -Level "OK"
}
function Remove-HostsFileBlock {
Add-ReportSection -Title "HOSTS FILE RESTORATION" -Content ""
$hostsPath = "C:\Windows\System32\drivers\etc\hosts"
$content = Get-Content $hostsPath -Raw
$markerStart = "# === SOLIDWORKS TELEMETRY BLOCK START ==="
$markerEnd = "# === SOLIDWORKS TELEMETRY BLOCK END ==="
if ($DryRun) {
if ($content -match [regex]::Escape($markerStart)) {
Write-Log "[DRY RUN] Would remove SolidWorks block from hosts file" -Level "WARN"
} else {
Write-Log "[DRY RUN] No SolidWorks block found to remove" -Level "INFO"
}
return
}
if ($content -match [regex]::Escape($markerStart)) {
$pattern = "$([regex]::Escape($markerStart))[\s\S]*?$([regex]::Escape($markerEnd))\r?\n?"
$newContent = $content -replace $pattern, ""
Set-Content -Path $hostsPath -Value $newContent.TrimEnd() -Force -NoNewline
Add-Content -Path $hostsPath -Value ""
Write-Log "Removed SolidWorks telemetry block from hosts file" -Level "CHANGE" -Category "HostsFile"
} else {
Write-Log "No SolidWorks block found in hosts file" -Level "SKIP"
}
}
function Manage-Services {
param([switch]$Restore)
$title = if ($Restore) { "SERVICES RESTORATION" } else { "SERVICES MODIFICATIONS" }
Add-ReportSection -Title $title -Content ""
$stateFile = "$env:USERPROFILE\solidworks-services-backup.json"
$services = Get-Service -DisplayName "*SOLIDWORKS*","*3DEXPERIENCE*","*Dassault*" -ErrorAction SilentlyContinue
if (-not $services -or $services.Count -eq 0) {
Write-Log "No SolidWorks services found on this system" -Level "INFO"
return
}
if ($Restore) {
if ($DryRun) {
Write-Log "[DRY RUN] Would restore services from: $stateFile" -Level "WARN"
return
}
if (Test-Path $stateFile) {
$states = Get-Content -Path $stateFile -Raw | ConvertFrom-Json
foreach ($serviceName in $states.PSObject.Properties.Name) {
$originalState = $states.$serviceName
try {
Set-Service -Name $serviceName -StartupType $originalState.StartType -ErrorAction Stop
Write-Log "Restored: $($originalState.DisplayName) -> $($originalState.StartType)" -Level "CHANGE" -Category "Services"
} catch {
Write-Log "Failed to restore $serviceName : $_" -Level "ERROR"
}
}
} else {
Write-Log "No backup file found: $stateFile" -Level "WARN"
}
return
}
# Save current states
$states = @{}
foreach ($svc in $services) {
$states[$svc.Name] = @{
DisplayName = $svc.DisplayName
Status = $svc.Status.ToString()
StartType = $svc.StartType.ToString()
}
}
if (-not $DryRun) {
$states | ConvertTo-Json -Depth 3 | Set-Content -Path $stateFile -Force
Write-Log "Service states backed up to: $stateFile" -Level "OK"
}
foreach ($svc in $services) {
$isUpdateService = $svc.DisplayName -match "update|download|background|3dexperience"
if ($isUpdateService) {
if ($DryRun) {
Write-Log "[DRY RUN] Would disable: $($svc.DisplayName) (currently: $($svc.StartType))" -Level "WARN"
} else {
try {
if ($svc.Status -eq "Running") {
Stop-Service -Name $svc.Name -Force -ErrorAction Stop
Write-Log "Stopped: $($svc.DisplayName)" -Level "OK"
}
Set-Service -Name $svc.Name -StartupType Disabled -ErrorAction Stop
Write-Log "Disabled: $($svc.DisplayName) (was: $($svc.StartType))" -Level "CHANGE" -Category "Services"
} catch {
Write-Log "Failed to disable $($svc.DisplayName): $_" -Level "ERROR"
}
}
} else {
Write-Log "Preserved: $($svc.DisplayName) ($($svc.StartType))" -Level "SKIP"
}
}
}
function Manage-Firewall {
param([switch]$Remove)
$title = if ($Remove) { "FIREWALL RULES REMOVAL" } else { "FIREWALL RULES CONFIGURATION" }
Add-ReportSection -Title $title -Content ""
$rulePrefix = "SolidWorks Privacy - "
if ($Remove) {
$rules = Get-NetFirewallRule -DisplayName "$rulePrefix*" -ErrorAction SilentlyContinue
if ($DryRun) {
if ($rules) {
Write-Log "[DRY RUN] Would remove $($rules.Count) firewall rule(s)" -Level "WARN"
} else {
Write-Log "[DRY RUN] No firewall rules to remove" -Level "INFO"
}
return
}
if ($rules) {
foreach ($rule in $rules) {
$rules | Remove-NetFirewallRule
Write-Log "Removed rule: $($rule.DisplayName)" -Level "CHANGE" -Category "Firewall"
}
} else {
Write-Log "No SolidWorks firewall rules found" -Level "SKIP"
}
return
}
# Find executables to block
$execsToBlock = @(
"SOLIDWORKS\swScheduler\dxttasks.exe",
"SOLIDWORKS\swScheduler\DXTTask.exe",
"SOLIDWORKS Installation Manager\sldIM.exe",
"SOLIDWORKS Installation Manager\sldDownloader.exe"
)
if (-not (Test-Path $InstallPath)) {
Write-Log "SolidWorks installation not found at: $InstallPath" -Level "WARN"
Write-Log "Firewall rules will be created when SolidWorks is installed" -Level "INFO"
return
}
foreach ($exe in $execsToBlock) {
$fullPath = Join-Path $InstallPath $exe
$exeName = Split-Path $fullPath -Leaf
$ruleName = "$rulePrefix Block $exeName"
if (-not (Test-Path $fullPath)) {
Write-Log "Executable not found: $exe" -Level "SKIP"
continue
}
$existing = Get-NetFirewallRule -DisplayName $ruleName -ErrorAction SilentlyContinue
if ($existing) {
Write-Log "Rule already exists: $exeName" -Level "SKIP"
continue
}
if ($DryRun) {
Write-Log "[DRY RUN] Would create block rule for: $exeName" -Level "WARN"
} else {
try {
New-NetFirewallRule `
-DisplayName $ruleName `
-Description "Blocks outbound for SolidWorks update/telemetry" `
-Direction Outbound `
-Action Block `
-Program $fullPath `
-Enabled True `
-Profile Any `
-ErrorAction Stop | Out-Null
Write-Log "Created block rule: $exeName" -Level "CHANGE" -Category "Firewall"
} catch {
Write-Log "Failed to create rule for $exeName : $_" -Level "ERROR"
}
}
}
}
function Manage-Registry {
param([switch]$Restore)
$title = if ($Restore) { "REGISTRY RESTORATION" } else { "REGISTRY MODIFICATIONS" }
Add-ReportSection -Title $title -Content ""
$swBasePath = "HKCU:\Software\SolidWorks"
if (-not (Test-Path $swBasePath)) {
Write-Log "SolidWorks registry keys not found" -Level "WARN"
Write-Log "Run this script again after launching SolidWorks" -Level "INFO"
return
}
$versions = Get-ChildItem -Path $swBasePath -ErrorAction SilentlyContinue |
Where-Object { $_.PSChildName -like "SOLIDWORKS *" }
if (-not $versions) {
Write-Log "No SolidWorks version keys found" -Level "WARN"
return
}
$settings = @(
@{ Path = "Performance"; Name = "OptInStatus"; DisableValue = 0; Desc = "CEIP" },
@{ Path = "General"; Name = "Auto Check for Updates"; DisableValue = 0; Desc = "Auto Updates" },
@{ Path = "Performance"; Name = "EnableAnalytics"; DisableValue = 0; Desc = "Analytics" },
@{ Path = "Performance"; Name = "EnableTelemetry"; DisableValue = 0; Desc = "Telemetry" }
)
foreach ($version in $versions) {
Write-Log "Processing: $($version.PSChildName)" -Level "INFO"
foreach ($setting in $settings) {
$regPath = Join-Path $version.PSPath $setting.Path
if (-not (Test-Path $regPath)) {
Write-Log " Path not found: $($setting.Path)" -Level "SKIP"
continue
}
$props = Get-ItemProperty -Path $regPath -ErrorAction SilentlyContinue
$currentValue = $props.PSObject.Properties[$setting.Name].Value
if ($Restore) {
# Restore to enabled (1)
if ($DryRun) {
Write-Log "[DRY RUN] Would restore $($setting.Desc) to enabled" -Level "WARN"
} else {
try {
Set-ItemProperty -Path $regPath -Name $setting.Name -Value 1 -Type DWord -Force
Write-Log "Restored: $($setting.Desc) = 1 (enabled)" -Level "CHANGE" -Category "Registry"
} catch {
Write-Log "Failed to restore $($setting.Desc): $_" -Level "ERROR"
}
}
} else {
# Disable
if ($null -ne $currentValue -and $currentValue -eq $setting.DisableValue) {
Write-Log " $($setting.Desc): Already disabled" -Level "SKIP"
continue
}
if ($DryRun) {
Write-Log "[DRY RUN] Would disable $($setting.Desc) (current: $currentValue)" -Level "WARN"
} else {
try {
Set-ItemProperty -Path $regPath -Name $setting.Name -Value $setting.DisableValue -Type DWord -Force
Write-Log "Disabled: $($setting.Desc) (was: $currentValue -> now: $($setting.DisableValue))" -Level "CHANGE" -Category "Registry"
} catch {
Write-Log "Failed to disable $($setting.Desc): $_" -Level "ERROR"
}
}
}
}
}
}
# Main execution
if (-not (Test-IsAdmin)) {
Write-Host "[ERROR] This script requires Administrator privileges." -ForegroundColor Red
Write-Host "Please right-click PowerShell and select 'Run as Administrator'" -ForegroundColor Yellow
exit 1
}
Initialize-Report
if ($DryRun) {
Write-Host ""
Write-Host "*** DRY RUN MODE - No changes will be made ***" -ForegroundColor Yellow
Write-Host ""
}
# Capture initial state
Get-SystemState
if ($Undo) {
Add-ReportSection -Title "REMOVING PRIVACY LOCKDOWN" -Content ""
if (-not $DryRun) {
Write-Host ""
$confirm = Read-Host "Are you sure you want to remove privacy protections? (y/N)"
if ($confirm -ne "y" -and $confirm -ne "Y") {
Write-Log "Operation cancelled by user" -Level "WARN"
Save-Report
exit 0
}
}
Manage-Registry -Restore
Manage-Firewall -Remove
Manage-Services -Restore
Remove-HostsFileBlock
} else {
Add-ReportSection -Title "APPLYING PRIVACY LOCKDOWN" -Content ""
if (-not $DryRun) {
Write-Host ""
Write-Host "This will configure:" -ForegroundColor White
Write-Host " - Block telemetry domains in hosts file" -ForegroundColor Gray
Write-Host " - Disable update/background services" -ForegroundColor Gray
Write-Host " - Create firewall block rules" -ForegroundColor Gray
Write-Host " - Disable telemetry in registry" -ForegroundColor Gray
Write-Host ""
Write-Host "Licensing will remain functional." -ForegroundColor Green
Write-Host ""
$confirm = Read-Host "Proceed? (Y/n)"
if ($confirm -eq "n" -or $confirm -eq "N") {
Write-Log "Operation cancelled by user" -Level "WARN"
Save-Report
exit 0
}
}
Apply-HostsFileBlock
Manage-Services
Manage-Firewall
Manage-Registry
}
Save-Report
if ($DryRun) {
Write-Host ""
Write-Host "*** DRY RUN COMPLETE - No changes were made ***" -ForegroundColor Yellow
Write-Host "Review the report above. Run without -DryRun to apply changes." -ForegroundColor Yellow
}

View File

@@ -0,0 +1,177 @@
#Requires -RunAsAdministrator
<#
.SYNOPSIS
Blocks SolidWorks telemetry domains via hosts file while preserving licensing.
.DESCRIPTION
This script modifies the Windows hosts file to block telemetry/analytics
domains from Dassault Systèmes/SolidWorks while keeping licensing servers
accessible for license activation/deactivation.
.NOTES
Author: Atomaste Solution
Requires: Administrator privileges
Creates backup of hosts file before modification
#>
param(
[switch]$Undo # Use -Undo to restore the original hosts file
)
$hostsPath = "C:\Windows\System32\drivers\etc\hosts"
$backupPath = "C:\Windows\System32\drivers\etc\hosts.backup.solidworks"
$markerStart = "# === SOLIDWORKS TELEMETRY BLOCK START ==="
$markerEnd = "# === SOLIDWORKS TELEMETRY BLOCK END ==="
# Telemetry domains to block
$blockDomains = @(
"api.3ds.com",
"www.3ds.com",
"swym.3ds.com",
"iam.3ds.com",
"cas.3ds.com",
"eu1-ds-iam.3dexperience.3ds.com",
"eu1-ds.3dexperience.3ds.com",
"update.solidworks.com",
"www.solidworks.com",
"sentry.io",
"o136956.ingest.sentry.io",
"telemetry.solidworks.com",
"analytics.3ds.com",
"collect.3ds.com",
"ifwe.3ds.com",
"eu1-ifwe.3dexperience.3ds.com",
"passport.3ds.com",
"3dswym.3ds.com"
)
# Licensing domains - DO NOT BLOCK
$licensingDomains = @(
"activation.solidworks.com",
"license.solidworks.com",
"licensing.solidworks.com"
)
function Test-IsAdmin {
$currentUser = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = New-Object Security.Principal.WindowsPrincipal($currentUser)
return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
function Backup-HostsFile {
if (-not (Test-Path $backupPath)) {
Copy-Item -Path $hostsPath -Destination $backupPath -Force
Write-Host "[OK] Backup created: $backupPath" -ForegroundColor Green
} else {
Write-Host "[INFO] Backup already exists: $backupPath" -ForegroundColor Yellow
}
}
function Remove-SolidWorksBlock {
$content = Get-Content $hostsPath -Raw
if ($content -match [regex]::Escape($markerStart)) {
$pattern = "$([regex]::Escape($markerStart))[\s\S]*?$([regex]::Escape($markerEnd))\r?\n?"
$newContent = $content -replace $pattern, ""
Set-Content -Path $hostsPath -Value $newContent.TrimEnd() -Force -NoNewline
Add-Content -Path $hostsPath -Value ""
Write-Host "[OK] SolidWorks telemetry block removed from hosts file" -ForegroundColor Green
return $true
}
return $false
}
function Add-SolidWorksBlock {
$content = Get-Content $hostsPath -Raw
# Check if block already exists
if ($content -match [regex]::Escape($markerStart)) {
Write-Host "[INFO] SolidWorks telemetry block already exists. Updating..." -ForegroundColor Yellow
Remove-SolidWorksBlock | Out-Null
$content = Get-Content $hostsPath -Raw
}
# Build the block
$blockContent = @()
$blockContent += ""
$blockContent += $markerStart
$blockContent += "# Blocks telemetry/analytics while preserving licensing"
$blockContent += "# Generated: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"
$blockContent += "#"
$blockContent += "# PRESERVED (licensing - NOT blocked):"
foreach ($domain in $licensingDomains) {
$blockContent += "# - $domain"
}
$blockContent += "#"
$blockContent += "# BLOCKED (telemetry/analytics):"
foreach ($domain in $blockDomains) {
$blockContent += "127.0.0.1 $domain"
}
$blockContent += $markerEnd
Add-Content -Path $hostsPath -Value ($blockContent -join "`r`n") -Force
Write-Host "[OK] SolidWorks telemetry domains blocked" -ForegroundColor Green
}
function Show-Status {
Write-Host "`n=== HOSTS FILE STATUS ===" -ForegroundColor Cyan
$content = Get-Content $hostsPath -Raw
if ($content -match [regex]::Escape($markerStart)) {
Write-Host "[ACTIVE] SolidWorks telemetry block is in place" -ForegroundColor Green
} else {
Write-Host "[INACTIVE] SolidWorks telemetry block not found" -ForegroundColor Yellow
}
Write-Host "`nBlocked domains:" -ForegroundColor White
foreach ($domain in $blockDomains) {
$blocked = $content -match "127\.0\.0\.1\s+$([regex]::Escape($domain))"
if ($blocked) {
Write-Host " [X] $domain" -ForegroundColor Red
} else {
Write-Host " [ ] $domain" -ForegroundColor Gray
}
}
Write-Host "`nLicensing domains (should be accessible):" -ForegroundColor White
foreach ($domain in $licensingDomains) {
try {
$result = Resolve-DnsName -Name $domain -ErrorAction SilentlyContinue
if ($result) {
Write-Host " [OK] $domain - Reachable" -ForegroundColor Green
} else {
Write-Host " [??] $domain - DNS resolution failed" -ForegroundColor Yellow
}
} catch {
Write-Host " [!!] $domain - Cannot resolve" -ForegroundColor Red
}
}
}
# Main execution
if (-not (Test-IsAdmin)) {
Write-Host "[ERROR] This script requires Administrator privileges." -ForegroundColor Red
Write-Host "Please run PowerShell as Administrator and try again." -ForegroundColor Yellow
exit 1
}
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " SolidWorks Telemetry Blocker" -ForegroundColor Cyan
Write-Host " Atomaste Solution" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
if ($Undo) {
Write-Host "`n[ACTION] Removing telemetry block..." -ForegroundColor Yellow
if (Remove-SolidWorksBlock) {
Write-Host "[OK] Telemetry block removed successfully" -ForegroundColor Green
} else {
Write-Host "[INFO] No telemetry block found to remove" -ForegroundColor Yellow
}
} else {
Write-Host "`n[ACTION] Adding telemetry block..." -ForegroundColor Yellow
Backup-HostsFile
Add-SolidWorksBlock
}
Show-Status
Write-Host "`n[DONE] Script completed." -ForegroundColor Green

View File

@@ -0,0 +1,233 @@
#Requires -RunAsAdministrator
<#
.SYNOPSIS
Disables non-essential SolidWorks background services.
.DESCRIPTION
Identifies and disables SolidWorks update and background services
that are not required for core functionality or licensing.
.NOTES
Author: Atomaste Solution
Requires: Administrator privileges
Saves original service states before modification
#>
param(
[switch]$Undo, # Restore original service states
[switch]$ListOnly # Only list services, don't modify
)
$stateFile = "$env:USERPROFILE\solidworks-services-backup.json"
# Services to disable (update/background services)
$servicesToDisable = @(
"SOLIDWORKS Update Publisher Service",
"SolidWorks Background Downloader",
"SOLIDWORKS Flexnet Server",
"3DExperience*"
)
# Services to KEEP enabled (required for licensing)
$servicesToKeep = @(
"SolidNetWork License Manager",
"SOLIDWORKS SolidNetWork License Manager"
)
function Test-IsAdmin {
$currentUser = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = New-Object Security.Principal.WindowsPrincipal($currentUser)
return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
function Get-SolidWorksServices {
$allServices = @()
# Find all SOLIDWORKS-related services
$swServices = Get-Service -DisplayName "*SOLIDWORKS*" -ErrorAction SilentlyContinue
$dsServices = Get-Service -DisplayName "*3DEXPERIENCE*" -ErrorAction SilentlyContinue
$dassaultServices = Get-Service -DisplayName "*Dassault*" -ErrorAction SilentlyContinue
if ($swServices) { $allServices += $swServices }
if ($dsServices) { $allServices += $dsServices }
if ($dassaultServices) { $allServices += $dassaultServices }
return $allServices | Sort-Object -Property DisplayName -Unique
}
function Save-ServiceStates {
param([array]$Services)
$states = @{}
foreach ($svc in $Services) {
$states[$svc.Name] = @{
DisplayName = $svc.DisplayName
Status = $svc.Status.ToString()
StartType = $svc.StartType.ToString()
}
}
$states | ConvertTo-Json -Depth 3 | Set-Content -Path $stateFile -Force
Write-Host "[OK] Service states saved to: $stateFile" -ForegroundColor Green
}
function Restore-ServiceStates {
if (-not (Test-Path $stateFile)) {
Write-Host "[ERROR] No backup file found: $stateFile" -ForegroundColor Red
return $false
}
$states = Get-Content -Path $stateFile -Raw | ConvertFrom-Json
foreach ($serviceName in $states.PSObject.Properties.Name) {
$originalState = $states.$serviceName
try {
$svc = Get-Service -Name $serviceName -ErrorAction SilentlyContinue
if ($svc) {
Set-Service -Name $serviceName -StartupType $originalState.StartType -ErrorAction Stop
Write-Host "[OK] Restored $($originalState.DisplayName) to $($originalState.StartType)" -ForegroundColor Green
}
} catch {
Write-Host "[WARN] Could not restore $serviceName : $_" -ForegroundColor Yellow
}
}
return $true
}
function Test-ShouldDisable {
param([string]$DisplayName)
# Check if it's a service to keep
foreach ($keep in $servicesToKeep) {
if ($DisplayName -like "*$keep*") {
return $false
}
}
# Check if it matches services to disable
foreach ($disable in $servicesToDisable) {
if ($DisplayName -like "*$disable*") {
return $true
}
}
# Default: check if it contains "update", "background", "download"
if ($DisplayName -match "update|background|download|telemetry") {
return $true
}
return $false
}
function Show-Services {
$services = Get-SolidWorksServices
Write-Host "`n=== SOLIDWORKS RELATED SERVICES ===" -ForegroundColor Cyan
if ($services.Count -eq 0) {
Write-Host "[INFO] No SOLIDWORKS services found on this system" -ForegroundColor Yellow
return @()
}
Write-Host "`nFound $($services.Count) service(s):" -ForegroundColor White
foreach ($svc in $services) {
$shouldDisable = Test-ShouldDisable -DisplayName $svc.DisplayName
$statusColor = switch ($svc.Status) {
"Running" { "Green" }
"Stopped" { "Gray" }
default { "Yellow" }
}
$startTypeColor = switch ($svc.StartType) {
"Disabled" { "Red" }
"Manual" { "Yellow" }
"Automatic" { "Green" }
default { "White" }
}
Write-Host ""
Write-Host " $($svc.DisplayName)" -ForegroundColor White
Write-Host " Name: $($svc.Name)" -ForegroundColor Gray
Write-Host " Status: " -NoNewline; Write-Host "$($svc.Status)" -ForegroundColor $statusColor
Write-Host " StartType: " -NoNewline; Write-Host "$($svc.StartType)" -ForegroundColor $startTypeColor
if ($shouldDisable) {
Write-Host " Recommendation: " -NoNewline
Write-Host "DISABLE (update/telemetry service)" -ForegroundColor Red
} else {
Write-Host " Recommendation: " -NoNewline
Write-Host "KEEP (may be required)" -ForegroundColor Green
}
}
return $services
}
function Disable-TelemetryServices {
$services = Get-SolidWorksServices
if ($services.Count -eq 0) {
Write-Host "[INFO] No SOLIDWORKS services to disable" -ForegroundColor Yellow
return
}
# Save current states first
Save-ServiceStates -Services $services
$disabled = 0
$kept = 0
foreach ($svc in $services) {
$shouldDisable = Test-ShouldDisable -DisplayName $svc.DisplayName
if ($shouldDisable) {
try {
# Stop service if running
if ($svc.Status -eq "Running") {
Stop-Service -Name $svc.Name -Force -ErrorAction Stop
Write-Host "[OK] Stopped: $($svc.DisplayName)" -ForegroundColor Yellow
}
# Disable service
Set-Service -Name $svc.Name -StartupType Disabled -ErrorAction Stop
Write-Host "[OK] Disabled: $($svc.DisplayName)" -ForegroundColor Green
$disabled++
} catch {
Write-Host "[ERROR] Failed to disable $($svc.DisplayName): $_" -ForegroundColor Red
}
} else {
Write-Host "[KEEP] Preserved: $($svc.DisplayName)" -ForegroundColor Cyan
$kept++
}
}
Write-Host "`n[SUMMARY] Disabled: $disabled | Kept: $kept" -ForegroundColor White
}
# Main execution
if (-not (Test-IsAdmin)) {
Write-Host "[ERROR] This script requires Administrator privileges." -ForegroundColor Red
exit 1
}
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " SolidWorks Service Manager" -ForegroundColor Cyan
Write-Host " Atomaste Solution" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
if ($ListOnly) {
Show-Services
Write-Host "`n[INFO] Use without -ListOnly to apply changes" -ForegroundColor Yellow
} elseif ($Undo) {
Write-Host "`n[ACTION] Restoring original service states..." -ForegroundColor Yellow
Restore-ServiceStates
} else {
Write-Host "`n[ACTION] Scanning and disabling update/telemetry services..." -ForegroundColor Yellow
Show-Services
Write-Host ""
Disable-TelemetryServices
}
Write-Host "`n[DONE] Script completed." -ForegroundColor Green

View File

@@ -0,0 +1,264 @@
#Requires -RunAsAdministrator
<#
.SYNOPSIS
Configures Windows Firewall rules to block SolidWorks telemetry executables.
.DESCRIPTION
Creates outbound firewall rules to block update and telemetry executables
while allowing the main SOLIDWORKS application to communicate with
licensing servers.
.NOTES
Author: Atomaste Solution
Requires: Administrator privileges
Windows Firewall must be enabled
#>
param(
[switch]$Undo, # Remove all SOLIDWORKS firewall rules
[switch]$ListOnly, # Only list executables, don't create rules
[string]$InstallPath = "C:\Program Files\SOLIDWORKS Corp"
)
$rulePrefix = "SolidWorks Privacy - "
# Executables to BLOCK (update/telemetry)
$execsToBlock = @(
"SOLIDWORKS\swScheduler\dxttasks.exe",
"SOLIDWORKS\swScheduler\DXTTask.exe",
"SOLIDWORKS Installation Manager\sldIM.exe",
"SOLIDWORKS Installation Manager\sldDownloader.exe",
"SOLIDWORKS\swPDFPrinterHost.exe",
"SOLIDWORKS\swScheduler\TaskScheduler.exe",
"SOLIDWORKS\swScheduler\dxtTaskSvc.exe"
)
# Executables to ALLOW (main app - needs licensing access)
$execsToAllow = @(
"SOLIDWORKS\SLDWORKS.exe",
"SOLIDWORKS\swlmwiz.exe" # License wizard
)
# Additional executables to search for
$searchPatterns = @(
"*Update*.exe",
"*Downloader*.exe",
"*Telemetry*.exe",
"*Analytics*.exe",
"*3DEXPERIENCE*.exe"
)
function Test-IsAdmin {
$currentUser = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = New-Object Security.Principal.WindowsPrincipal($currentUser)
return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
function Find-SolidWorksExecutables {
param([string]$Path)
$results = @{
ToBlock = @()
ToAllow = @()
Other = @()
}
if (-not (Test-Path $Path)) {
Write-Host "[WARN] SolidWorks installation not found at: $Path" -ForegroundColor Yellow
return $results
}
Write-Host "[INFO] Scanning: $Path" -ForegroundColor Cyan
# Check known executables to block
foreach ($exe in $execsToBlock) {
$fullPath = Join-Path $Path $exe
if (Test-Path $fullPath) {
$results.ToBlock += $fullPath
}
}
# Check known executables to allow
foreach ($exe in $execsToAllow) {
$fullPath = Join-Path $Path $exe
if (Test-Path $fullPath) {
$results.ToAllow += $fullPath
}
}
# Search for additional update/telemetry executables
foreach ($pattern in $searchPatterns) {
$found = Get-ChildItem -Path $Path -Filter $pattern -Recurse -ErrorAction SilentlyContinue
foreach ($file in $found) {
if ($file.FullName -notin $results.ToBlock) {
$results.ToBlock += $file.FullName
}
}
}
return $results
}
function Show-Executables {
param([hashtable]$Execs)
Write-Host "`n=== EXECUTABLES TO ALLOW (licensing) ===" -ForegroundColor Green
if ($Execs.ToAllow.Count -eq 0) {
Write-Host " (none found)" -ForegroundColor Gray
} else {
foreach ($exe in $Execs.ToAllow) {
Write-Host " [ALLOW] $exe" -ForegroundColor Green
}
}
Write-Host "`n=== EXECUTABLES TO BLOCK (update/telemetry) ===" -ForegroundColor Red
if ($Execs.ToBlock.Count -eq 0) {
Write-Host " (none found)" -ForegroundColor Gray
} else {
foreach ($exe in $Execs.ToBlock) {
Write-Host " [BLOCK] $exe" -ForegroundColor Red
}
}
}
function Remove-SolidWorksRules {
$rules = Get-NetFirewallRule -DisplayName "$rulePrefix*" -ErrorAction SilentlyContinue
if ($rules) {
$count = ($rules | Measure-Object).Count
$rules | Remove-NetFirewallRule
Write-Host "[OK] Removed $count firewall rule(s)" -ForegroundColor Green
} else {
Write-Host "[INFO] No SolidWorks firewall rules found" -ForegroundColor Yellow
}
}
function New-BlockRule {
param([string]$ExePath)
$exeName = Split-Path $ExePath -Leaf
$ruleName = "$rulePrefix Block $exeName"
# Check if rule already exists
$existing = Get-NetFirewallRule -DisplayName $ruleName -ErrorAction SilentlyContinue
if ($existing) {
Write-Host "[SKIP] Rule already exists: $exeName" -ForegroundColor Yellow
return
}
try {
New-NetFirewallRule `
-DisplayName $ruleName `
-Description "Blocks outbound connections for SolidWorks update/telemetry" `
-Direction Outbound `
-Action Block `
-Program $ExePath `
-Enabled True `
-Profile Any `
-ErrorAction Stop | Out-Null
Write-Host "[OK] Created block rule: $exeName" -ForegroundColor Green
} catch {
Write-Host "[ERROR] Failed to create rule for $exeName : $_" -ForegroundColor Red
}
}
function New-AllowRule {
param([string]$ExePath)
$exeName = Split-Path $ExePath -Leaf
$ruleName = "$rulePrefix Allow $exeName"
# Check if rule already exists
$existing = Get-NetFirewallRule -DisplayName $ruleName -ErrorAction SilentlyContinue
if ($existing) {
Write-Host "[SKIP] Rule already exists: $exeName" -ForegroundColor Yellow
return
}
# Note: Windows Firewall cannot filter by domain easily
# We'll create an allow rule for the main app
# The hosts file handles domain-level blocking
try {
New-NetFirewallRule `
-DisplayName $ruleName `
-Description "Allows SolidWorks main app (licensing required)" `
-Direction Outbound `
-Action Allow `
-Program $ExePath `
-Enabled True `
-Profile Any `
-ErrorAction Stop | Out-Null
Write-Host "[OK] Created allow rule: $exeName" -ForegroundColor Green
} catch {
Write-Host "[ERROR] Failed to create rule for $exeName : $_" -ForegroundColor Red
}
}
function Show-CurrentRules {
$rules = Get-NetFirewallRule -DisplayName "$rulePrefix*" -ErrorAction SilentlyContinue
Write-Host "`n=== CURRENT SOLIDWORKS FIREWALL RULES ===" -ForegroundColor Cyan
if (-not $rules) {
Write-Host " (no rules configured)" -ForegroundColor Gray
return
}
foreach ($rule in $rules) {
$actionColor = if ($rule.Action -eq "Block") { "Red" } else { "Green" }
$enabledStatus = if ($rule.Enabled -eq "True") { "[ON]" } else { "[OFF]" }
Write-Host " $enabledStatus " -NoNewline
Write-Host "$($rule.Action)" -ForegroundColor $actionColor -NoNewline
Write-Host " - $($rule.DisplayName -replace $rulePrefix, '')" -ForegroundColor White
}
}
# Main execution
if (-not (Test-IsAdmin)) {
Write-Host "[ERROR] This script requires Administrator privileges." -ForegroundColor Red
exit 1
}
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " SolidWorks Firewall Configurator" -ForegroundColor Cyan
Write-Host " Atomaste Solution" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
if ($Undo) {
Write-Host "`n[ACTION] Removing all SolidWorks firewall rules..." -ForegroundColor Yellow
Remove-SolidWorksRules
Show-CurrentRules
} elseif ($ListOnly) {
Write-Host "`n[INFO] Scanning for executables (no changes will be made)..." -ForegroundColor Yellow
$execs = Find-SolidWorksExecutables -Path $InstallPath
Show-Executables -Execs $execs
Show-CurrentRules
Write-Host "`n[TIP] Run without -ListOnly to create firewall rules" -ForegroundColor Yellow
} else {
Write-Host "`n[ACTION] Configuring firewall rules..." -ForegroundColor Yellow
$execs = Find-SolidWorksExecutables -Path $InstallPath
Show-Executables -Execs $execs
Write-Host "`n[STEP] Creating firewall rules..." -ForegroundColor Cyan
# Create block rules for update/telemetry executables
foreach ($exe in $execs.ToBlock) {
New-BlockRule -ExePath $exe
}
# Create allow rules for main application
foreach ($exe in $execs.ToAllow) {
New-AllowRule -ExePath $exe
}
Show-CurrentRules
}
Write-Host "`n[NOTE] Domain-level blocking is handled by the hosts file." -ForegroundColor Yellow
Write-Host " Windows Firewall blocks at the executable level." -ForegroundColor Yellow
Write-Host "`n[DONE] Script completed." -ForegroundColor Green

View File

@@ -0,0 +1,334 @@
#Requires -RunAsAdministrator
<#
.SYNOPSIS
Disables SolidWorks in-app telemetry and update checks via registry.
.DESCRIPTION
Modifies Windows Registry to disable:
- Customer Experience Improvement Program (CEIP)
- Automatic update checks
- Anonymous usage data collection
- 3DEXPERIENCE connection prompts
.NOTES
Author: Atomaste Solution
Requires: Administrator privileges
Creates backup of registry keys before modification
#>
param(
[switch]$Undo, # Restore original registry values
[switch]$ListOnly # Only show current values, don't modify
)
$backupFile = "$env:USERPROFILE\solidworks-registry-backup.reg"
# Registry paths for SolidWorks settings
$regPaths = @{
HKCU_SW = "HKCU:\Software\SolidWorks"
HKLM_SW = "HKLM:\SOFTWARE\SolidWorks"
HKLM_SW_WOW = "HKLM:\SOFTWARE\WOW6432Node\SolidWorks"
}
# Settings to disable (0 = disabled, 1 = enabled typically)
$settingsToDisable = @(
@{
Description = "Customer Experience Improvement Program"
Paths = @("HKCU:\Software\SolidWorks\SOLIDWORKS *\Performance\CustomerExperienceImprovementProgram")
ValueName = "OptInStatus"
DisableValue = 0
EnableValue = 1
},
@{
Description = "Check for Updates"
Paths = @(
"HKCU:\Software\SolidWorks\SOLIDWORKS *\General",
"HKLM:\SOFTWARE\SolidWorks\SOLIDWORKS *\General"
)
ValueName = "Auto Check for Updates"
DisableValue = 0
EnableValue = 1
},
@{
Description = "Send Anonymous Usage Statistics"
Paths = @("HKCU:\Software\SolidWorks\SOLIDWORKS *\Performance")
ValueName = "Send Usage Statistics"
DisableValue = 0
EnableValue = 1
},
@{
Description = "3DEXPERIENCE Integration"
Paths = @("HKCU:\Software\SolidWorks\SOLIDWORKS *\General")
ValueName = "3DEXPERIENCE Enabled"
DisableValue = 0
EnableValue = 1
},
@{
Description = "Show 3DEXPERIENCE Messages"
Paths = @("HKCU:\Software\SolidWorks\SOLIDWORKS *\Messages")
ValueName = "Show 3DEXPERIENCE Prompt"
DisableValue = 0
EnableValue = 1
},
@{
Description = "Analytics Collection"
Paths = @("HKCU:\Software\SolidWorks\SOLIDWORKS *\Performance")
ValueName = "EnableAnalytics"
DisableValue = 0
EnableValue = 1
},
@{
Description = "Telemetry"
Paths = @("HKCU:\Software\SolidWorks\SOLIDWORKS *\Performance")
ValueName = "EnableTelemetry"
DisableValue = 0
EnableValue = 1
},
@{
Description = "Background Downloader"
Paths = @("HKCU:\Software\SolidWorks\SOLIDWORKS *\General")
ValueName = "Enable Background Downloader"
DisableValue = 0
EnableValue = 1
}
)
function Test-IsAdmin {
$currentUser = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = New-Object Security.Principal.WindowsPrincipal($currentUser)
return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
function Get-ExpandedPaths {
param([string]$PathPattern)
$results = @()
# Handle wildcard in path (e.g., "SOLIDWORKS *" for version)
if ($PathPattern -match "\*") {
$parentPath = Split-Path $PathPattern -Parent
$childPattern = Split-Path $PathPattern -Leaf
if (Test-Path $parentPath) {
$children = Get-ChildItem -Path $parentPath -ErrorAction SilentlyContinue |
Where-Object { $_.PSChildName -like $childPattern }
foreach ($child in $children) {
$results += $child.PSPath
}
}
} else {
if (Test-Path $PathPattern) {
$results += $PathPattern
}
}
return $results
}
function Backup-Registry {
Write-Host "[INFO] Creating registry backup..." -ForegroundColor Cyan
$regExportCmd = @"
Windows Registry Editor Version 5.00
; SolidWorks Privacy Lockdown - Registry Backup
; Created: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')
;
"@
foreach ($regPath in $regPaths.Values) {
$expandedPaths = Get-ExpandedPaths -PathPattern "$regPath\*"
foreach ($path in $expandedPaths) {
try {
$key = Get-Item -Path $path -ErrorAction SilentlyContinue
if ($key) {
# Note: This is a simplified backup - for full backup use reg.exe
$regExportCmd += "; Path: $path`r`n"
}
} catch { }
}
}
Set-Content -Path $backupFile -Value $regExportCmd -Force
Write-Host "[OK] Backup reference saved to: $backupFile" -ForegroundColor Green
Write-Host "[TIP] For full backup, run: reg export 'HKCU\Software\SolidWorks' backup.reg" -ForegroundColor Yellow
}
function Get-RegistryValue {
param(
[string]$Path,
[string]$Name
)
try {
$value = Get-ItemProperty -Path $Path -Name $Name -ErrorAction SilentlyContinue
if ($value) {
return $value.$Name
}
} catch { }
return $null
}
function Set-RegistryValue {
param(
[string]$Path,
[string]$Name,
[int]$Value
)
try {
# Create path if it doesn't exist
if (-not (Test-Path $Path)) {
New-Item -Path $Path -Force -ErrorAction SilentlyContinue | Out-Null
}
Set-ItemProperty -Path $Path -Name $Name -Value $Value -Type DWord -Force -ErrorAction Stop
return $true
} catch {
return $false
}
}
function Show-CurrentSettings {
Write-Host "`n=== CURRENT REGISTRY SETTINGS ===" -ForegroundColor Cyan
$found = $false
foreach ($setting in $settingsToDisable) {
Write-Host "`n$($setting.Description):" -ForegroundColor White
foreach ($pathPattern in $setting.Paths) {
$expandedPaths = Get-ExpandedPaths -PathPattern $pathPattern
if ($expandedPaths.Count -eq 0) {
Write-Host " [--] Path not found: $pathPattern" -ForegroundColor Gray
continue
}
foreach ($path in $expandedPaths) {
$found = $true
$currentValue = Get-RegistryValue -Path $path -Name $setting.ValueName
$displayPath = $path -replace "Microsoft\.PowerShell\.Core\\Registry::", ""
if ($null -eq $currentValue) {
Write-Host " [??] $displayPath" -ForegroundColor Gray
Write-Host " Value '$($setting.ValueName)' not set" -ForegroundColor Gray
} elseif ($currentValue -eq $setting.DisableValue) {
Write-Host " [OK] $displayPath" -ForegroundColor Green
Write-Host " $($setting.ValueName) = $currentValue (DISABLED)" -ForegroundColor Green
} else {
Write-Host " [!!] $displayPath" -ForegroundColor Red
Write-Host " $($setting.ValueName) = $currentValue (ENABLED)" -ForegroundColor Red
}
}
}
}
if (-not $found) {
Write-Host "`n[INFO] No SolidWorks registry entries found." -ForegroundColor Yellow
Write-Host " This is normal if SolidWorks hasn't been run yet." -ForegroundColor Yellow
}
}
function Disable-TelemetrySettings {
Write-Host "`n=== DISABLING TELEMETRY SETTINGS ===" -ForegroundColor Cyan
$modified = 0
$skipped = 0
$failed = 0
foreach ($setting in $settingsToDisable) {
Write-Host "`n$($setting.Description):" -ForegroundColor White
foreach ($pathPattern in $setting.Paths) {
$expandedPaths = Get-ExpandedPaths -PathPattern $pathPattern
if ($expandedPaths.Count -eq 0) {
# Try to create the path for common settings
if ($pathPattern -match "HKCU:") {
Write-Host " [SKIP] Path doesn't exist (will be set when SW runs)" -ForegroundColor Gray
}
$skipped++
continue
}
foreach ($path in $expandedPaths) {
$displayPath = $path -replace "Microsoft\.PowerShell\.Core\\Registry::", ""
$currentValue = Get-RegistryValue -Path $path -Name $setting.ValueName
if ($currentValue -eq $setting.DisableValue) {
Write-Host " [SKIP] Already disabled: $displayPath" -ForegroundColor Gray
$skipped++
continue
}
$success = Set-RegistryValue -Path $path -Name $setting.ValueName -Value $setting.DisableValue
if ($success) {
Write-Host " [OK] Disabled: $displayPath" -ForegroundColor Green
$modified++
} else {
Write-Host " [FAIL] Could not modify: $displayPath" -ForegroundColor Red
$failed++
}
}
}
}
Write-Host "`n[SUMMARY] Modified: $modified | Skipped: $skipped | Failed: $failed" -ForegroundColor White
}
function Enable-TelemetrySettings {
Write-Host "`n=== RESTORING TELEMETRY SETTINGS ===" -ForegroundColor Cyan
foreach ($setting in $settingsToDisable) {
Write-Host "`n$($setting.Description):" -ForegroundColor White
foreach ($pathPattern in $setting.Paths) {
$expandedPaths = Get-ExpandedPaths -PathPattern $pathPattern
foreach ($path in $expandedPaths) {
$displayPath = $path -replace "Microsoft\.PowerShell\.Core\\Registry::", ""
$success = Set-RegistryValue -Path $path -Name $setting.ValueName -Value $setting.EnableValue
if ($success) {
Write-Host " [OK] Restored: $displayPath" -ForegroundColor Green
} else {
Write-Host " [FAIL] Could not restore: $displayPath" -ForegroundColor Red
}
}
}
}
}
# Main execution
if (-not (Test-IsAdmin)) {
Write-Host "[ERROR] This script requires Administrator privileges." -ForegroundColor Red
exit 1
}
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " SolidWorks Registry Configurator" -ForegroundColor Cyan
Write-Host " Atomaste Solution" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
if ($ListOnly) {
Show-CurrentSettings
Write-Host "`n[TIP] Run without -ListOnly to disable telemetry" -ForegroundColor Yellow
} elseif ($Undo) {
Write-Host "`n[ACTION] Restoring original settings..." -ForegroundColor Yellow
Enable-TelemetrySettings
Show-CurrentSettings
} else {
Write-Host "`n[ACTION] Disabling telemetry and update settings..." -ForegroundColor Yellow
Backup-Registry
Disable-TelemetrySettings
Show-CurrentSettings
}
Write-Host "`n[NOTE] Some settings may only appear after running SolidWorks." -ForegroundColor Yellow
Write-Host " Re-run this script after first launch if needed." -ForegroundColor Yellow
Write-Host "`n[DONE] Script completed." -ForegroundColor Green

View File

@@ -0,0 +1,281 @@
#Requires -RunAsAdministrator
<#
.SYNOPSIS
Verifies that SolidWorks privacy lockdown is properly configured.
.DESCRIPTION
Checks all components of the privacy lockdown:
- Hosts file entries
- Disabled services
- Firewall rules
- Registry settings
- Licensing server connectivity
.NOTES
Author: Atomaste Solution
Requires: Administrator privileges
#>
param(
[switch]$Detailed # Show detailed information for each check
)
$script:passed = 0
$script:failed = 0
$script:warnings = 0
function Write-Check {
param(
[string]$Name,
[string]$Status, # PASS, FAIL, WARN
[string]$Message
)
$icon = switch ($Status) {
"PASS" { "[OK]"; $color = "Green"; $script:passed++ }
"FAIL" { "[!!]"; $color = "Red"; $script:failed++ }
"WARN" { "[??]"; $color = "Yellow"; $script:warnings++ }
default { "[--]"; $color = "Gray" }
}
Write-Host " $icon " -ForegroundColor $color -NoNewline
Write-Host "$Name" -ForegroundColor White -NoNewline
if ($Message) {
Write-Host " - $Message" -ForegroundColor Gray
} else {
Write-Host ""
}
}
function Test-HostsFile {
Write-Host "`n=== HOSTS FILE CHECK ===" -ForegroundColor Cyan
$hostsPath = "C:\Windows\System32\drivers\etc\hosts"
$content = Get-Content $hostsPath -Raw -ErrorAction SilentlyContinue
$markerStart = "# === SOLIDWORKS TELEMETRY BLOCK START ==="
if ($content -match [regex]::Escape($markerStart)) {
Write-Check -Name "Telemetry block installed" -Status "PASS"
} else {
Write-Check -Name "Telemetry block installed" -Status "FAIL" -Message "Block not found in hosts file"
}
# Check specific domains
$telemetryDomains = @(
"telemetry.solidworks.com",
"analytics.3ds.com",
"collect.3ds.com",
"update.solidworks.com"
)
foreach ($domain in $telemetryDomains) {
if ($content -match "127\.0\.0\.1\s+$([regex]::Escape($domain))") {
if ($Detailed) {
Write-Check -Name " $domain" -Status "PASS" -Message "Blocked"
}
} else {
Write-Check -Name " $domain" -Status "WARN" -Message "Not blocked"
}
}
}
function Test-LicensingConnectivity {
Write-Host "`n=== LICENSING SERVER CHECK ===" -ForegroundColor Cyan
$licensingDomains = @(
"activation.solidworks.com",
"license.solidworks.com",
"licensing.solidworks.com"
)
foreach ($domain in $licensingDomains) {
try {
$dns = Resolve-DnsName -Name $domain -Type A -ErrorAction Stop -DnsOnly
if ($dns) {
Write-Check -Name "$domain" -Status "PASS" -Message "Reachable ($($dns[0].IPAddress))"
}
} catch {
Write-Check -Name "$domain" -Status "FAIL" -Message "Cannot resolve DNS"
}
}
}
function Test-Services {
Write-Host "`n=== SERVICES CHECK ===" -ForegroundColor Cyan
$services = Get-Service -DisplayName "*SOLIDWORKS*" -ErrorAction SilentlyContinue
if (-not $services -or $services.Count -eq 0) {
Write-Check -Name "SolidWorks services" -Status "PASS" -Message "No services found/installed"
return
}
foreach ($svc in $services) {
$isUpdateService = $svc.DisplayName -match "update|download|background"
if ($isUpdateService) {
if ($svc.StartType -eq "Disabled") {
Write-Check -Name $svc.DisplayName -Status "PASS" -Message "Disabled"
} else {
Write-Check -Name $svc.DisplayName -Status "WARN" -Message "Should be disabled ($($svc.StartType))"
}
} else {
if ($Detailed) {
Write-Check -Name $svc.DisplayName -Status "PASS" -Message "$($svc.StartType) (kept)"
}
}
}
}
function Test-FirewallRules {
Write-Host "`n=== FIREWALL RULES CHECK ===" -ForegroundColor Cyan
$rulePrefix = "SolidWorks Privacy - "
$rules = Get-NetFirewallRule -DisplayName "$rulePrefix*" -ErrorAction SilentlyContinue
if (-not $rules) {
Write-Check -Name "Firewall rules" -Status "WARN" -Message "No SolidWorks firewall rules found"
return
}
$blockRules = $rules | Where-Object { $_.Action -eq "Block" }
$allowRules = $rules | Where-Object { $_.Action -eq "Allow" }
Write-Check -Name "Block rules configured" -Status "PASS" -Message "$($blockRules.Count) rule(s)"
Write-Check -Name "Allow rules configured" -Status "PASS" -Message "$($allowRules.Count) rule(s)"
if ($Detailed) {
foreach ($rule in $rules) {
$status = if ($rule.Enabled -eq "True") { "Active" } else { "Disabled" }
Write-Check -Name " $($rule.DisplayName -replace $rulePrefix, '')" -Status "PASS" -Message "$($rule.Action) - $status"
}
}
}
function Test-Registry {
Write-Host "`n=== REGISTRY CHECK ===" -ForegroundColor Cyan
$regChecks = @(
@{
Name = "Customer Experience Program"
Path = "HKCU:\Software\SolidWorks\SOLIDWORKS *\Performance"
ValueName = "CustomerExperienceImprovementProgram"
ExpectedPattern = "OptInStatus"
DisabledValue = 0
}
)
# Find actual SolidWorks version paths
$swBasePath = "HKCU:\Software\SolidWorks"
if (-not (Test-Path $swBasePath)) {
Write-Check -Name "SolidWorks registry" -Status "WARN" -Message "Not found (SW may not be installed/run yet)"
return
}
$swVersions = Get-ChildItem -Path $swBasePath -ErrorAction SilentlyContinue |
Where-Object { $_.PSChildName -like "SOLIDWORKS *" }
if (-not $swVersions) {
Write-Check -Name "SolidWorks versions" -Status "WARN" -Message "No version keys found"
return
}
foreach ($version in $swVersions) {
Write-Host "`n $($version.PSChildName):" -ForegroundColor White
# Check Performance subkey
$perfPath = Join-Path $version.PSPath "Performance"
if (Test-Path $perfPath) {
$props = Get-ItemProperty -Path $perfPath -ErrorAction SilentlyContinue
if ($props.PSObject.Properties.Name -contains "OptInStatus") {
if ($props.OptInStatus -eq 0) {
Write-Check -Name " CEIP OptInStatus" -Status "PASS" -Message "Disabled"
} else {
Write-Check -Name " CEIP OptInStatus" -Status "FAIL" -Message "Enabled ($($props.OptInStatus))"
}
} else {
Write-Check -Name " CEIP OptInStatus" -Status "WARN" -Message "Not set"
}
}
# Check General subkey
$generalPath = Join-Path $version.PSPath "General"
if (Test-Path $generalPath) {
$props = Get-ItemProperty -Path $generalPath -ErrorAction SilentlyContinue
if ($props.PSObject.Properties.Name -contains "Auto Check for Updates") {
if ($props."Auto Check for Updates" -eq 0) {
Write-Check -Name " Auto Updates" -Status "PASS" -Message "Disabled"
} else {
Write-Check -Name " Auto Updates" -Status "FAIL" -Message "Enabled"
}
}
}
}
}
function Test-TelemetryConnectivity {
Write-Host "`n=== TELEMETRY BLOCK VERIFICATION ===" -ForegroundColor Cyan
$telemetryDomains = @(
"telemetry.solidworks.com",
"analytics.3ds.com"
)
foreach ($domain in $telemetryDomains) {
try {
$result = Resolve-DnsName -Name $domain -Type A -ErrorAction Stop -DnsOnly
$ip = $result[0].IPAddress
if ($ip -eq "127.0.0.1") {
Write-Check -Name "$domain" -Status "PASS" -Message "Blocked (resolves to 127.0.0.1)"
} else {
Write-Check -Name "$domain" -Status "FAIL" -Message "NOT blocked (resolves to $ip)"
}
} catch {
Write-Check -Name "$domain" -Status "WARN" -Message "Cannot resolve (may be blocked at DNS level)"
}
}
}
function Show-Summary {
Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host " VERIFICATION SUMMARY" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""
Write-Host " Passed: " -NoNewline; Write-Host "$script:passed" -ForegroundColor Green
Write-Host " Failed: " -NoNewline; Write-Host "$script:failed" -ForegroundColor Red
Write-Host " Warnings: " -NoNewline; Write-Host "$script:warnings" -ForegroundColor Yellow
Write-Host ""
if ($script:failed -eq 0) {
Write-Host " [SUCCESS] Privacy lockdown is properly configured!" -ForegroundColor Green
} elseif ($script:failed -le 2) {
Write-Host " [PARTIAL] Most protections are in place, minor issues found." -ForegroundColor Yellow
} else {
Write-Host " [INCOMPLETE] Privacy lockdown needs attention." -ForegroundColor Red
}
}
# Main execution
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " SolidWorks Privacy Lockdown Verifier" -ForegroundColor Cyan
Write-Host " Atomaste Solution" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "`nRunning verification checks..." -ForegroundColor White
Test-HostsFile
Test-LicensingConnectivity
Test-Services
Test-FirewallRules
Test-Registry
Test-TelemetryConnectivity
Show-Summary
Write-Host "`n[TIP] Use -Detailed for more information on each check" -ForegroundColor Gray
Write-Host "[DONE] Verification completed." -ForegroundColor Green

View File

@@ -0,0 +1,105 @@
================================================================================
SOLIDWORKS PRIVACY LOCKDOWN REPORT
Generated: 2025-12-23 20:16:56
Computer: ANTOINETHINKPAD
User: antoi
Mode: DRY RUN (preview)
================================================================================
--------------------------------------------------------------------------------
SYSTEM STATE BEFORE CHANGES
--------------------------------------------------------------------------------
[INFO] Checking hosts file...
[BEFORE] Hosts file: No SolidWorks block found
[INFO] Checking services...
[BEFORE] Service: SolidWorks Licensing Service - Status: Stopped, StartType: Manual
[INFO] Checking firewall rules...
[BEFORE] Firewall: No SolidWorks Privacy rules found
[INFO] Checking registry...
[BEFORE] Registry: Found SOLIDWORKS 2026
[BEFORE] Registry: Found SOLIDWORKS CAM
--------------------------------------------------------------------------------
APPLYING PRIVACY LOCKDOWN
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
HOSTS FILE MODIFICATIONS
--------------------------------------------------------------------------------
[INFO] Licensing domains (preserved):
[OK] ALLOW: activation.solidworks.com
[OK] ALLOW: license.solidworks.com
[OK] ALLOW: licensing.solidworks.com
[INFO]
[INFO] Telemetry domains to block:
[INFO] Would block: api.3ds.com
[INFO] Would block: www.3ds.com
[INFO] Would block: swym.3ds.com
[INFO] Would block: iam.3ds.com
[INFO] Would block: cas.3ds.com
[INFO] Would block: eu1-ds-iam.3dexperience.3ds.com
[INFO] Would block: eu1-ds.3dexperience.3ds.com
[INFO] Would block: update.solidworks.com
[INFO] Would block: www.solidworks.com
[INFO] Would block: sentry.io
[INFO] Would block: o136956.ingest.sentry.io
[INFO] Would block: telemetry.solidworks.com
[INFO] Would block: analytics.3ds.com
[INFO] Would block: collect.3ds.com
[INFO] Would block: ifwe.3ds.com
[INFO] Would block: eu1-ifwe.3dexperience.3ds.com
[INFO] Would block: passport.3ds.com
[INFO] Would block: 3dswym.3ds.com
[WARN] [DRY RUN] No changes made to hosts file
--------------------------------------------------------------------------------
SERVICES MODIFICATIONS
--------------------------------------------------------------------------------
[SKIP] Preserved: SolidWorks Licensing Service (Manual)
--------------------------------------------------------------------------------
FIREWALL RULES CONFIGURATION
--------------------------------------------------------------------------------
[SKIP] Executable not found: SOLIDWORKS\swScheduler\dxttasks.exe
[SKIP] Executable not found: SOLIDWORKS\swScheduler\DXTTask.exe
[SKIP] Executable not found: SOLIDWORKS Installation Manager\sldIM.exe
[SKIP] Executable not found: SOLIDWORKS Installation Manager\sldDownloader.exe
--------------------------------------------------------------------------------
REGISTRY MODIFICATIONS
--------------------------------------------------------------------------------
[INFO] Processing: SOLIDWORKS 2026
[WARN] [DRY RUN] Would disable CEIP (current: )
[WARN] [DRY RUN] Would disable Auto Updates (current: )
[WARN] [DRY RUN] Would disable Analytics (current: )
[WARN] [DRY RUN] Would disable Telemetry (current: )
[INFO] Processing: SOLIDWORKS CAM
[SKIP] Path not found: Performance
[SKIP] Path not found: General
[SKIP] Path not found: Performance
[SKIP] Path not found: Performance
================================================================================
CHANGES SUMMARY
================================================================================
HOSTS FILE CHANGES (0):
(no changes)
SERVICES CHANGES (0):
(no changes)
FIREWALL CHANGES (0):
(no changes)
REGISTRY CHANGES (0):
(no changes)
================================================================================
TOTAL CHANGES: 0
REPORT SAVED: C:\Users\antoi\SERVtomaste\Solidworks Licenses\scripts\reports\lockdown-report_2025-12-23_20-16-56.txt
================================================================================

View File

@@ -0,0 +1,127 @@
================================================================================
SOLIDWORKS PRIVACY LOCKDOWN REPORT
Generated: 2025-12-23 20:18:01
Computer: ANTOINETHINKPAD
User: antoi
Mode: INSTALL
================================================================================
--------------------------------------------------------------------------------
SYSTEM STATE BEFORE CHANGES
--------------------------------------------------------------------------------
[INFO] Checking hosts file...
[BEFORE] Hosts file: No SolidWorks block found
[INFO] Checking services...
[BEFORE] Service: SolidWorks Licensing Service - Status: Stopped, StartType: Manual
[INFO] Checking firewall rules...
[BEFORE] Firewall: No SolidWorks Privacy rules found
[INFO] Checking registry...
[BEFORE] Registry: Found SOLIDWORKS 2026
[BEFORE] Registry: Found SOLIDWORKS CAM
--------------------------------------------------------------------------------
APPLYING PRIVACY LOCKDOWN
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
HOSTS FILE MODIFICATIONS
--------------------------------------------------------------------------------
[INFO] Licensing domains (preserved):
[OK] ALLOW: activation.solidworks.com
[OK] ALLOW: license.solidworks.com
[OK] ALLOW: licensing.solidworks.com
[INFO]
[INFO] Telemetry domains to block:
[OK] Backup created: C:\Windows\System32\drivers\etc\hosts.backup.solidworks.2025-12-23_20-18-01
[CHANGE] BLOCKED: api.3ds.com -> 127.0.0.1
[CHANGE] BLOCKED: www.3ds.com -> 127.0.0.1
[CHANGE] BLOCKED: swym.3ds.com -> 127.0.0.1
[CHANGE] BLOCKED: iam.3ds.com -> 127.0.0.1
[CHANGE] BLOCKED: cas.3ds.com -> 127.0.0.1
[CHANGE] BLOCKED: eu1-ds-iam.3dexperience.3ds.com -> 127.0.0.1
[CHANGE] BLOCKED: eu1-ds.3dexperience.3ds.com -> 127.0.0.1
[CHANGE] BLOCKED: update.solidworks.com -> 127.0.0.1
[CHANGE] BLOCKED: www.solidworks.com -> 127.0.0.1
[CHANGE] BLOCKED: sentry.io -> 127.0.0.1
[CHANGE] BLOCKED: o136956.ingest.sentry.io -> 127.0.0.1
[CHANGE] BLOCKED: telemetry.solidworks.com -> 127.0.0.1
[CHANGE] BLOCKED: analytics.3ds.com -> 127.0.0.1
[CHANGE] BLOCKED: collect.3ds.com -> 127.0.0.1
[CHANGE] BLOCKED: ifwe.3ds.com -> 127.0.0.1
[CHANGE] BLOCKED: eu1-ifwe.3dexperience.3ds.com -> 127.0.0.1
[CHANGE] BLOCKED: passport.3ds.com -> 127.0.0.1
[CHANGE] BLOCKED: 3dswym.3ds.com -> 127.0.0.1
[OK] Hosts file updated successfully
--------------------------------------------------------------------------------
SERVICES MODIFICATIONS
--------------------------------------------------------------------------------
[OK] Service states backed up to: C:\Users\antoi\solidworks-services-backup.json
[SKIP] Preserved: SolidWorks Licensing Service (Manual)
--------------------------------------------------------------------------------
FIREWALL RULES CONFIGURATION
--------------------------------------------------------------------------------
[SKIP] Executable not found: SOLIDWORKS\swScheduler\dxttasks.exe
[SKIP] Executable not found: SOLIDWORKS\swScheduler\DXTTask.exe
[SKIP] Executable not found: SOLIDWORKS Installation Manager\sldIM.exe
[SKIP] Executable not found: SOLIDWORKS Installation Manager\sldDownloader.exe
--------------------------------------------------------------------------------
REGISTRY MODIFICATIONS
--------------------------------------------------------------------------------
[INFO] Processing: SOLIDWORKS 2026
[CHANGE] Disabled: CEIP (was: -> now: 0)
[CHANGE] Disabled: Auto Updates (was: -> now: 0)
[CHANGE] Disabled: Analytics (was: -> now: 0)
[CHANGE] Disabled: Telemetry (was: -> now: 0)
[INFO] Processing: SOLIDWORKS CAM
[SKIP] Path not found: Performance
[SKIP] Path not found: General
[SKIP] Path not found: Performance
[SKIP] Path not found: Performance
================================================================================
CHANGES SUMMARY
================================================================================
HOSTS FILE CHANGES (18):
- BLOCKED: api.3ds.com -> 127.0.0.1
- BLOCKED: www.3ds.com -> 127.0.0.1
- BLOCKED: swym.3ds.com -> 127.0.0.1
- BLOCKED: iam.3ds.com -> 127.0.0.1
- BLOCKED: cas.3ds.com -> 127.0.0.1
- BLOCKED: eu1-ds-iam.3dexperience.3ds.com -> 127.0.0.1
- BLOCKED: eu1-ds.3dexperience.3ds.com -> 127.0.0.1
- BLOCKED: update.solidworks.com -> 127.0.0.1
- BLOCKED: www.solidworks.com -> 127.0.0.1
- BLOCKED: sentry.io -> 127.0.0.1
- BLOCKED: o136956.ingest.sentry.io -> 127.0.0.1
- BLOCKED: telemetry.solidworks.com -> 127.0.0.1
- BLOCKED: analytics.3ds.com -> 127.0.0.1
- BLOCKED: collect.3ds.com -> 127.0.0.1
- BLOCKED: ifwe.3ds.com -> 127.0.0.1
- BLOCKED: eu1-ifwe.3dexperience.3ds.com -> 127.0.0.1
- BLOCKED: passport.3ds.com -> 127.0.0.1
- BLOCKED: 3dswym.3ds.com -> 127.0.0.1
SERVICES CHANGES (0):
(no changes)
FIREWALL CHANGES (0):
(no changes)
REGISTRY CHANGES (4):
- Disabled: CEIP (was: -> now: 0)
- Disabled: Auto Updates (was: -> now: 0)
- Disabled: Analytics (was: -> now: 0)
- Disabled: Telemetry (was: -> now: 0)
================================================================================
TOTAL CHANGES: 22
REPORT SAVED: C:\Users\antoi\SERVtomaste\Solidworks Licenses\scripts\reports\lockdown-report_2025-12-23_20-18-01.txt
================================================================================