Advertisement
Guest User

Untitled

a guest
Apr 1st, 2025
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Start-Transcript -Path "c:\Windows\temp\DeleteHPDrivers.log"
  2.  
  3. # https://stackoverflow.com/questions/66580801/pnputil-retrieve-each-driver-and-add-to-array-with-psobject
  4. function getFromDriverStore() {
  5.     $List = New-Object System.Collections.ArrayList
  6.     ((PNPUtil /Enum-Drivers |
  7.     Select-Object -Skip 2) |
  8.     Select-String -Pattern 'Published Name:' -Context 0,7) |
  9.     ForEach {
  10.         if($PSItem.Context.PostContext[4] -like "*Class Version:*"){
  11.             $ClassVersion = $PSItem.Context.PostContext[4] -replace '.*:\s+'
  12.             $DriverVersion = $PSItem.Context.PostContext[5] -replace '.*:\s+'
  13.             $SignerName = $PSItem.Context.PostContext[6] -replace '.*:\s+'
  14.         }else{
  15.             $ClassVersion = "N/A"
  16.             $DriverVersion = $PSItem.Context.PostContext[4] -replace '.*:\s+'
  17.             $SignerName = $PSItem.Context.PostContext[5] -replace '.*:\s+'
  18.         }
  19.  
  20.         # Split the value into date and version
  21.         $splitValues = $DriverVersion -split " "
  22.         $DriverDate = $splitValues[0]
  23.         $DriverVersionNumber = $splitValues[1]
  24.  
  25.         $y = New-Object PSCustomObject
  26.             $y | Add-Member -Membertype NoteProperty -Name PublishedName -value (($PSitem | Select-String -Pattern 'Published Name:' ) -replace '.*:\s+')
  27.             $y | Add-Member -Membertype NoteProperty -Name OriginalName -value (($PSItem.Context.PostContext[0]) -replace '.*:\s+')
  28.             $y | Add-Member -Membertype NoteProperty -Name ProviderName -value (($PSItem.Context.PostContext[1]) -replace '.*:\s+')
  29.             $y | Add-Member -Membertype NoteProperty -Name ClassName -value (($PSItem.Context.PostContext[2]) -replace '.*:\s+')
  30.             $y | Add-Member -Membertype NoteProperty -Name ClassGUID -value (($PSItem.Context.PostContext[3]) -replace '.*:\s+')
  31.             $y | Add-Member -Membertype NoteProperty -Name ClassVersion -value $ClassVersion
  32.             $y | Add-Member -Membertype NoteProperty -Name DriverVersionDate -value $DriverDate
  33.             $y | Add-Member -Membertype NoteProperty -Name DriverVersionNumber -value $DriverVersionNumber
  34.             $y | Add-Member -Membertype NoteProperty -Name SignerName -value $SignerName
  35.  
  36.             $z = $List.Add($y)
  37.     }
  38.     return $List
  39. }
  40.  
  41.  
  42. Write-Host "Before:"
  43. # Versjon 17171305019303231 == 7.3.0
  44. $drvs = Get-PrinterDriver | Where-Object { $_.Name -like 'HP Universal Printing*' -and $_.Name -notlike "HP Universal Printing PCL 5*" -and $_.DriverVersion -lt 17171305019303231 }
  45.  
  46. $List = getFromDriverStore
  47.  
  48. Write-Host "Print management:"
  49. $drvs | Select-Object Name | Out-Host
  50. $drvs | Remove-PrinterDriver -RemoveFromDriverStore
  51.  
  52. $drvs2 = $List | Where-Object { $_.ProviderName -eq "HP" -and [version]$_.DriverVersionNumber -lt [version]"61.310.1.25919" -and $_.OriginalName -like "*hpcu*" -and $_.OriginalName -ne "hpcu180t.inf" }        
  53. Write-Host "Windows Driver Store:"
  54. $drvs2 | Out-Host
  55. foreach ($drv in $drvs2) {
  56.     pnputil /delete-driver $drv.PublishedName /uninstall /force
  57. }
  58.  
  59. $reg = Get-ChildItem -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Drivers\Version-3" | Where-Object {
  60.     $_.Name -like "*HP Universal Printing*" -and
  61.     $_.Name -notlike "*HP Universal Printing PCL 5*" }
  62.  
  63. $regDelete = @()
  64. foreach ($entry in $reg) {
  65.     $driverVersion = (Get-ItemProperty -Path $entry.PSPath).DriverVersion
  66.     if ([version]$driverVersion -lt [version]"61.310.1.25919") {
  67.         $regDelete += $entry
  68.     }
  69. }
  70.    
  71. if ($regDelete -ne $null) {
  72.     Write-Host "Manual delete from registry..." -Foregroundcolor yellow
  73.     $regDelete | Out-Host
  74.  
  75.     $regDelete | Remove-Item -Force
  76.  
  77.     Restart-Service -Name "Spooler" -Force
  78.  
  79.     # Versjon 17171305019303231 == 7.3.0
  80.     Get-PrinterDriver | Where-Object { $_.Name -like 'HP Universal Printing*' -and $_.Name -notlike "HP Universal Printing PCL 5*" -and $_.DriverVersion -lt 17171305019303231 } | Remove-PrinterDriver -RemoveFromDriverStore
  81.              
  82.     $List = getFromDriverStore
  83.  
  84.     $drvs = $List | Where-Object { $_.ProviderName -eq "HP" -and [version]$_.DriverVersionNumber -lt [version]"61.310.1.25919" -and $_.OriginalName -like "*hpcu*" -and $_.OriginalName -ne "hpcu180t.inf" }
  85.     foreach ($drv in $drvs) {
  86.         pnputil /delete-driver $drv.PublishedName /uninstall /force
  87.     }
  88. }
  89.  
  90. Write-Host " "
  91. Write-Host "After:"
  92. # Versjon 17171305019303231 == 7.3.0
  93. $drvs = Get-PrinterDriver | Where-Object { $_.Name -like 'HP Universal Printing*' -and $_.Name -notlike "HP Universal Printing PCL 5*" -and $_.DriverVersion -lt 17171305019303231 }
  94. Write-Host "Print management:"
  95. $drvs | Select-Object Name | Out-Host
  96. $List = getFromDriverStore
  97.  
  98. $drvs = $List | Where-Object { $_.ProviderName -eq "HP" -and [version]$_.DriverVersionNumber -lt [version]"61.310.1.25919" -and $_.OriginalName -like "*hpcu*" -and $_.OriginalName -ne "hpcu180t.inf" }
  99. Write-Host "Windows Driver Store: "
  100. $drvs | Out-Host
  101.  
  102. # Stop logging
  103. Stop-Transcript
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement