Ausdruck der Website http://mpns.de
Gedruckte Seite: http://mpns.de/artikelanzeige-it-faq/TPM2.0_Updatesperre_umgehen.html

Kann man die TPM 2.0- Updatesperre bei Windows 11 umgehen?

Ab Februar 2022 könnte der Fehler "0x80888002" während des Windows- Updates darin begründet sein, das man ein Windows 11 auf einem System ohne TPM 2.0 betreibt, also unter Nutzung der ebenfalls in dieser FAQ beschriebenen Wege installiert hat.

Tritt dieser Fehler auf, so kann ein Script hier eventuell Abhilfe schaffen, so dass auch ohne TPM 2.0 die entsprechenden Updates installiert werden können.

Hierzu ist zuerst das im folgenden dargestellte Script in eine geöffnete PowerShell-Konsole einzufügen und darin auszuführen:

@(set "0=%~f0"^)#) & powershell -nop -c iex([io.file]::ReadAllText($env:0)) & exit/b
#:: double-click to run or just copy-paste into powershell - it's a standalone hybrid script

#:: v7 dynamically skips the anti-consumer windows 11 setup checks via /Product Server trick  
#:: it is most reliable, and only has a 'Windows Server' label cosmetic-ish difference
#:: works with:
#:: 11 setup via Windows Update (after using OfflineInsiderEnroll by whatever127 and abbodi1406)
#:: 11 setup via mounted iso / usb (use the Quick.. script for skipping 11 setup checks at boot)

$_Paste_in_Powershell = { $Code = @'
 $Nfo = 'Skip TPM Check on Dynamic Update v7, AveYo 2021'
 $Arg = (([environment]::get_CommandLine()-split'-­% ')[1]-split'.exe[\p{P}]? ')[1]
 foreach ($x in 'Product','DynamicUpdate','Telemetry') {$Arg = $Arg -replace $('\p{P}?/'+ $x +'\p{P}? \p{P}?[A-Z]+\p{P}? '),' '}
 $Cli = ' /DynamicUpdate Disable /Telemetry Disable ' + $Arg; $Srv = ' /Product Server' + $Cli
 $Dir = join-path $([Environment]::SystemDirectory[0..2]-join'') '$WINDOWS.~BT\Sources\'
 $Cfg = join-path $Dir 'EI.cfg'; $EI = '[Channel]' +[char]13+[char]10+ '_Default' +[char]13+[char]10
 $Exe = join-path $Dir 'SetupHost.exe'; $Inf = get-item -force -lit $Exe; [int]$Ver = $Inf.VersionInfo.FileBuildPart
 if ($Ver -ge 22000) {$Run = $Exe + $Srv} else {$Run = $Exe + $Cli}
 if ($Ver -ge 22000 -and !(test-path $Cfg)) {[io.file]::WriteAllText($Cfg, $EI)}

 $D=@(); $T=@(); $A=@(); $M=[AppDomain]::CurrentDomain.DefineDynamicAssembly(1,1).DefineDynamicModule(1) 
 foreach ($x in 0..2) {$D+=$M.DefineType('AveYo_'+$x,1179913,[ValueType])}; foreach ($x in 1..2) {$D+=$D[$x].MakeByRefType()}
 $S=[string]; $I=[int32]; $U=[uintptr]; $y=0; $z=0;  foreach ($x in $U,$U,$I,$I) {$9=$D[2].DefineField('f'+$y++,$x,6)}
 foreach ($x in $I,$S,$S,$S,$I,$I,$I,$I,$I,$I,$I,$I,[int16],[int16],$U,$U,$U,$U) {$9=$D[1].DefineField('f'+$z++,$x,6)}
 $9=$D[0].DefinePInvokeMethod('CreateProcess','kernel32',8214,1,[void],($S,$S,$I,$I,[bool],$I,$I,$S,$D[3],$D[4]),1,4)
 $9=$D[0].DefinePInvokeMethod('DebugActiveProcessStop','kernel32',8214,1,[void],($I),1,4)
 foreach ($x in 0..2) {$T+=$D[$x].CreateType()}; foreach ($x in 1..2) {$A+=[Activator]::CreateInstance($T[$x])}
 $R=$null, $Run, $null, $null, $false, 0x02000011, $null, $null, $A[0], $A[1] 
 $T[0].GetMethod('CreateProcess').invoke(0, $R); $T[0].GetMethod('DebugActiveProcessStop').invoke(0, $R[9].f2)
 $W=get-process -pid $R[9].f2 -ea 0; for (;;) {sleep 1; if (0-eq $R[9].f2 -or $null-eq $W -or $W.HasExited) {return} }
'@ -replace '\r?\n|\r', '; ' <# lines 20-29 are needed for escaping ifeo, remain calm ;) #>  

 $IFEO = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\SetupHost.exe'
 $Prog = join-path $([Environment]::SystemDirectory[0..2] -join '') '$WINDOWS.~BT\Sources\SetupHost.exe'
 $Skip = "powershell -win 1 -nop -c iex (get-itemproperty '$IFEO\0' 'Code' -ea 0).Code; write-host --%"
 if (test-path "$IFEO\0") {
   remove-item $IFEO -rec -force -ea 0 >''
   write-host -fore 0xf -back 0xd "`n Skip TPM Check on Dynamic Update v7 [REMOVED] run again to install " 
 } else {                              
   new-item "$IFEO\0" -force -ea 0 >'' 
   set-itemproperty "$IFEO\0" 'Debugger' $Skip -force -ea 0; set-itemproperty "$IFEO\0" 'Code' $Code -force -ea 0
   set-itemproperty "$IFEO\0" 'FilterFullPath' $Prog -force -ea 0; set-itemproperty $IFEO 'UseFilter' 1 -type dword -force -ea 0
   write-host -fore 0xf -back 0x2 "`n Skip TPM Check on Dynamic Update v7 [INSTALLED] run again to remove "
 } 
 remove-item $($IFEO -replace 'SetupHost', 'vdsldr') -rec -force -ea 0 >''; rmdir (split-path $Prog) -rec -force -ea 0 >''
 $N = 'Skip TPM Check on Dynamic Update' <# also remove wmi-based v1 if somehow still installed, not just vdsldr-based v2 - v5 #>
 $U = 'root\subscription'; $C = gwmi -Class CommandLineEventConsumer -Namespace $U -Filter "Name='$N'" -ea 0 
 $B = gwmi -Class __FilterToConsumerBinding -Namespace $U -Filter "Filter = ""__eventfilter.name='$N'""" -ea 0
 $F = gwmi -Class __EventFilter -NameSpace $U -Filter "Name='$N'" -ea 0; $B,$C,$F |% {$_|rwmi -ea 0}; timeout /t 5
} ; start -verb runas powershell -args "-nop -c & {`n`n$($_Paste_in_Powershell-replace'"','\"')}"
$_Press_Enter
#::

Die Erfolgreiche Abarbeitung erkennt man an einem grünen Balken mit dem Text "Skip TPM Check on Dynamic Update v7 (INSTALLED) run again to remove". Entsprechend dieser Meldung kann dieses Script im übrigen genau so erneut ausgeführt werden, um die entsprechende Anpassung, die dadurch durchgeführt wird, wieder rückgängig zu machen.

Nach Ausführung des Scripts sollte mit Klick auf Wiederholen im Windows-Update dieses dann auch durchgeführt werden.

Zuletzt aktualisiert am 11-02-2022 von Martin Pangert.

Zurück

Haftungsausschluss für FAQ- Artikel

Wir stellen die in dieser FAQ dargestellten Tips und Hinweise für jedermann öffentlich, unentgeltlich und ohne jegliche Gewährleistung zur Verfügung und weisen auf diesem Wege ausdrücklich darauf hin, das wir keinerlei Haftung für Schäden durch Anwendung dieser Informationen übernehmen! Die Anwendung der von uns über diese FAQ-Seiten angebotenen Hinweise obliegt der alleinigen Verantwortung der Nutzer dieser Information. Eine Inanspruchnahme unsererseits für Fehler kann ausschließlich bei vorsätzlicher Täuschung durch uns geschehen. Über den Vorsatz hinausgehende Sachmängelhaftung übernehmen wir dementsprechend in keiner Weise. Ebenso weisen wir darauf hin, das wir auch in keiner Weise Haftung für rechtliche Belange im Zusammenhang mit der Anwendung unserer Tips/Hinweise übernehmen. Hier ist der Anwender unserer Informationen selbst dafür verantwortlich, die rechtlichen Hintergründe zu klären und sich entsprechend Eigenverantwortlich zu verhalten.

Mit Anwendung der in unseren IT-FAQ- Artikeln bereitgestellten Informationen erklärt sich der jeweilige Nutzer direkt mit dieser Haftungseinschränkung bereit.

Weitere Artikel dieser FAQ

IT-Support der etwas anderen Art

Eine Regierung muß sparsam sein, weil das Geld, das sie erhält, aus dem Blut und Schweiß ihres Volkes stammt. Es ist gerecht, daß jeder einzelne dazu beiträgt, die Ausgaben des Staates tragen zu helfen. Aber es ist nicht gerecht, daß er die Hälfte seines jährlichen Einkommens mit dem Staate teilen muß.

(Friedrich II. der Große, Konig von Preußen, 24.1.1712-17.8.1786)

Druckdatum: 30-06-2022
Zuvor aufgerufene Seite: http://mpns.de
Bitte beachten Sie, das Inhalte dieses Ausdruckes Urheberrechtlich geschützt
sein können und somit unter Umständen in keiner Weise vervielfältigt werden dürfen!