Public/Get-FUBlocksFromBin.ps1
<#
.EXTERNALHELP FU.WhyAmIBlocked-help.xml #> function Get-FUBlocksFromBin { [cmdletbinding()] param ( [parameter(Position = 1, Mandatory = $true)] [string[]] $FileList, [string] $ResultFile = ".\Result.txt", [System.Collections.ArrayList] $Output ) try { if (!(Test-Path -Path $ResultFile)) { New-Item -Path $ResultFile -ItemType File | Out-Null } foreach ($File in $FileList) { Write-Host " + Finding block entries in $($File) files.. " -ForegroundColor Cyan -NoNewline if (Test-Path -Path $File -ErrorAction SilentlyContinue) { [xml]$AppraiserXML = Get-Content -Path $File [System.Xml.XmlElement] $root = $AppraiserXML.get_DocumentElement() $i = 0 ; $s = 0 ; $sdbSearch = @() ; $sdb = @{}; $x = 0; $match = 0; $gBlock = @{}; $sBlock = @{} Do { $datasourceValues = @() $datasourceValues = $root.Assets.Asset[$i].SelectNodes("PropertyList[@Type='DataSource']") if ($datasourceValues.Count -gt 0) { $sdbSearch = [PSCustomObject]@{ SdbAppraiserData = $datasourceValues.SelectNodes("Property[@Name='SdbAppraiserData']").Value SdbAppName = $datasourceValues.SelectNodes("Property[@Name='SdbAppName']").Value SdbEntryGuid = $datasourceValues.SelectNodes("Property[@Name='SdbEntryGuid']").Value SdbBlockType = $datasourceValues.SelectNodes("Property[@Name='SdbBlockType']").Value SdbAppGuid = $datasourceValues.SelectNodes("Property[@Name='SdbAppGuid']").Value SdbBlockOverrideType = $datasourceValues.SelectNodes("Property[@Name='SdbBlockOverrideType']").Value SdbAppraiserData_GatedBlockId = $datasourceValues.SelectNodes("Property[@Name='SdbAppraiserData_GatedBlockId']").Value Ordinal = $datasourceValues.SelectNodes("Property[@Name='SdbEntryGuid']").Ordinal } #$sdbSearch += $datasourceValues.SelectNodes("Property[@Name='SdbAppraiserData']") #$sdbSearch += $datasourceValues.SelectNodes("Property[@Name='SdbAppName']") #$sdbSearch += $datasourceValues.SelectNodes("Property[@Name='SdbEntryGuid']") #$sdbSearch += $datasourceValues.SelectNodes("Property[@Name='SdbBlockType']") #$sdbSearch += $datasourceValues.SelectNodes("Property[@Name='SdbAppGuid']") #$sdbSearch += $datasourceValues.SelectNodes("Property[@Name='SdbBlockOverrideType']") #$sdbSearch += $datasourceValues.SelectNodes("Property[@Name='SdbAppraiserData_GatedBlockId']") if ($sdbSearch.SdbEntryGuid) { $sdb[$s] = $sdbSearch $s++ } } $count = $root.Assets.Asset.Count Write-Progress -Activity "Searching for Blocks - $count Items to Process" -PercentComplete (($i / $count) * 100) $i++ } Until($i -eq $count) Write-Progress -Activity "$File ..." -Completed Add-Content -Path $ResultFile -Value "$($File)" Add-Content -Path $ResultFile -Value "" Do { $ordinal = ($sdb[$x] | Where-Object {$_.SdbAppraiserData -EQ 'GatedBlock'}).Ordinal if ($ordinal.Count -gt 0) { Add-Content -Path $ResultFile -Value "==========" Add-Content -Path $ResultFile -Value "Matching GatedBlock....FOUND!" Add-Content -Path $ResultFile -Value "GatedBlock:" Add-Content -Path $ResultFile -Value "==========" $match = 1 } if ($ordinal.Count -gt 1) { $gBlock = foreach ($num in $ordinal) { $sdb[$x] | Where-Object {$_.Ordinal -eq $num} } $gBlock.SdbEntryGuid | foreach-Object { $Output.Add($_) | Out-Null } $gBlock | Out-File -FilePath $ResultFile -Append -Encoding utf8 } if ($ordinal.Count -eq 1) { $gBlock = $sdb[$x] | Where-Object {$_.Ordinal -eq $ordinal} $gBlock.SdbEntryGuid | foreach-Object { $Output.Add($_) | Out-Null } $gBlock | Out-File -FilePath $ResultFile -Append -Encoding utf8 } $x++ } Until ($x -gt $sdb.Count) if ($match -ne 1) { Add-Content -Path $ResultFile -Value "Matching GatedBlock....NONE FOUND." } Add-Content -Path $ResultFile -Value "============" Add-Content -Path $ResultFile -Value "" $x = 0 Do { $ordinal = ($sdb[$x] | Where-Object {$_.SdbBlockType -eq 'BlockUpgrade'}).Ordinal if ($ordinal.Count -gt 0) { Add-Content -Path $ResultFile -Value "==========" Add-Content -Path $ResultFile -Value "Matching BlockUpgrade....FOUND!" Add-Content -Path $ResultFile -Value "BlockUpgrade:" Add-Content -Path $ResultFile -Value "============" Add-Content -Path $ResultFile -Value "" $match = 2 } if ($ordinal.Count -gt 1) { $sBlock = foreach ($num in $ordinal) { $sdb[$x] | Where-Object {$_.Ordinal -eq $num} } $sBlock.SdbEntryGuid | foreach-Object { $Output.Add($_) | Out-Null } $sBlock | Out-File -FilePath $ResultFile -Append -Encoding utf8 } else { $sBlock = $sdb[$x] | Where-Object {$_.Ordinal -eq $ordinal} $sBlock.SdbEntryGuid | foreach-Object { $Output.Add($_) | Out-Null } $sBlock | Out-File -FilePath $ResultFile -Append -Encoding utf8 } $x++ } Until ($x -gt $sdb.Count) if ($match -ne 2) { Add-Content -Path $ResultFile -Value "Matching Block Upgrade....NONE FOUND." } Add-Content -Path $ResultFile -Value "============" Add-Content -Path $ResultFile -Value "" Add-Content -Path $ResultFile -Value "==========" Add-Content -Path $ResultFile -Value "All SDB Entries For: $($path)" Add-Content -Path $ResultFile -Value "==========" for ($a = 0; $a -lt $sdb.Count; $a++) { Add-Content -Path $ResultFile -Value "Entry $($a) : " | Out-Null $sdb[$a] | Format-List | Out-String | Out-File -FilePath $ResultFile -Append -Encoding utf8 } Add-Content -Path $ResultFile -Value "============" Add-Content -Path $ResultFile -Value "" Write-Host $Script:tick -ForegroundColor green } else { Write-Warning "File not found: $($File)" } } Write-Host " + Results output to $($ResultFile).. " -ForegroundColor Cyan -NoNewline Write-Host $Script:tick -ForegroundColor green return $Output | Select-Object -Unique } catch { Write-Warning $_ } } |