Autopilot/Export-AutopilotHash-ToEmail.ps1

97 lines
3.2 KiB
PowerShell

# Configuration
$csvPath = "$env:TEMP\AutopilotHash.csv"
$autopilotScript = "$env:TEMP\Get-WindowsAutopilotInfo.ps1"
# Microsoft 365 OAuth Configuration
$tenantId = "YOUR_TENANT_ID"
$clientId = "YOUR_CLIENT_ID"
$clientSecret = "YOUR_CLIENT_SECRET" # Store securely!
$fromEmail = "sender@example.com"
$toEmail = "recipient@example.com"
# Retrieve the device serial number
$serialNumber = (Get-WmiObject -Class Win32_BIOS).SerialNumber
if (-not $serialNumber) {
$serialNumber = "Unknown_SerialNumber"
}
# Email subject including the serial number
$subject = "Autopilot Hash Export - $serialNumber"
$body = "See the attached CSV file containing the Autopilot Hash for device $serialNumber."
# Download Get-WindowsAutopilotInfo.ps1 from a trusted source
Write-Host "Downloading Get-WindowsAutopilotInfo.ps1..."
$downloadUrl = "https://gitea.oskamp.info/ivooskamp/Autopilot/raw/branch/main/Get-WindowsAutoPilotInfo.ps1"
Try {
Invoke-WebRequest -Uri $downloadUrl -OutFile $autopilotScript -UseBasicParsing -ErrorAction Stop
} Catch {
Write-Host "Error: Failed to download Get-WindowsAutopilotInfo.ps1."
Exit 1
}
# Verify if the script was downloaded correctly
if (-not (Test-Path $autopilotScript)) {
Write-Host "Error: Get-WindowsAutopilotInfo.ps1 does not exist after download."
Exit 1
}
# Execute the script to collect the Autopilot hash
Write-Host "Collecting the Autopilot hash..."
Try {
& PowerShell -ExecutionPolicy Bypass -File $autopilotScript -OutputFile $csvPath -ErrorAction Stop
} Catch {
Write-Host "Error retrieving the Autopilot hash: $_"
Exit 1
}
# Check if the CSV file was created
if (-not (Test-Path $csvPath)) {
Write-Host "Error: CSV file was not created."
Exit 1
}
# Obtain Microsoft 365 OAuth Token
Write-Host "Retrieving Microsoft 365 OAuth token..."
$tokenUrl = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token"
$tokenBody = @{
client_id = $clientId
scope = "https://graph.microsoft.com/.default"
grant_type = "client_credentials"
client_secret = $clientSecret
}
$tokenResponse = Invoke-RestMethod -Method Post -Uri $tokenUrl -ContentType "application/x-www-form-urlencoded" -Body $tokenBody
$accessToken = $tokenResponse.access_token
# Send email via Microsoft Graph API
$graphUrl = "https://graph.microsoft.com/v1.0/users/$fromEmail/sendMail"
$emailJson = @{
message = @{
subject = $subject
body = @{
contentType = "Text"
content = $body
}
toRecipients = @(@{ emailAddress = @{ address = $toEmail } })
attachments = @(@{
"@odata.type" = "#microsoft.graph.fileAttachment"
name = "AutopilotHash_$serialNumber.csv"
contentType = "text/csv"
contentBytes = [Convert]::ToBase64String([System.IO.File]::ReadAllBytes($csvPath))
})
}
}
$emailJson = $emailJson | ConvertTo-Json -Depth 10
Write-Host "Sending email..."
Invoke-RestMethod -Uri $graphUrl -Headers @{Authorization = "Bearer $accessToken"; "Content-Type" = "application/json"} -Method Post -Body $emailJson
Write-Host "Email sent to $toEmail"
# Cleanup
Remove-Item -Path $csvPath -Force
Remove-Item -Path $autopilotScript -Force