Files

173 lines
4.2 KiB
PowerShell

<#
.SYNOPSIS
Intune Readiness Assessment Script
.DESCRIPTION
Collects the minimum required device information for an Intune deployment:
- Computer Name
- Serial Number
- Manufacturer
- Model
- Windows Edition
- Windows Build
- TPM Status
- Secure Boot Status
- Domain Join Status
- Entra ID Join Status
- Primary User
- BitLocker Status
- Installed Applications Count
- Antivirus Product
.NOTES
Run as Administrator for best results.
#>
# Stop running if script is not run as Administrator
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Host "ERROR: Script must be run as administrator" -ForegroundColor Yellow -BackgroundColor Red -NoNewLine
Write-Host
Write-Host "Operation aborted."
exit
}
# Get basic computer information
$ComputerSystem = Get-CimInstance Win32_ComputerSystem
$BIOS = Get-CimInstance Win32_BIOS
$OS = Get-CimInstance Win32_OperatingSystem
# Computer Name
$ComputerName = $env:COMPUTERNAME
# Serial Number
$SerialNumber = $BIOS.SerialNumber
# Manufacturer and Model
$Manufacturer = $ComputerSystem.Manufacturer
$Model = $ComputerSystem.Model
# Windows Information
$WindowsEdition = (Get-ComputerInfo).OsName
$WindowsBuild = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' | Select-Object DisplayVersion).DisplayVersion
# TPM Information
try {
$TPM = Get-Tpm
if ($TPM.TpmPresent) {
$TPMStatus = "Present"
$TPMVersion = ($TPM.ManufacturerVersion)
}
else {
$TPMStatus = "Not Present"
$TPMVersion = "N/A"
}
}
catch {
$TPMStatus = "Unknown"
$TPMVersion = "Unknown"
}
# Secure Boot
try {
$SecureBoot = Confirm-SecureBootUEFI
}
catch {
$SecureBoot = "Unsupported/Legacy BIOS"
}
# Domain Join Status
$DomainJoined = $ComputerSystem.PartOfDomain
# Entra ID Join Status
$AzureADJoined = "Unknown"
try {
$DsReg = dsregcmd /status
if ($DsReg -match "AzureAdJoined\s*:\s*YES") {
$AzureADJoined = "Yes"
}
elseif ($DsReg -match "AzureAdJoined\s*:\s*NO") {
$AzureADJoined = "No"
}
}
catch {
$AzureADJoined = "Unable to Determine"
}
# Primary User
$PrimaryUser = (Get-CimInstance Win32_ComputerSystem).UserName
# BitLocker Status
try {
$BitLockerVolume = Get-BitLockerVolume -MountPoint "C:"
$BitLockerStatus = $BitLockerVolume.ProtectionStatus
switch ($BitLockerStatus) {
1 { $BitLockerStatus = "Protected" }
0 { $BitLockerStatus = "Not Protected" }
default { $BitLockerStatus = "Unknown" }
}
}
catch {
$BitLockerStatus = "Unknown"
}
# Installed Applications Count
try {
$AppCount = (
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* ,
HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* `
-ErrorAction SilentlyContinue |
Where-Object { $_.DisplayName } |
Measure-Object
).Count
}
catch {
$AppCount = "Unknown"
}
# Antivirus Product
try {
$AV = Get-CimInstance `
-Namespace "root\SecurityCenter2" `
-ClassName AntiVirusProduct `
-ErrorAction Stop
$AntivirusProduct = ($AV.displayName -join "; ")
}
catch {
$AntivirusProduct = "Not Detected"
}
# Create Output Object
$Results = [PSCustomObject]@{
ComputerName = $ComputerName
SerialNumber = $SerialNumber
Manufacturer = $Manufacturer
Model = $Model
WindowsEdition = $WindowsEdition
WindowsBuild = $WindowsBuild
TPMStatus = $TPMStatus
TPMVersion = $TPMVersion
SecureBootEnabled = $SecureBoot
DomainJoined = $DomainJoined
AzureADJoined = $AzureADJoined
PrimaryUser = $PrimaryUser
BitLockerStatus = $BitLockerStatus
InstalledApps = $AppCount
AntivirusProduct = $AntivirusProduct
}
# Display Results
$Results | Format-List
# Export Results
$OutputFile = "$env:PUBLIC\Documents\Intune_Readiness_$ComputerName.csv"
$Results | Export-Csv -Path $OutputFile -NoTypeInformation
Write-Host ""
Write-Host "Assessment complete." -ForegroundColor Green
Write-Host "Results exported to: $OutputFile" -ForegroundColor Cyan