Public/Windows10Autopilot/Get-Windows10HashBULKDownloadFromAzureUploadToIntune.ps1
function Get-Windows10HashBULKDownloadFromAzureUploadToIntune { <# .SYNOPSIS Download CSVs from Azure Blob and Combine them into single CSV and Upload to Intune (BULK approach) .DESCRIPTION Download CSVs from Azure Blob and Combine them into single CSV and Upload to Intune (BULK approach) It's meant to be used for multiple Windows 10 devices Additional configuration is required for Azure Blob (MUST be completed first) [REQUIREMENTS] BlobConnectionString = Storage Account Connection String BlobContainerHashes = Blob Container name for the Windows 10 Hashes .EXAMPLE Example1: Get-Windows10HashBULKDownloadFromAzureUploadToIntune -BlobConnectionString "oMYJLjKhlmMyyMxM1I5/IcnEtiMO/fey1A==" -BlobContainerHashes "windows10hashes" .NOTES General notes #> param ( [Parameter(Mandatory)] $BlobConnectionString, [Parameter(Mandatory)] $BlobContainerHashes ) # Logs $outputPath = Join-Path $env:windir "temp\Autopilot" $outputCombined = "$outputPath\AutopilotHashes.csv" if (-not (Test-Path $outputPath)) { New-Item -Path $outputPath -ItemType Directory | Out-Null } # Requirements $module1 = Import-Module AzureRM -PassThru -ErrorAction Ignore if (-not $module1) { Write-Host "Installing module AzureRM" Install-Module AzureRM -Force } Import-Module AzureRM -Scope Global $module2 = Import-Module WindowsAutopilotIntune -PassThru -ErrorAction Ignore if (-not $module2) { Write-Host "Installing module WindowsAutopilotIntune" Install-Module WindowsAutopilotIntune -Force } Import-Module WindowsAutopilotIntune -Scope Global # Connect to Azure/MSGraph $azure = Connect-AzureRmAccount Write-Host -ForegroundColor Yellow "Connected to Azure tenant $($azure.Context.Tenant.Directory)" $graph = Connect-MSGraph Write-Host -ForegroundColor Yellow "Connected to MSGraph tenant $($graph.TenantId)" # Script $connection_string = $BlobConnectionString $storage_account = New-AzureStorageContext -ConnectionString $connection_string $container_name = $BlobContainerHashes $blobs = Get-AzureStorageBlob -Container $container_name -Context $storage_account foreach ($blob in $blobs) { Write-Host "Exporting Win10Hashes" Get-AzureStorageBlobContent -Container $container_name -Blob $blob.Name -Destination $outputPath -Context $storage_account } # Intune has a limit for 500 rows as maximum allowed import currently! We select max 500 csv files to combine them $downloadFiles = Get-ChildItem -Path $outputPath -Filter "*.csv" | select -First 500 # Combine All hashes into a single CSV Set-Content -Path $outputCombined -Value "Device Serial Number,Windows Product ID,Hardware Hash" -Encoding Unicode Write-Host "Locate combined Windows10Hashes CSV files from Blob into single CSV: " -NoNewline $downloadFiles | % { Get-Content $_.FullName | Select -Index 1 } | Add-Content -Path $outputCombined -Encoding Unicode Write-Host -ForegroundColor Green "$outputCombined" # Upload Hashes to Intune Import-AutopilotCSV -csvFile $outputCombined } |