Lös dina Windows 10-utskriftsproblem med detta PowerShell-skript

0 Shares

Som det är, de som har påverkats av bug-riddled uppdateringar befinner sig dock utomordentligt frustrerade och förlorar förtroende för Microsofts förmåga att leverera tillförlitlig programvara. Med så många uppdateringar, korrigeringar, buggfixar och lösningar som har släppts under de senaste veckorna har det varit svårt att hålla koll på problemen. Det här PowerShell-skriptet ska sorteras saker en gång för alla.

Teknikbloggen Günter Born har delat ett manus skrivet av en läsare av sin webbplats. Andy har skrivit ett skript som helt tar bort alla problematiska uppdateringar, och bör eliminera problem med blå skärmar och problem med utskrift som introducerades med den här månadens uppdateringar.

Den fullständiga texten för manuset finns tillgänglig nedan för dig att analysera. Om du vill använda det, markera och kopiera skriptet, klistra in det i Anteckningar och spara det med ett .ps1-tillägg.

; @echo off & setlocal & set localfname =% ~ f0

; Findstr -rbv; % 0 | powershell -c –

; goto: BatchExit

# tar bort Windows-uppdateringarna från 20/2021 som orsakar skrivarproblem

# från och med 03/23/2021 ‘kring middagstid’, se även

# * https: //www.borncity.com/blog/2021/03/22/windows-10-mrz-2021-update-erneut-freigegeben/

#

# detta batch + powershell-skript tar bort olika uppdateringar baserat på

# namn / KB-nummer och döljer dem permanent,

# skriptet behöver lokala administratörsrättigheter, det ber om dem

#

# om skriptet har körts en gång och därigenom hittades för att ta bort uppdateringar

# uppdateringar som ska tas bort, var noga med att starta om datorn och

# kör skriptet igen direkt efter omstart, först då

# så kommer de senaste uppdateringarna som ska tas bort verkligen

# försvinna.

#

# om också efter upprepat samtal om och om igen (samma) uppdateringar

# avinstallerad och sedan ingripa manuellt, Windows Update

# Cache raderas lokalt (Script 02WindowsUpdatesLöschen.cmd), uppdateringarna

# avinstallera uppdateringarna manuellt och (om möjligt)

# dölj manuellt (med wushowhide.diagcab)

#

# olika delar av manuset är bara förvirrade och har varit

# skamlöst kopieras från

# * ttps: //www.powershellmagazine.com/2014/03/19/how-to-view-and-restore-hidden-windows-updates-with-powershell/

# de problematiska uppdateringarna / KB-numren (_ utan_etiketten “KB”) som ska tas bort och döljas

[email protected](“5000802”, “5000808”, “5000822”, “5000809”, “5000812”, “5000803”, “5000807”, “5001567”, “5001566”, “5001568”, “5001565”)

Funktion Main {

[Cmdletbinding()]

Param ()

Bearbeta {

# teste ob das Skript als Administrator ausgefuehrt wurde, wenn nicht dann versuche Neustart mit erhoehten Rechten

CheckAndRaiseElevation

# test om skriptet kördes som administratör, om inte, försök sedan starta om med förhöjda behörigheter

If (RemoveWrongHotfixes) {

Skrivvärd “Minst en Windows-uppdatering hittades som avinstallerades.”

Skrivvärd “Vänta, samla information om väntande uppdateringar …”

Get-WindowsUpdate | Var {$ _. Titel -match $ HotFixesToRemove} | Set-WindowsHiddenUpdate -Hide $ True -Verbose

Skrivvärd “De tidigare avinstallerade Windows-uppdateringarna har gjorts så långt som möjligt.”

Skriv värd “Starta om datorn omedelbart och kör programmet direkt efter start”

Skriv-värd “kör igen.”

Skriv värd “n fall av en ändlös slinga (om detta redan har gjorts flera gånger och detta”

Skriv-värdmeddelandet visas om och om igen och avinstallera och dölj.

Skrivvärd “utför manuellt.”

waitkey “Fortsätt med valfri tangent och starta sedan om manuellt [x]”| Out-Null

} Annat {

# ingen av problemuppdateringarna kunde avinstalleras längre, försök hitta dem

# dölj dem permanent med test-och-fel-metoden

Skriv värd “Vänta, samla information om väntande uppdateringar …”

Get-WindowsUpdate | Var {$ _. Titel -match $ HotFixesToRemove} | Set-WindowsHiddenUpdate -Hide $ True -Verbose

Skrivvärd “De tidigare avinstallerade Windows-uppdateringarna har gjorts så långt som möjligt.”

WaitKey “Programmet kan avslutas, fortsätt med valfri tangent [x]”| Out-Null

}

}

}

Funktion WaitKey ($ ___ text) {

Skriv värd $ ___ text

$ ___ x = $ host.UI.RawUI.ReadKey (“NoEcho, IncludeKeyDown”) | Out-Null

Returnera $ ___ x

}

Function CheckAndRaiseElevation {

[Cmdletbinding()]

Param ()

Bearbeta {

# Testa om startat med tillräckliga rättigheter

$ IsElevated = ([System.Security.Principal.WindowsPrincipal][System.Security.Principal.WindowsIdentity]:: GetCurrent ()). IsInRole ([System.Security.Principal.WindowsBuiltInRole]::Administratör)

If (-not $ IsElevated) {

Skrivvärd “Programmet har för få behörigheter: ökade behörigheter krävs.”

Prova {

# försök att köra batch-skriptet igen med lokala administratörsrättigheter

Start-process -FilePath $ env: localfname -Verb RunAs -ErrorAction SilentlyContinue

}

Fånga {

Skrivvärd “Användaren har vägrat att öka behörigheterna – avbryt!”

WaitKey “Tryck på valfri knapp för att avsluta [x]”| Out-Null

}

Utgång

}

# Skrivvärd “Programmet körs för närvarande med administratörsbehörighet.”

# ändra till den ursprungliga programvägen om möjligt, även UNC och mappade nätverksenheter möjliga

Set-Location $ (Split-Path -Parent $ env: localfname)

}

}

# entfernt tar bort om möjligt alla problematiska snabbkorrigeringar som anges som parametrar

Funktion RemoveWrongHotfixes {

[Cmdletbinding()]

Param ()

Bearbeta {

$ ReturnVal = $ Falskt

$ InstalledHotFixes = $ (Get-WmiObject -Class win32_quickfixengineering) .HotFixID

Foreach ($ InstalledHotFix i $ InstalledHotFixes) {

Foreach ($ HotFixToRemove i $ HotFixesToRemove) {

If ($ InstalledHotFix -match “$ HotFixToRemove”) {

Skrivvärd “Das Update $ InstalledHotFix wird entfernt”

Start-Process -FilePath “wusa.exe” -Argumentlist “/ Avinstallera / KB: $ HotFixToRemove / tyst / norestart”

Skrivvärd “Uppdateringen $ InstalledHotFix döljs permanent”

Get-WindowsUpdate | Var {$ _. Titel -match “$ HotFixToRemove”} | Set-WindowsHiddenUpdate -Hide $ true -Verbose

$ ReturnVal = $ true

}

}

}

Returnera $ ReturnVal

}

}

Funktion Get-WindowsUpdate {

[Cmdletbinding()]

Param ()

Bearbeta {

Prova {

Skriv-Verbose “Fråga alla Windows-uppdateringar”

$ Session = New-Object -ComObject Microsoft.Update.Session

$ Searcher = $ Session.CreateUpdateSearcher ()

$ Criteria = “IsInstalled = 0 och DeploymentAction = ‘Installation’ eller IsPresent = 1 och DeploymentAction = ‘Uninstallation’ eller IsInstalled = 1 och DeploymentAction = ‘Installation’ och RebootRequired = 1 eller IsInstalled = 0 och DeploymentAction = ‘Uninstallation’ och RebootRequired = 1 “

$ SearchResult = $ Searcher.Search ($ Criteria)

$ SearchResult.Updates

} Fånga {

Skrivvarning -Meddelande “Windows-uppdateringsfrågan misslyckades, fel $ ($ _. Exception.Message)”

}

}

}

# Bonus

Funktionsshow-WindowsUpdate {

Get-WindowsUpdate |

Välj titel, är dold,

@ {l = “Storlek (MB)”; e = {‘{0: N2}’ -f ($ _. MaxDownloadSize / 1MB)}},

@ {l = “Publicerad”; e = {$ _. LastDeploymentChangeTime}} |

Sortera – Fastighet publicerad

}

#

# Visa-WindowsUpdate

# Visa-WindowsUpdate | Där {$ _. IsHidden} | Out-GridView

Funktionsuppsättning-WindowsHiddenUpdate {

[Cmdletbinding()]

Param (

[Parameter(ValueFromPipeline=$true,Mandatory=$true)]

[System.__ComObject[]]$ Uppdatering,

[Parameter(Mandatory=$true)]

[boolean]$ Dölj

)

Bearbeta {

$ Uppdatering | ForEach-Object -Process {

om ((($ _. pstypenames)[0] -eq ‘System .__ ComObject # {c1c2f21a-d2f4-4902-b5c6-8a081c19a890}’) -eller

(($ _. pstypenames)[0] -eq ‘System .__ ComObject # {70cf5c82-8642-42bb-9dbc-0cfd263c6c4f}’) -eller

(($ _. pstypenames)[0] -eq ‘System .__ ComObject # {918efd1e-b5d8-4c90-8540-aeb9bdc56f9d}’)) {

Prova {

$ _. isHidden = $ Dölj

Skriv-Verbose -Meddelande “Dölj uppdatering $ ($ _. Titel)”

} fånga {

Skrivvarning -Meddelande “Döljande av Windows Update misslyckades, fel $ ($ _. Exception.Message)”

}

} annat {

Skrivvarning -Meddelande “Ignorera passerat objekt”

}

}

}

}

# Exempel: dölj alla öppna uppdateringar

# Get-WindowsUpdate | Set-WindowsHiddenUpdate -Hide: $ true -Verbose

# Exempel: dölj alla öppna definitionsuppdateringar

# Get-WindowsUpdate | Var {$ _. Titel -match ‘Definitionsupdate’} | Set-WindowsHiddenUpdate -Hide: $ false

# Exempel: dölj alla öppna säkerhetsuppdateringar

# Get-WindowsUpdate | Var {$ _. Titel -match ‘Sicherheitsupdate’} | Set-WindowsHiddenUpdate -Hide: $ false

# Exempel: dölj uppdateringar för webbläsarval

# Get-WindowsUpdate | Där {$ _. Titel -match ‘Microsoft Browser Choice Screen Update’} | Set-WindowsHiddenUpdate -Hide $ true -Verbose

huvud

;: BatchExit

; REM Obs! Detta slut på batch-skript körs omedelbart, det väntar inte på slutet av powershell!

; goto: eof

# Datum: 22.03.2021

#

# Felen är / fixades troligtvis äntligen med följande uppdateringar 18.03 respektive 22.03.2021

# KB5001642 för Windows Server 2008 SP2 x64 (ESU)

# http://download.windowsupdate.com/d/msdownload/update/software/updt/2021/03/windows6.0-kb5001642-x64_4ae1b3c5cebedcd27fe50add6a34e70a00d19b76.msu

# KB5001639 för Windows 7 SP1 x86 (ESU)

# http://download.windowsupdate.com/d/msdownload/update/software/updt/2021/03/windows6.1-kb5001639-x86_f7571200399e9c1099c37cc78c5b0a5481259989.msu

# KB5001639 för Windows 7 SP1 x64 (ESU)

# http://download.windowsupdate.com/d/msdownload/update/software/updt/2021/03/windows6.1-kb5001639-x64_de64f5cb314e3eac59bb3c4371c9ba802adf0f22.msu

# KB5001639 för Windows Server 2008 R2 (ESU)

# http://download.windowsupdate.com/d/msdownload/update/software/updt/2021/03/windows6.1-kb5001639-x64_de64f5cb314e3eac59bb3c4371c9ba802adf0f22.msu

# KB5001641 för Windows Server 2012 x64

# http://download.windowsupdate.com/d/msdownload/update/software/updt/2021/03/windows8-rt-kb5001641-x64_ec0dc33ff8d0d0381eb3fe9595c8a96ccebf9e61.msu

# KB5001640 för Windows 8.1 x86

# http://download.windowsupdate.com/d/msdownload/update/software/updt/2021/03/windows8.1-kb5001640-x86_149741dd2206faf42303dd7a6800567b681367be.msu

# KB5001640 för Windows 8.1 x64

# http://download.windowsupdate.com/d/msdownload/update/software/updt/2021/03/windows8.1-kb5001640-x64_7aa82103f5e37a9d3c2ce2b608c903ed0855ac3b.msu

# KB5001640 för Windows Server 2012 R2

# http://download.windowsupdate.com/d/msdownload/update/software/updt/2021/03/windows8.1-kb5001640-x64_7aa82103f5e37a9d3c2ce2b608c903ed0855ac3b.msu

# KB5001631 för Windows 10 1507 och Server 2016

# KB5001634 för Windows 10 1803

# KB5001638 för Windows 10 1809 och Server 2019

# KB5001648 för Windows 10 1909

# KB5001649 för Windows 10 2004 och 20H2

#

# buggy hittills var uppdateringarna KB5000802, KB5000808, KB5000822, KB5000809, KB5000812, KB5000803, KB5000807, KB5001567, KB5001566, KB5001568, KB5001565

0 Shares