Enterprise deployment of TYCHON Quantum Readiness across Windows endpoints with Azure integration
Deploy TYCHON Quantum Readiness across your Windows endpoints using Microsoft Intune and automatically collect cryptographic intelligence in Azure Sentinel or Log Analytics workspaces.
Create Intune Win32 app package
Set up scheduled tasks via Intune
Stream results to Azure Sentinel
For quick local assessments or one-time scans, deploy TYCHON Quantum Readiness as an Intune PowerShell script that downloads, runs locally, and streams results directly to Azure - no permanent installation required.
Deploy as a PowerShell script through Intune - downloads TYCHON Quantum Readiness, runs local scan, streams to Azure, then cleans up:
# TYCHON Quantum Readiness-AdHoc-LocalScan.ps1
# Download, run local scan, stream to Azure, cleanup
param(
[string]$WorkspaceId = $env:AZURE_LOG_ANALYTICS_WORKSPACE_ID,
[string]$WorkspaceKey = $env:AZURE_LOG_ANALYTICS_WORKSPACE_KEY,
[string]$ScanTags = "ad-hoc-scan,intune-script"
)
$TempPath = "$env:TEMP\\TYCHON Quantum Readiness-$(Get-Random)"
$ScannerURL = "https://github.com/your-org/certscanner/releases/latest/download/certscanner-windows-amd64.exe"
$ScannerPath = "$TempPath\\certscanner.exe"
try {
Write-Host "🔄 Starting ad-hoc cryptographic scan on $env:COMPUTERNAME..."
# Create temp directory
New-Item -Path $TempPath -ItemType Directory -Force | Out-Null
# Download TYCHON Quantum Readiness
Write-Host "📦 Downloading TYCHON Quantum Readiness..."
Invoke-WebRequest -Uri $ScannerURL -OutFile $ScannerPath -UseBasicParsing
# Run comprehensive local scan
Write-Host "🔍 Scanning local system for cryptographic assets..."
$OutputFile = "$TempPath\\scan-results.json"
& $ScannerPath -mode local -scanfilesystem -scanmemory -scanconnected -scanoutlookarchives `
-outputformat json -output $OutputFile `
-tags $ScanTags
if ($LASTEXITCODE -eq 0) {
Write-Host "✅ Local scan completed successfully"
# Stream results to Azure Log Analytics
if ($WorkspaceId -and $WorkspaceKey) {
Write-Host "☁️ Streaming results to Azure Log Analytics..."
$ScanResults = Get-Content $OutputFile | ConvertFrom-Json
# Convert to Log Analytics format and post
$LogData = @{
Computer = $env:COMPUTERNAME
ScanTimestamp = Get-Date -Format "yyyy-MM-ddTHH:mm:ss.fffZ"
ScanResults = $ScanResults
Tags = $ScanTags.Split(",")
} | ConvertTo-Json -Depth 10
# Post to Azure Monitor Data Collector API
$uri = "https://$WorkspaceId.ods.opinsights.azure.com/api/logs?api-version=2016-04-01"
$headers = @{
"Authorization" = "SharedKey $WorkspaceId:$WorkspaceKey"
"Log-Type" = "TYCHON Quantum ReadinessAdHoc"
"Content-Type" = "application/json"
}
try {
Invoke-RestMethod -Uri $uri -Method Post -Body $LogData -Headers $headers
Write-Host "✅ Results uploaded to Azure Log Analytics"
} catch {
Write-Warning "⚠️ Failed to upload to Azure: $($_.Exception.Message)"
Write-Host "📄 Local results saved to: $OutputFile"
}
} else {
Write-Host "📄 Scan results saved locally to: $OutputFile"
Write-Host "💡 Configure AZURE_LOG_ANALYTICS_WORKSPACE_ID and KEY for Azure integration"
}
} else {
Write-Error "❌ Scan failed with exit code: $LASTEXITCODE"
exit 1
}
} catch {
Write-Error "❌ Ad-hoc scan failed: $($_.Exception.Message)"
exit 1
} finally {
# Cleanup temporary files
if (Test-Path $TempPath) {
Remove-Item $TempPath -Recurse -Force
Write-Host "🧹 Temporary files cleaned up"
}
}
# Set via Intune Device Configuration Profile
$env:AZURE_LOG_ANALYTICS_WORKSPACE_ID = "your-workspace-id"
$env:AZURE_LOG_ANALYTICS_WORKSPACE_KEY = "your-workspace-key"
For simpler Azure integration, use EventLog output that Windows Event Forwarding can automatically collect:
# TYCHON Quantum Readiness-EventLog-AdHoc.ps1
# Simplified script that writes to Windows Event Log
$TempPath = "$env:TEMP\\TYCHON Quantum Readiness-$(Get-Random)"
$ScannerURL = "https://github.com/your-org/certscanner/releases/latest/download/certscanner-windows-amd64.exe"
$ScannerPath = "$TempPath\\certscanner.exe"
try {
Write-Host "🔄 Starting ad-hoc scan with EventLog output..."
# Download and run with EventLog output
New-Item -Path $TempPath -ItemType Directory -Force | Out-Null
Invoke-WebRequest -Uri $ScannerURL -OutFile $ScannerPath -UseBasicParsing
# Run scan - results go directly to Windows Event Log
& $ScannerPath -mode local -scanfilesystem -scanmemory -scanconnected `
-outputformat eventlog `
-tags "ad-hoc-scan,eventlog"
if ($LASTEXITCODE -eq 0) {
Write-Host "✅ Scan completed - results written to Windows Event Log"
Write-Host "📊 View in Event Viewer: Application Log → Source: TYCHON Quantum Readiness"
} else {
Write-Error "❌ Scan failed with exit code: $LASTEXITCODE"
exit 1
}
} finally {
# Cleanup
if (Test-Path $TempPath) { Remove-Item $TempPath -Recurse -Force }
}
Advantage: Windows Event Forwarding automatically sends events to Azure Sentinel without additional configuration
Monitor and analyze ad-hoc scan results in Azure:
// Find ad-hoc scan results from last 24 hours
TYCHON Quantum ReadinessAdHoc_CL
| where TimeGenerated > ago(24h)
| where ScanResults_s contains "ad-hoc-scan"
| extend Computer = Computer_s
| extend CertCount = toint(ScanResults_s.filesystem_results.certificates)
| project TimeGenerated, Computer, CertCount, ScanResults_s
| order by TimeGenerated desc
// Query Windows Event Log events
Event
| where Source == "TYCHON Quantum Readiness" and TimeGenerated > ago(24h)
| where RenderedDescription contains "ad-hoc-scan"
| extend ScanData = parse_json(RenderedDescription)
| project TimeGenerated, Computer, EventID, ScanData
| order by TimeGenerated desc
Create a folder structure for your Intune package:
TYCHON Quantum Readiness-Package/
├── certscanner.exe # Windows binary
├── install.ps1 # Installation script
├── uninstall.ps1 # Uninstallation script
├── detection.ps1 # Detection script
└── scheduled-task.xml # Task definition
# install.ps1
param(
[string]$InstallPath = "C:\Program Files\TYCHON Quantum Readiness",
[string]$TaskName = "TYCHON Quantum Readiness-Monitoring"
)
# Create installation directory
New-Item -ItemType Directory -Path $InstallPath -Force | Out-Null
# Copy binary to program files
Copy-Item "certscanner.exe" -Destination "$InstallPath\certscanner.exe" -Force
# Import scheduled task
$TaskXml = Get-Content "scheduled-task.xml" -Raw
$TaskXml = $TaskXml -replace "INSTALL_PATH_PLACEHOLDER", $InstallPath
Register-ScheduledTask -TaskName $TaskName -Xml $TaskXml -Force
# Create Event Log source (requires admin)
try {
New-EventLog -LogName "Application" -Source "TYCHON Quantum Readiness" -ErrorAction SilentlyContinue
} catch {
Write-Host "Event Log source may already exist or insufficient permissions"
}
Write-Host "TYCHON Quantum Readiness installed successfully to $InstallPath"
exit 0
# uninstall.ps1
param(
[string]$InstallPath = "C:\Program Files\TYCHON Quantum Readiness",
[string]$TaskName = "TYCHON Quantum Readiness-Monitoring"
)
# Stop and remove scheduled task
try {
Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false -ErrorAction SilentlyContinue
Write-Host "Scheduled task removed successfully"
} catch {
Write-Host "Scheduled task may not exist or already removed"
}
# Remove installation directory
if (Test-Path $InstallPath) {
Remove-Item -Path $InstallPath -Recurse -Force
Write-Host "Installation directory removed: $InstallPath"
}
# Note: Event Log source cannot be easily removed without restart
# This is by design for Windows Event Log security
Write-Host "TYCHON Quantum Readiness uninstalled successfully"
exit 0
⚠️ Important: Replace YOUR-LICENSE-KEY-HERE in the Arguments section below with your actual TYCHON license key before packaging.
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Description>TYCHON Quantum Readiness automated cryptographic monitoring</Description>
<Author>IT Security Team</Author>
</RegistrationInfo>
<Triggers>
<CalendarTrigger>
<Repetition>
<Interval>PT4H</Interval>
</Repetition>
<StartBoundary>2025-01-01T08:00:00</StartBoundary>
<ExecutionTimeLimit>PT30M</ExecutionTimeLimit>
<Enabled>true</Enabled>
<ScheduleByDay>
<DaysInterval>1</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-18</UserId>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>true</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>false</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
<UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT30M</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>INSTALL_PATH_PLACEHOLDER\certscanner.exe</Command>
<Arguments>-license-key "YOUR-LICENSE-KEY-HERE" -mode local -scanfilesystem -scanmemory -scanconnected -outputformat eventlog -tags "intune-managed,automated-scan"</Arguments>
<WorkingDirectory>INSTALL_PATH_PLACEHOLDER</WorkingDirectory>
</Exec>
</Actions>
</Task>
# detection.ps1
$InstallPath = "C:\Program Files\TYCHON Quantum Readiness\certscanner.exe"
$TaskName = "TYCHON Quantum Readiness-Monitoring"
# Check if binary exists and scheduled task is present
if ((Test-Path $InstallPath) -and (Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue)) {
Write-Host "TYCHON Quantum Readiness is installed and configured"
exit 0
} else {
Write-Host "TYCHON Quantum Readiness not properly installed"
exit 1
}
REM Download Win32 Content Prep Tool from Microsoft
IntuneWinAppUtil.exe -c "C:\Source\TYCHON Quantum Readiness-Package" -s "install.ps1" -o "C:\Output"
REM This creates TYCHON Quantum Readiness.intunewin package ready for upload
TYCHON Quantum Readiness.intunewin package| Name | TYCHON Quantum Readiness Cryptographic Monitoring |
| Description | Automated cryptographic asset discovery and monitoring tool |
| Publisher | Your Organization IT Security |
| Category | Security |
| Install Command | powershell.exe -ExecutionPolicy Bypass -File install.ps1 |
| Uninstall Command | powershell.exe -ExecutionPolicy Bypass -File uninstall.ps1 |
Detection Method: Use a PowerShell script
# Upload detection.ps1 and configure:
# - Run script as 32-bit PowerShell: No
# - Enforce script signature check: No
# - Run script as logged on user: No
Assignment Type: Required
Target Groups:
- TYCHON Quantum Readiness-Pilot (Available)
- Critical-Servers (Required)
- All-Workstations (Required)
Notifications: Show all toast notifications
Install Deadline: As soon as possible
Restart Grace Period: 15 minutes
Set up automatic forwarding of TYCHON Quantum Readiness events to Azure:
{
"eventLogSettings": {
"application": {
"enabled": true,
"sources": ["TYCHON Quantum Readiness"],
"eventIds": [1001, 1002, 1003, 1004]
}
},
"streamingSettings": {
"batchSize": 100,
"flushInterval": "30s"
}
}
// Find PQC-vulnerable ciphers across organization
Event
| where Source == "TYCHON Quantum Readiness" and EventID == 1001
| extend CertData = parse_json(RenderedDescription)
| where CertData.cipher.intel.pqc_ready == false
| summarize count() by Computer, tostring(CertData.cipher.name)
| order by count_ desc
// Certificate expiration monitoring
Event
| where Source == "TYCHON Quantum Readiness" and EventID == 1002
| extend CertData = parse_json(RenderedDescription)
| extend ExpiryDate = todatetime(CertData.certificate.not_after)
| where ExpiryDate < now() + 30d
| project TimeGenerated, Computer,
CertSubject = tostring(CertData.certificate.subject.common_name),
ExpiryDate, FilePath = tostring(CertData.file.path)
| order by ExpiryDate asc
// Memory crypto library inventory
Event
| where Source == "TYCHON Quantum Readiness" and EventID == 1003
| extend LibData = parse_json(RenderedDescription)
| summarize count() by Computer,
Library = tostring(LibData.cryptolibrary.name),
Process = tostring(LibData.process.name)
| order by count_ desc
{
"workbookName": "TYCHON Quantum Readiness Cryptographic Dashboard",
"sections": [
{
"title": "Organization Crypto Overview",
"queries": [
"TYCHON Quantum Readiness events by computer",
"Top vulnerable cipher suites",
"Certificate expiration timeline",
"Crypto library distribution"
]
},
{
"title": "Security Alerts",
"queries": [
"PQC-vulnerable systems",
"Expired certificates",
"Weak cipher suites",
"Uncommon crypto libraries"
]
}
]
}
// Alert on PQC-vulnerable ciphers
Event
| where Source == "TYCHON Quantum Readiness" and EventID == 1001
| extend CertData = parse_json(RenderedDescription)
| where CertData.cipher.intel.security_level == "low"
or CertData.cipher.intel.pqc_ready == false
| summarize count() by Computer, bin(TimeGenerated, 1h)
| where count_ > 5 // Threshold for alerting
// Alert on certificate expiration
Event
| where Source == "TYCHON Quantum Readiness" and EventID == 1002
| extend CertData = parse_json(RenderedDescription)
| extend ExpiryDate = todatetime(CertData.certificate.not_after)
| where ExpiryDate < now() + 7d // 7 days warning
| project Computer, CertSubject = CertData.certificate.subject.common_name,
ExpiryDate, FilePath = CertData.file.path
Deploy different scanning profiles for different device types:
-mode local
-scanfilesystem
-scanconnected
-outputformat eventlog
-tags "workstation,daily"
-mode local
-scanfilesystem
-scanmemory
-scanconnected
-outputformat eventlog
-tags "server,critical"
-mode local
-scanfilesystem
-scanmemory
-scanconnected
-scanoutlookarchives
-outputformat eventlog
-tags "critical,compliance"
# Create configuration profile in Intune (PowerShell script)
$ConfigPath = "C:\Program Files\TYCHON Quantum Readiness\config.json"
$Config = @{
"default_scan_mode" = "local"
"enable_filesystem_scan" = $true
"enable_memory_scan" = $true
"enable_connected_scan" = $true
"default_tags" = @("intune-managed", "automated")
"output_format" = "eventlog"
"scan_schedule" = "every_4_hours"
} | ConvertTo-Json -Depth 10
# Ensure directory exists
New-Item -ItemType Directory -Path (Split-Path $ConfigPath) -Force | Out-Null
# Write configuration
$Config | Out-File -FilePath $ConfigPath -Encoding UTF8 -Force
Write-Host "TYCHON Quantum Readiness configuration deployed successfully"
-mode local -scanfilesystem
-scanmemory -scanconnected
-outputformat eventlog
-tags "compliance,daily-audit"
-mode local -scanfilesystem
-scanmemory -scanconnected
-scanoutlookarchives
-outputformat html
-tags "incident-response,forensics"
-mode local -cipherscan
-scanfilesystem -scanmemory
-outputformat cbom
-tags "pqc-readiness,weekly"
# Check deployment status across organization
Connect-MSGraph
# Get all devices with TYCHON Quantum Readiness app
$AppId = "your-certscanner-app-id"
$Devices = Get-IntuneManagedDevice | Where-Object { $_.operatingSystem -eq "Windows" }
foreach ($Device in $Devices) {
$AppStatus = Get-IntuneDeviceAppStatus -DeviceId $Device.id -AppId $AppId
Write-Host "$($Device.deviceName): $($AppStatus.installState)"
}
# Check for scan results in last 24 hours
$Yesterday = (Get-Date).AddDays(-1)
$ScanEvents = Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='TYCHON Quantum Readiness'
StartTime=$Yesterday
} -ComputerName $Device.deviceName -ErrorAction SilentlyContinue
Write-Host "$($Device.deviceName): $($ScanEvents.Count) scan events in last 24h"
# Update scan configuration across all endpoints
$NewConfig = @{
"scan_frequency" = "every_6_hours"
"enable_outlook_scan" = $true
"additional_tags" = @("updated-config", "v2")
} | ConvertTo-Json
# Deploy via Intune PowerShell script
$ScriptContent = @"
`$ConfigPath = "C:\Program Files\TYCHON Quantum Readiness\config.json"
'$NewConfig' | Out-File -FilePath `$ConfigPath -Encoding UTF8 -Force
Restart-ScheduledTask -TaskName "TYCHON Quantum Readiness-Monitoring"
"@
# Upload and assign to device groups
New-IntuneDeviceConfigurationPolicyScript -Content $ScriptContent -DisplayName "TYCHON Quantum Readiness-Config-Update"