News Upgrade dringend empfohlen: In einem Monat endet der Support für Windows 10

gustlegga schrieb:
Linux ist bei mir kein Allheilmittel, da meine beruflich genutzte mehrere tausend Euro teure CAD Software darauf auch in WINE nicht läuft.
Mal ehrlich, aber gibts bei euch keine Trennung zwischen Privat/Firmen Geräten? Ich lese hier jetzt schon vermehrt, dass ein Wechsel bzw. betrieb von Linux nicht möglich ist, weil Software für Arbeit/Büro nicht geht.
Normal sollte es für so etwas Geräte von der Firma geben, mit entsprechender IT, die sich um das OS kümmert und da ist es egal, ob es macOS, Linux oder Windows ist, weil diese Geräte beruflich genutzt werden.
Hier sollte es aber eher um Privat gehen, mit Windows Home OS und Geräten.
Nichts für ungut, aber da muss man sich echt nicht wundern, das DE in Sachen IT zurückhängt, wenn jeder Firmen Software & Co. auf dem privaten Rechner zu Hause nutzt und Daten damit verarbeitet.
 
  • Gefällt mir
Reaktionen: Ja_Ge und Alexander2
Metalveteran schrieb:
Sorry. Seit 14 Jahren dabei, fast 2000 Beiträge, aber immernoch nix gelernt?

Mein Troll-Detektor schlägt an.

(Solltest Du Dich aber gerade darüber lustig machen, dass nach über 2 Jahren "Alamr-Stimmung" noch nix passiert ist.... touche) <---- Da gehört ein Apostroph hin. So eine von den kleinen "Unwichtigkeiten" die mancher Mensch unter Linux durchaus haben kann
Sonst geht es dir aber gut?
Es waren völlig normale Fragen, die gerade für Viele relevant, aber nicht ganz klar sind, da es je nach genauer Version, Art des Keys, usw. unterschiedlich sein kann und mögliche Methoden weggefallen und neue aufgekommen sind.
 
  • Gefällt mir
Reaktionen: zhompster und alphatau
@jackii Ich wiederhole: das Thema ist seit ZWEI EINHALB JAHREN BEKANNT!

Seit mindestens 5 Jahren kommen Fragen auf "Geht das noch mit meinem Key?"

An den Antworten ändert sich halt nichts, es sei denn, DIESER EINE USER (den ich gerne kennenlernen möchte) hat das Rezept gefunden, was auf ALLE zutrifft. Ausnahmslos. Für jeden Win-PC auf der Welt gültig.

P.S.: Humor, anyone?
 
  • Gefällt mir
Reaktionen: Ja_Ge
Der_Rolf schrieb:
Komischerweise lese ich hier nur im Zusammenhang mit Linux von Flickschusterei
und Frickelei.
Wenn ich hier aber sehe was alles "optimiert" wird um Windows weiter oder überhaupt
verwenden zu können...
Und um die Funktion von Windows 10 sicher zu stellen wird auch einiger Aufwand betrieben, z.B. zusätzliche Antimalware-Software und Software-Firewalls installiert.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Der_Rolf
DocAimless schrieb:
Mal ehrlich, aber gibts bei euch keine Trennung zwischen Privat/Firmen Geräten?
Wir haben nur einen kleinen Handwerksfamilienbetrieb.
Meine Mutter hat einen alten Desktop für Buchhaltung und Schreibkram/Internet, meine Vater einen Firmenschleppdeppen, und Palette CAD läuft seit gut 15 Jahren in unterschiedlichen Versionen schon immer auf meinem Rechner, da das einfach das stärkste System im Haus ist, 2 Monitore dranhängen und eh nur ich mit dem Programm arbeite.
Eine eigene Workstation dafür zahlt sich bei einem 5 Personenbetrieb da nicht so wirklich aus. ;)
Ich hab halt 2 Benutzeraccounts, weil ich mir Win10 für beruflich und privat jeweils etwas unterschiedlich eingerichtet habe.
 
@gustlegga
Als letzte Möglichkeit manuelles Erwerben einer Consumer-ESU-Lizenz.
Dieser Schritt ist mir immer noch nicht ganz klar wie das script da vorgehen will?
Ich würd das gerne manuell ohne Script versuchen!
 
gustlegga schrieb:
Eine eigene Workstation dafür zahlt sich bei einem 5 Personenbetrieb da nicht so wirklich aus.
Sicher? Wir sind ein kleiner Handwerksbetrieb mit aktuell 4 Personen, und für CAD habe ich als Technischer Zeichner einen schnellen Rechner mit Win 11 Pro und Linux Mint am laufen.
 
  • Gefällt mir
Reaktionen: Ja_Ge und DocAimless
@samuelclemens
Du kannst selber reinschauen, der Sourcecode liegt ja auch auf Github.
Ist ein Powershell Script das über eine BAT aufgerufen wird..
Ich pack die die "Readme" mal in den Spoiler.

ESU2.jpg


Consumer ESU Enrollment
=======================

Windows Powershell script to enroll in Windows 10 Consumer Extended Security Updates (ESU) program via the free Backup option, with or without Microsoft Account.

Remark:
The free EnrollUsingBackupV1 function does not actually need enabled Backup or online account.

Requirements
------------

  • Consumer ESU Prerequisites.
  • Cumulative Update 2025-07 KB5061087 (19045.6036) or later.
  • Enabled Consumer ESU feature (see below).
  • Administrative account.
  • Internet connectivity.
  • User Region is not geo-blocked (Russia, Belarus, Iran, Cuba, North Korea, Syria, Sudan, Lebanon, Venezuela).

______________________________

Design
------

By default, the script will run in the following order, if a step failed, the next is executed:

  • Enroll using Microsoft account currently logged-in as Windows user.
  • Enroll using Microsoft account currently logged-in with Microsoft Store.
  • Enroll using current Local account.
  • Acquire Consumer ESU license manually as last resort.

Disclaimer:
The "Consumer ESU license" without enrollment is not yet verified to work for installing ESU updates.

______________________________

Usage
-----

  • Click on Code > Download ZIP button at the top to download.
  • Extract all files from the ZIP file.
  • Run Consumer_ESU_Enrollment_run.cmd as administrator.
  • If the script enabled the feature and asked to close the session,
then close the command prompt window, and then run Consumer_ESU_Enrollment_run.cmd as administrator one more time.

Advanced Usage
--------------

Command Prompt:
  • Click on Code > Download ZIP button at the top to download.
  • Extract all files from the ZIP file.
  • Run Command Prompt as administrator in the same folder where you located the extracted files, or change location to it using cd /d command.
  • Execute Consumer_ESU_Enrollment_run.cmd with the wanted optional parameters
  • Examples:
Consumer_ESU_Enrollment_run.cmd -Store -Proceed
Consumer_ESU_Enrollment_run.cmd -Local
Consumer_ESU_Enrollment_run.cmd -License
Consumer_ESU_Enrollment_run.cmd -Remove
- If the script enabled the feature and asked to close the session,
then close the whole Command Prompt window, and repeat the same steps above.

Windows Powershell:
  • Click on Code > Download ZIP button at the top to download.
  • Extract all files from the ZIP file.
  • Run Windows Powershell as administrator in the same folder where you located the extracted files, or change location to it using cd command.
  • Temporary allow running unsigned scripts:
Set-ExecutionPolicy Bypass -Scope Process -Force
  • Execute Consumer_ESU_Enrollment.ps1 (with optional parameters if wanted)
  • Examples:
.\Consumer_ESU_Enrollment.ps1
.\Consumer_ESU_Enrollment.ps1 -Store -Proceed
.\Consumer_ESU_Enrollment.ps1 -Local
.\Consumer_ESU_Enrollment.ps1 -License
.\Consumer_ESU_Enrollment.ps1 -Remove
- If the script enabled the feature and asked to close the session,
then close the whole Windows Powershell window, and repeat the same steps above.

Optional Parameters
-------------------

|Switch |Effect|
|----------|------|
| -Online | Only enroll using Microsoft user account token, exit if failed |
| -Store | Only enroll using Microsoft store account token, exit if failed |
| -Local | Only enroll using Local user account token, exit if failed |
| -License | Force acquire Consumer ESU License regardless or without enrollment |
| -Remove | Remove Consumer ESU License if exists |
| = | =
| -Proceed | Force running enrollment, even if Eligibility status is already enrolled |

  • You must only specify one switch of the first five switches.
  • Only -Proceed switch can be combined with the three enroll switches to re-enroll with a different token.

______________________________

Consumer ESU Feature
--------------------

If the feature is not broadly enabled yet, the script will try to enable it
and if succeeded, then you must close Windows Powershell session and run the script again for the changes to take effect.

<details><summary>Manual Reference</summary>

How to enable it manually yourself, this require a reboot to take effect:

  • Run Command Prompt as administrator.
  • Execute the following command:
Code:
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Policies\Microsoft\FeatureManagement\Overrides" /v 4011992206 /t REG_DWORD /d 2 /f
  • Run Windows Powershell as administrator.
  • Copy and paste the following commands together as-is, wait for "Task Completed" message:
Code:
$TN = "ReconcileFeatures"; $TP = "\Microsoft\Windows\Flighting\FeatureConfig\"; $null = Enable-ScheduledTask $TN $TP
Start-ScheduledTask $TN $TP; while ((Get-ScheduledTask $TN $TP).State.value__ -eq 4) {start-sleep -sec 1}; "Task Completed"
#
$TN = "UsageDataFlushing"; $TP = "\Microsoft\Windows\Flighting\FeatureConfig\"; $null = Enable-ScheduledTask $TN $TP
Start-ScheduledTask $TN $TP; while ((Get-ScheduledTask $TN $TP).State.value__ -eq 4) {start-sleep -sec 1}; "Task Completed"
#
  • Restart the system.
  • .
  • Run Command Prompt as administrator.
  • Execute the following commands:
Code:
cmd /c ClipESUConsumer.exe -evaluateEligibility
reg.exe query "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\ConsumerESU"
- Verify that the last command shows ESUEligibility value as non-zero.
if so, proceed to run the powershell script as explained above.
- If the value is zero 0x0 or does not exist, then the operation is failed, and you have to wait for official broad availability.
</details>

______________________________

Bypass Region Block
-------------------

<details><summary>Click to expand</summary>

- Temporary change your region to non-blocked country:

Table of Geographical Locations:
https://learn.microsoft.com/en-us/windows/win32/intl/table-of-geographical-locations

manually:
Settings > Time & Language > Region > Country or region

or run Windows Powershell and execute:
Set-WinHomeLocation -GeoId 244

- Run the script to enroll as explained above.

- Verify that "ESU Eligibility state" is DeviceEnrolled / SUCCESS.

- Run Command Prompt as administrator, and execute the following to disable ESU evaluation scheduled task:
SCHTASKS /Change /DISABLE /TN "\Microsoft\Windows\Clip\ClipESUConsumer"

- Restore your original region location, manually or using powershell as before.
</details>
 
  • Gefällt mir
Reaktionen: the_IT_Guy
Huch, habe gerade festgestellt, das mein Win 11 ab dem 10 November keine Updates mehr erhält. 🫨 Und nu, ist doch Win 11?:king:

Microsoft gibt 60-Tage-Warnung: Support für Windows 11 Version 23H2 endet im November
 
Zuletzt bearbeitet:
Wenn man den Thread hier mitliest, müsste man meinen der Desktop-Marktanteil von Linux liegt mittlerweile bei über 40 Prozent...
 
  • Gefällt mir
Reaktionen: areiland, feris, Tr8or und 2 andere
@gustlegga Bis ich dahinter gestiegen bin anhand dieser Readme haben wir schon Win 12 am Start! 😓

 
  • Gefällt mir
Reaktionen: gustlegga
TPD-Andy schrieb:
Wenn du/ihr da so macht ist ja ok.
Ich will mich einfach nicht stundenlang ins Büro setzen, da ich da oft keine Ruhe habe.
Ich hab in meiner Wohnung ein eigenes kleines Büro, wo ich halt auch daddle und jetzt ebenfalls sitze,
und am Wochenende oder auch Abends wenn ich von der Baustelle zuhause bin mal an einem Kachelofenentwurf arbeiten kann. Für mich passt das so einfach besser.
Früher als ich die Pläne noch mit 2 Fluchtpunkten in 3D manuell gezeichnet hab bin ich natürlich auch am großen Architektentisch im Firmenbüro gesessen.
Ergänzung ()

samuelclemens schrieb:
@gustlegga Bis ich dahinter gestiegen bin anhand dieser Readme haben wir schon Win 12 am Start! 😓

Dann willst du wahrscheinlich schon garnicht ins Powershell Script schauen....lol
Das ist noch umfangreicher, weils auch verschiedene Möglichkeiten der Aktivierung gibt.
Du kannst die einzelnen Methoder auch manuell über Parameter für die BAT starten wenn eine spezifisches Aktivierungsmethode verwenden willst.

- Examples:
Consumer_ESU_Enrollment_run.cmd -Store -Proceed
Consumer_ESU_Enrollment_run.cmd -Local
Consumer_ESU_Enrollment_run.cmd -License
Consumer_ESU_Enrollment_run.cmd -Remove

By default, the script will run in the following order, if a step failed, the next is executed:

  • Enroll using Microsoft account currently logged-in as Windows user.
  • Enroll using Microsoft account currently logged-in with Microsoft Store.
  • Enroll using current Local account.
  • Acquire Consumer ESU license manually as last resort.
@Echo off
set "_PSf=%~dp0Consumer_ESU_Enrollment.ps1"
setlocal EnableDelayedExpansion
set "_PSf=!_PSf:'=''!"
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command ^& "'!_PSf!' %*"

param (
[Parameter()]
[switch]
$Online,
[Parameter()]
[switch]
$Store,
[Parameter()]
[switch]
$Local,
[Parameter()]
[switch]
$License,
[Parameter()]
[switch]
$Remove,
[Parameter()]
[switch]
$Proceed
)

[bool]$bDefault = $true
[bool]$bMsAccountUser = $Online.IsPresent
[bool]$bMsAccountStore = $Store.IsPresent
[bool]$bLocalAccount = $Local.IsPresent
[bool]$bAcquireLicense = $License.IsPresent
[bool]$bRemoveLicense = $Remove.IsPresent
[bool]$bProceed = $Proceed.IsPresent
if ($bMsAccountUser) {
$bDefault = $false
$bMsAccountStore = $false
$bLocalAccount = $false
$bAcquireLicense = $false
}
if ($bMsAccountStore) {
$bDefault = $false
$bMsAccountUser = $false
$bLocalAccount = $false
$bAcquireLicense = $false
}
if ($bLocalAccount) {
$bDefault = $false
$bMsAccountUser = $false
$bMsAccountStore = $false
$bAcquireLicense = $false
}
if ($bAcquireLicense) {
$bDefault = $false
$bMsAccountUser = $false
$bMsAccountStore = $false
$bLocalAccount = $false
}
if ($bRemoveLicense) {
$bDefault = $false
$bMsAccountUser = $false
$bMsAccountStore = $false
$bLocalAccount = $false
$bAcquireLicense = $false
}

[bool]$cmdps = $MyInvocation.InvocationName -EQ "&"

function CONOUT($strObj)
{
Out-Host -Input $strObj
}

function ExitScript($ExitCode = 0)
{
if (!$psISE -And $cmdps) {
Read-Host "`r`nPress Enter to exit" | Out-Null
}
Exit $ExitCode
}

if ($ExecutionContext.SessionState.LanguageMode.value__ -NE 0) {
CONOUT "==== ERROR ====`r`n"
CONOUT "Windows PowerShell is not running in Full Language Mode."
ExitScript 1
}

if (-Not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
CONOUT "==== ERROR ====`r`n"
CONOUT "Windows PowerShell is not running as administrator."
ExitScript 1
}

$SysPath = "$env:SystemRoot\System32"
if (Test-Path "$env:SystemRoot\Sysnative\reg.exe") {
$SysPath = "$env:SystemRoot\Sysnative"
}

if (!(Test-Path "$SysPath\ConsumerESUMgr.dll")) {
CONOUT "==== ERROR ====`r`n"
CONOUT "ConsumerESUMgr.dll is not detected."
CONOUT "Make sure to install update 2025-07 KB5061087 (19045.6036) or later."
ExitScript 1
}

#region Globals
$eeStatus = @{
0 = "Unknown";
1 = "Ineligible";
2 = "Eligible";
3 = "DeviceEnrolled";
4 = "ReEnrollReq";
5 = "MSAEnrolled";
6 = "ConsumerESUInactive";
7 = "CommercialMigratedDevice";
8 = "LoginWithPrimaryAccountToEnroll";
9 = "LoginWithPrimaryAccountToCompletePreOrder";
10 = "ComingSoon";
}
$eeResult = @{
1 = "SUCCESS";
2 = "CONSUMER_ESU_PROGRAM_NOT_ACTIVE";
3 = "NON_CONSUMER_DEVICE";
4 = "COMMERCIAL_DEVICE";
5 = "NON_ADMIN";
6 = "CHILD_ACCOUNT";
7 = "REGION_IN_EMBARGOED_COUNTRY";
8 = "AZURE_DEVICE";
9 = "COMMERCIAL_MIGRATED_DEVICE";
10 = "LOGIN_WITH_PRIMARY_ACCOUNT_TO_COMPLETE_PREORDER";
12 = "KEY_BASED_ESU";
13 = "EEA_REGION_POLICY_ENABLED";
100 = "UNKNOWN_ERROR";
101 = "CONSUMER_ESU_PROGRAM_ACTIVE_CHECK_FAILED";
102 = "LICENSE_CHECK_FAILED";
103 = "CONSUMER_DEVICE_CHECK_FAILED";
104 = "COMMERCIAL_DEVICE_CHECK_FAILED";
105 = "ADMIN_CHECK_FAILED";
106 = "CHILD_ACCOUNT_CHECK_FAILED";
107 = "ENTITLEMENT_CHECK_FAILED";
108 = "ELIGIBILITY_EVALUATION_FAILED";
109 = "AZURE_DEVICE_CHECK_FAILED";
110 = "COMMERCIAL_MIGRATED_DEVICE_CHECK_FAILED";
111 = "EMBARGOED_REGION_CHECK_FAILED";
112 = "KEY_BASED_ESU_CHECK_FAILED";
}

$fKey10 = 'HKLM:\SYSTEM\CurrentControlSet\Policies\Microsoft\FeatureManagement\Overrides'
$fKey08 = 'HKLM:\SYSTEM\CurrentControlSet\Control\FeatureManagement\Overrides\8'
$TN = "ReconcileFeatures"; $TP = "\Microsoft\Windows\Flighting\FeatureConfig\"
$svc = 'DiagTrack'
$enablesvc = $false
try {$obj = Get-Service $svc -EA 1; $enablesvc = ($obj.StartType.value__ -eq 4)} catch {}
$featueESU = $false
$featueEEA = $false

$gKey = "HKCU:\Control Panel\International\Geo"
$rKey = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\DeviceRegion"
$GeoId = (Get-ItemProperty $gKey "Nation" -EA 0).Nation
$GeoCN = (Get-ItemProperty $gKey "Name" -EA 0).Name
if ($null -eq $GeoCN) {try {$GeoCN = [Windows.System.UserProfile.GlobalizationPreferences,Windows,ContentType=WindowsRuntime]::HomeGeographicRegion} catch {}}
$jPath = "$SysPath\IntegratedServicesRegionPolicySet.json"
$DMA_SSO = $false
if (Test-Path $jPath) {
$jData = Get-Content $jPath | ConvertFrom-Json
$jList = ($jData.policies | where {$_.guid.Contains("1d290cdb-499c-4d42-938a-9b8dceffe998")}).conditions.region.disabled
$DMA_SSO = $jList -contains $GeoCN
}

function NativeMethods
{
$t = [AppDomain]::CurrentDomain.DefineDynamicAssembly((Get-Random), 1).DefineDynamicModule((Get-Random), $False).DefineType((Get-Random))
$t.DefinePInvokeMethod('EnrollUsingBackupV1', 'consumeresumgr.dll', 22, 1, [Int32], @([Boolean].MakeByRefType(), [String], [Int32]), 1, 3).SetImplementationFlags(128)
$t.DefinePInvokeMethod('GetESUEligibilityStatusV1', 'consumeresumgr.dll', 22, 1, [Int32], @([UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [String], [Int32]), 1, 3).SetImplementationFlags(128)
$t.DefinePInvokeMethod('CoSetProxyBlanket', 'ole32.dll', 22, 1, [Int32], @([IntPtr], [UInt32], [UInt32], [UInt32], [UInt32], [UInt32], [IntPtr], [UInt32]), 1, 3).SetImplementationFlags(128)
$t.DefinePInvokeMethod('RtlQueryFeatureConfiguration', 'ntdll.dll', 22, 1, [Int32], @([UInt32], [UInt32], [UInt64].MakeByRefType(), [UInt32[]]), 1, 3).SetImplementationFlags(128)
$t.DefinePInvokeMethod('RtlQueryFeatureConfigurationChangeStamp', 'ntdll.dll', 22, 1, [UInt64], @(), 1, 3).SetImplementationFlags(128)
$t.DefinePInvokeMethod('RtlSetFeatureConfigurations', 'ntdll.dll', 22, 1, [Int32], @([UInt64].MakeByRefType(), [UInt32], [Byte[]], [Int32]), 1, 3).SetImplementationFlags(128)
$Win32 = $t.CreateType()
}
#endregion

#region COM
function ComMethods
{
$Marshal = [System.Runtime.InteropServices.Marshal]
$CAB = [System.Reflection.Emit.CustomAttributeBuilder]
$Module = [AppDomain]::CurrentDomain.DefineDynamicAssembly((Get-Random), 1).DefineDynamicModule((Get-Random), $False)

$ICom = $Module.DefineType('LicenseManager.IApplicationLicenseManager', 'Public, Interface, Abstract, Import')
$ICom.SetCustomAttribute($CAB::new([System.Runtime.InteropServices.ComImportAttribute].GetConstructor(@()), @()))
$ICom.SetCustomAttribute($CAB::new([System.Runtime.InteropServices.GuidAttribute].GetConstructor(@([String])), @('90E2000C-B946-42FA-892F-94506F30CA4F')))
$ICom.SetCustomAttribute($CAB::new([System.Runtime.InteropServices.InterfaceTypeAttribute].GetConstructor(@([Int16])), @([Int16]1)))
[void]$ICom.DefineMethod('EnsureLicenseForApplicationDeployment', 'Public, Virtual, HideBySig, NewSlot, Abstract', 'Standard, HasThis', [Int32], @([String], [String], [String]))
[void]$ICom.DefineMethod('RemoveLicensesForInstalledPackage', 1478, 33, [Int32], @([String], [UInt32]))
$IALM = $ICom.CreateType()

$ICom = $Module.DefineType('LicenseManager.IOperatingSystemLicenseManager', 4257)
$ICom.SetCustomAttribute($CAB::new([System.Runtime.InteropServices.ComImportAttribute].GetConstructor(@()), @()))
$ICom.SetCustomAttribute($CAB::new([System.Runtime.InteropServices.GuidAttribute].GetConstructor(@([String])), @('FA4A3CD4-E3F0-4875-9C69-CAD5423D05F4')))
$ICom.SetCustomAttribute($CAB::new([System.Runtime.InteropServices.InterfaceTypeAttribute].GetConstructor(@([Int16])), @([Int16]1)))
[void]$ICom.DefineMethod('ActivateLicenseForContent', 1478, 33, [Int32], @([String], [IntPtr].MakeByRefType()))
$IOLM = $ICom.CreateType()
}

function DoAcquireLicense
{
try {
. ComMethods
$ComObj = [Activator]::CreateInstance([Type]::GetTypeFromCLSID("22F5B1DF-7D7A-4D21-97F8-C21AEFBA859C"))
} catch {
return $FALSE
}

$pProxy = $Marshal::GetComInterfaceForObject($ComObj, $IALM)
$hRet = $Win32::CoSetProxyBlanket($pProxy, 0xFFFFFFFFL, 0xFFFFFFFFL, 0, 0, 3, 0, 0x40)
if ($hRet -ne 0) {return $FALSE}
$parameters = 'b58e6308-bb55-e064-03ec-f6a5b029056e', $null, $null
$hRet = $IALM.GetMethod("EnsureLicenseForApplicationDeployment").Invoke($ComObj, $parameters)
if ($hRet -ne 0) {return $FALSE}

$pProxy = $Marshal::GetComInterfaceForObject($ComObj, $IOLM)
$hRet = $Win32::CoSetProxyBlanket($pProxy, [UInt32]::MaxValue, [UInt32]::MaxValue, 0, 0, 3, [IntPtr]::Zero, 0x40)
if ($hRet -ne 0) {return $FALSE}
$parameters = 'b58e6308-bb55-e064-03ec-f6a5b029056e', $null
$hRet = $IOLM.GetMethod("ActivateLicenseForContent").Invoke($ComObj, $parameters)
if ($hRet -ne 0) {return $FALSE}

return $TRUE
}

function DoRemoveLicense
{
try {
. ComMethods
$ComObj = [Activator]::CreateInstance([Type]::GetTypeFromCLSID("22F5B1DF-7D7A-4D21-97F8-C21AEFBA859C"))
} catch {
return $FALSE
}

$pProxy = $Marshal::GetComInterfaceForObject($ComObj, $IALM)
$hRet = $Win32::CoSetProxyBlanket($pProxy, 0xFFFFFFFFL, 0xFFFFFFFFL, 0, 0, 3, 0, 0x40)
if ($hRet -ne 0) {return $FALSE}
$parameters = 'Microsoft.Windows10ConsumerExtendedSecurityUpdates_1.0.0.0_neutral_~_8wekyb3d8bbwe', [UInt32]3
try {
$hRet = $IALM.GetMethod("RemoveLicensesForInstalledPackage").Invoke($ComObj, $parameters)
if ($hRet -ne 0) {return $FALSE}
} catch {
$host.UI.WriteLine('Red', 'Black', $.Exception.Message + $.ErrorDetails.Message)
return $FALSE
}

return $TRUE
}
#endregion

#region WinRT
# https://superuser.com/a/1293303/380318 - https://fleexlab.blogspot.com/2018/02/using-winrts-iasyncoperation-in.html
Add-Type -AssemblyName System.Runtime.WindowsRuntime | Out-Null
$asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() | ? { $.Name -eq 'AsTask' -and $.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1' })[0]
function AwaitOperation($WinRtTask, $ResultType)
{
$asTask = $asTaskGeneric.MakeGenericMethod($ResultType)
$netTask = $asTask.Invoke($null, @($WinRtTask))
$netTask.Wait(-1) | Out-Null
$netTask.Result
}

function TokenMsAccountUser
{
$provider = AwaitOperation ([Windows.Security.Authentication.Web.Core.WebAuthenticationCoreManager,Windows,ContentType=WindowsRuntime]::FindAccountProviderAsync("https://login.windows.local", "consumers")) ([Windows.Security.Credentials.WebAccountProvider,Windows,ContentType=WindowsRuntime])
if ($null -eq $provider) {return $null}
$request = [Windows.Security.Authentication.Web.Core.WebTokenRequest,Windows,ContentType=WindowsRuntime]::new($provider, "service::www.microsoft.com::MBI_SSL", "d122d5c5-5240-4164-b88c-986b5f1cf7f9", 0)
if ($null -eq $request) {return $null}
$result = AwaitOperation ([Windows.Security.Authentication.Web.Core.WebAuthenticationCoreManager,Windows,ContentType=WindowsRuntime]::GetTokenSilentlyAsync($request)) ([Windows.Security.Authentication.Web.Core.WebTokenRequestResult,Windows,ContentType=WindowsRuntime])
if ($null -eq $result -Or $result.ResponseStatus -ne 0) {return $null}
CONOUT "Obtained token for Microsoft user account"
return $result.ResponseData[0].Token
}

function TokenMsAccountStore
{
$id = $null
$id = (Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Store" "PrimaryWebAccountId" -ErrorAction SilentlyContinue).PrimaryWebAccountId
if ($null -eq $id) {$id = (Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Store\CurrentIdentity" "PrimaryWebAccountId" -ErrorAction SilentlyContinue).PrimaryWebAccountId}
if ($null -eq $id) {return $null}
$provider = AwaitOperation ([Windows.Security.Authentication.Web.Core.WebAuthenticationCoreManager,Windows,ContentType=WindowsRuntime]::FindAccountProviderAsync("https://login.microsoft.com", "consumers")) ([Windows.Security.Credentials.WebAccountProvider,Windows,ContentType=WindowsRuntime])
if ($null -eq $provider) {return $null}
$account = AwaitOperation ([Windows.Security.Authentication.Web.Core.WebAuthenticationCoreManager,Windows,ContentType=WindowsRuntime]::FindAccountAsync($provider, $id)) ([Windows.Security.Credentials.WebAccount,Windows,ContentType=WindowsRuntime])
if ($null -eq $account) {return $null}
$request = [Windows.Security.Authentication.Web.Core.WebTokenRequest,Windows,ContentType=WindowsRuntime]::new($provider, "service::www.microsoft.com::MBI_SSL", "d122d5c5-5240-4164-b88c-986b5f1cf7f9", 0)
if ($null -eq $request) {return $null}
$result = AwaitOperation ([Windows.Security.Authentication.Web.Core.WebAuthenticationCoreManager]::GetTokenSilentlyAsync($request, $account)) ([Windows.Security.Authentication.Web.Core.WebTokenRequestResult,Windows,ContentType=WindowsRuntime])
if ($null -eq $result -Or $result.ResponseStatus -ne 0) {return $null}
CONOUT "Obtained token for Microsoft store account"
return $result.ResponseData[0].Token
}

function TokenLocalAccount
{
[Windows.Security.Authentication.OnlineId.OnlineIdSystemAuthenticatorForUser,Windows,ContentType=WindowsRuntime] | Out-Null
$auth = [Windows.Security.Authentication.OnlineId.OnlineIdSystemAuthenticator]::Default
if ($null -eq $auth) {return $null}
$auth.ApplicationId = [Guid]"D122D5C5-5240-4164-B88C-986B5F1CF7F9"
$request = [Windows.Security.Authentication.OnlineId.OnlineIdServiceTicketRequest,Windows,ContentType=WindowsRuntime]::new("www.microsoft.com", "MBI_SSL")
if ($null -eq $request) {return $null}
$result = AwaitOperation ($auth.GetTicketAsync($request)) ([Windows.Security.Authentication.OnlineId.OnlineIdSystemTicketResult,Windows,ContentType=WindowsRuntime])
if ($null -eq $result -Or $result.Status -ne 0) {return $null}
CONOUT "Obtained token for Local user account"
return $result.Identity.Ticket.Value
}

function ObtainToken
{
CONOUT "`nObtain MSA Token ..."
$msaToken = $null
if ($null -eq $msaToken -And ($bDefault -Or $bMsAccountUser)) {
$msaToken = TokenMsAccountUser
}
if ($null -eq $msaToken -And ($bDefault -Or $bMsAccountStore)) {
$msaToken = TokenMsAccountStore
}
if ($null -eq $msaToken -And ($bDefault -Or $bLocalAccount)) {
$msaToken = TokenLocalAccount
}
if ($null -eq $msaToken) {
CONOUT "Operation Failed."
}
}
#endregion

#region FCon
function RevertService
{
if ($enablesvc) {
try {Set-Service $svc -StartupType Disabled -EA 1} catch {}
try {Stop-Service $svc -Force -Confirm -EA 1} catch {}
}
}

function RunService
{
if ($enablesvc) {
try {Set-Service $svc -StartupType Automatic -EA 1} catch {}
try {Start-Service $svc -EA 1} catch {}
} else {
try {Start-Service $svc -EA 1} catch {}
}
}

function RunTask
{
$null = Enable-ScheduledTask $TN $TP
Start-ScheduledTask $TN $TP; while ((Get-ScheduledTask $TN $TP).State.value__ -eq 4) {start-sleep -sec 1}
}

function SetConfig($fID, $fState, $fReg)
{
if ($fState -eq 2) {
$fPriority = 10
if ($null -eq (Get-ItemProperty $fKey10 -EA 0)) {$null = New-Item $fKey10 -Force -EA 0}
$null = New-ItemProperty $fKey10 $fReg -Value $fState -Type DWord -Force -EA 0
} else {
$fPriority = 8
if ($null -eq (Get-ItemProperty $fKey08 -EA 0)) {$null = New-Item $fKey08 -Force -EA 0}
$fKeySub = $fKey08 + '\' + $fReg
$null = New-Item $fKeySub -Force -EA 0
$null = New-ItemProperty $fKeySub 'EnabledState' -Value $fState -Type DWord -Force -EA 0
$null = New-ItemProperty $fKeySub 'EnabledStateOptions' -Value 0 -Type DWord -Force -EA 0
if ($null -ne (Get-ItemProperty $fKey10 $fReg -EA 0)) {$null = Remove-ItemProperty $fKey10 $fReg -Force -EA 0}
}

try {$task = Get-ScheduledTask $TN $TP -ErrorAction Stop} catch {}

if ($null -ne $task) {
RunTask
} else {
RunService
}

[byte[]]$fcon = [BitConverter]::GetBytes([UInt32]$fID) + [BitConverter]::GetBytes($fPriority) + [BitConverter]::GetBytes($fState) + [BitConverter]::GetBytes(0) + [BitConverter]::GetBytes(0) + [BitConverter]::GetBytes(0) + [BitConverter]::GetBytes(0) + [BitConverter]::GetBytes(1)
try {[UInt64]$fccs = $Win32::RtlQueryFeatureConfigurationChangeStamp()} catch {UInt64]$fccs = 0}
try {
$nRet = $Win32::RtlSetFeatureConfigurations([ref]$fccs, 1, $fcon, 1)
if ($nRet -lt 0) {
CONOUT ("Operation Failed: 0x" + ($nRet + 0x100000000L).ToString("X"))
return
}
} catch {
$host.UI.WriteLine('Red', 'Black', $.Exception.Message + $.ErrorDetails.Message)
return
}

if ($null -ne $task) {
RunTask
} else {
RevertService
}
return
}

function QueryConfig($fID)
{
try {
$fInfo = [UInt32[]]::new(3)
$nRet = $Win32::RtlQueryFeatureConfiguration([UInt32]$fID, 1, [ref]$null, $fInfo)
if ($nRet -eq 0) {
return (($fInfo[1] -band 0x30) -shr 4) -eq 2
} else {
return $FALSE
}
} catch {
return $FALSE
}
}
#endregion

#region EsuMgr
function PrintEligibility($esuStatus, $esuResult)
{
$showStatus = ("Unknown", $eeStatus[$esuStatus])[($null -ne $eeStatus[$esuStatus])]
CONOUT ("Eligibility Status: {0}" -f $showStatus)
$showResult = ("UNKNOWN_RESULT", $eeResult[$esuResult])[($null -ne $eeResult[$esuResult])]
CONOUT ("Eligibility Result: {0}" -f $showResult)
}

function CheckEligibility
{
CONOUT "`nEvaluate ESU Eligibility state ..."
& $SysPath\cmd.exe '/c' $SysPath\ClipESUConsumer.exe -evaluateEligibility
$esuStatus = (Get-ItemProperty "HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows\ConsumerESU" "ESUEligibility" -ErrorAction SilentlyContinue).ESUEligibility
$esuResult = (Get-ItemProperty "HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows\ConsumerESU" "ESUEligibilityResult" -ErrorAction SilentlyContinue).ESUEligibilityResult
if ($null -eq $esuStatus -Or $null -eq $esuResult) {
CONOUT "Operation Failed."
return
}
PrintEligibility $esuStatus $esuResult
}

function GetEligibility
{
CONOUT "`nGet ESU Eligibility state ..."
$esuStatus = 0
$esuResult = 11
try {
$hRet = $Win32::GetESUEligibilityStatusV1([ref]$esuStatus, [ref]$esuResult, $msaToken, $msaToken.Length)
} catch {
$host.UI.WriteLine('Red', 'Black', $.Exception.Message + $.ErrorDetails.Message)
return
}
if ($hRet -ne 0) {
CONOUT ("Operation Failed: 0x" + ($hRet + 0x100000000L).ToString("X"))
return
}
PrintEligibility $esuStatus $esuResult
}

function DoEnroll
{
CONOUT "`nRun Consumer ESU Enrollment ..."
$isEnrolled = $false
try {
$hRet = $Win32::EnrollUsingBackupV1([ref]$isEnrolled, $msaToken, $msaToken.Length)
} catch {
$host.UI.WriteLine('Red', 'Black', $.Exception.Message + $.ErrorDetails.Message)
return $FALSE
}
if ($hRet -ne 0) {
CONOUT ("Operation Failed: 0x" + ($hRet + 0x100000000L).ToString("X"))
return $FALSE
}
CONOUT ("IsEnrolled result: " + ("False", "True")[$isEnrolled])
return $TRUE
}

function RunAcquireLicense
{
CONOUT "`nAcquire Consumer ESU License regardless enrollment..."
$bRet = DoAcquireLicense
CONOUT ("Operation result: " + ("Failure", "Success")[$bRet])
CheckEligibility
Exit !$bRet
}

function RunRemoveLicense
{
CONOUT "`nRemove Consumer ESU License if exists..."
$bRet = DoRemoveLicense
CONOUT ("Operation result: " + ("Failure", "Success")[$bRet])
CheckEligibility
Exit !$bRet
}
#endregion

#region Unlicense
if ($bRemoveLicense) {
. NativeMethods
RunRemoveLicense
}
#endregion

#region Features
. NativeMethods
$featueESU = QueryConfig 57517687
$featueEEA = QueryConfig 58755790
if (!$featueESU) {
CONOUT "`nEnabling Consumer ESU feature..."
SetConfig 57517687 2 "4011992206"
}
if ($featueEEA) {
CONOUT "`nDisabling EEA_REGION_POLICY_ENABLED feature..."
SetConfig 58755790 1 "2642149007"
}

try {
$hRet = $Win32::GetESUEligibilityStatusV1([ref]$null, [ref]$null, [NullString]::Value, 0)
} catch {
$host.UI.WriteLine('Red', 'Black', $.Exception.Message + $.ErrorDetails.Message)
ExitScript 1
}
if ($hRet -eq 0x80080002) {
CONOUT "==== ERROR ====`r`n"
CONOUT "Consumer ESU feature is still not enabled: E_CONSUMER_ESU_FEATURE_DISABLED"
CONOUT "Close this console session and run the script again to take effect."
ExitScript 1
}
#endregion

#region Main
if ($bAcquireLicense) {
RunAcquireLicense
}

. CheckEligibility
$supported = $false
if ($null -ne $esuStatus) {
$supported = ($esuStatus -ge 2 -And $esuStatus -le 5) -Or (($esuStatus -eq 1 -Or $esuStatus -eq 10) -And ($esuResult -eq 3 -Or $esuResult -eq 13))
}
if (!$supported) {
CONOUT "`nEligibility status is not supported for enrollment."
CONOUT "Run the script with -License parameter to force acquire license."
ExitScript 1
}
if ($esuStatus -eq 3 -And $esuResult -eq 1 -And !$bProceed) {
CONOUT "`nYour PC is already enrolled for Consumer ESU."
CONOUT "No need to proceed."
ExitScript 0
}

if ($DMA_SSO) {
$null = New-ItemProperty $gKey "Nation" -Value 244 -Type String -Force -EA 0
if ($null -ne (Get-ItemProperty $rKey -EA 0)) {$null = New-ItemProperty $rKey "DeviceRegion" -Value 244 -Type DWord -Force -EA 0}
}
. ObtainToken
if ($DMA_SSO) {
$null = New-ItemProperty $gKey "Nation" -Value $GeoId -Type String -Force -EA 0
if ($null -ne (Get-ItemProperty $rKey -EA 0)) {$null = New-ItemProperty $rKey "DeviceRegion" -Value $GeoId -Type DWord -Force -EA 0}
}

if ($null -eq $msaToken) {
if (!$bDefault) {
CONOUT "`nRun the script without parameters to obtain other tokens or force acquire license."
ExitScript 1
}
RunAcquireLicense
}

$eRet = DoEnroll
if (!$eRet) {
CheckEligibility
Exit !$eRet
}
# GetEligibility
CheckEligibility
ExitScript 0
#endregion
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: samuelclemens und TPD-Andy
Fyrex schrieb:
Zocken am PC ohne Online-Multiplayer, Updates oder Mods?
Nagut, du musst es ja wissen.

Genau, wer kennt sie nicht, die Viren, Trojaner, Malware und weitere Gefahren via Multiplayer aus einem Spiel 😬 oder aber aus den offiziellen Stores von Ubischrott, Steam, Rockstar, nVidia - uiuiui, mir schlottern die Knie!

Also ich dachte schon paranoid zu sein, es stimmt mich doch sehr positiv hier noch eine Steigerung zu erkennen - danke!
 
Tuetensuppe schrieb:
Linux eben keine echte Alternative zu Windows ist
Linux will auch keine sein.
Windows ist auch keine für Linux.

Linux ist ein Betriebssystem, was Windows 11 aktuell sein soll, weiß wohl nicht einmal Microsoft selbst.
 
  • Gefällt mir
Reaktionen: Mittelspecht, tso, DocAimless und 6 andere
kullakehx schrieb:
Ich staune immer wieder das so wenige Leute LTSC auf dem Schirm haben. Immerhin gibt es dort Aktualisierungen bis 2032.
Nö.
Laut Microsoft:

Windows 10 Enterprise LTSC 2021 hat einen Lebenszyklus von 5 Jahren. (IoT Enterprise LTSC hat weiterhin einen Lebenszyklus von 10 Jahren). Daher ist das LTSC 2021-Release kein direkter Ersatz für LTSC 2019 mit einem Lebenszyklus von 10 Jahren.

Wobei es bei den IoT Enterprise LTSC Versionen über die gesamten 10 Jahre keinerlei Funktionsupdates gibt.
Will man solche, muss man alle 3 Jahre eine neue Lizenz kaufen.
 
Seit Juli bin ich endlich von der Fessel Windows frei !!!
Der Gaming Rechner funktioniert endlich mit CachyOS (Arch).
alte Win Versionen, Win7 und ältere Derivate nutze ich weiterhin offline als Gaming Rechner (in weiteren Retro Rechnern)....

Auch eine aktive Community in Foren ist wichtig, damit einem bei Problemen geholfen werden kann.
Ja ..., in bestimmten Fällen ist es schon aufwändiger als das "Autopilot"OS Win11.

Ich sehe hier auch deutlich, dass weniger Ressourcen verschwendet werden. (IDLE ram Verbrauch bei Win11 , RAM 32Gb installiert: ~4.5-4.7 Gb
IDLE ram Verbrauch bei cachyos, RAM 32Gb installiert: ~2.0-2.1 Gb )
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: KitKat::new(), zhompster, Redundanz und 4 andere
  • Gefällt mir
Reaktionen: Seven2758, Alexander2 und TPD-Andy
Zurück
Oben