diff options
Diffstat (limited to 'MAS/Separate-Files-Version/Check-Activation-Status-wmi.cmd')
| -rw-r--r-- | MAS/Separate-Files-Version/Check-Activation-Status-wmi.cmd | 533 |
1 files changed, 533 insertions, 0 deletions
diff --git a/MAS/Separate-Files-Version/Check-Activation-Status-wmi.cmd b/MAS/Separate-Files-Version/Check-Activation-Status-wmi.cmd new file mode 100644 index 0000000..495b1e8 --- /dev/null +++ b/MAS/Separate-Files-Version/Check-Activation-Status-wmi.cmd @@ -0,0 +1,533 @@ +<!-- : Begin batch script +@setlocal DisableDelayedExpansion +@echo off + + + +:: Check-Activation-Status-wmi.cmd +:: Written by @abbodi1406 +:: forums.mydigitallife.net/posts/838808 + + + + +set WMI_VBS=0 +@cls +set _args= +set _args=%* +for %%A in (%_args%) do ( +if /i "%%A"=="-wow" set _rel1=1 +if /i "%%A"=="-arm" set _rel2=1 +) +set "_cmdf=%~f0" +if exist "%SystemRoot%\Sysnative\cmd.exe" if not defined _rel1 ( +setlocal EnableDelayedExpansion +start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" -wow" +exit /b +) +if exist "%SystemRoot%\SysArm32\cmd.exe" if /i %PROCESSOR_ARCHITECTURE%==AMD64 if not defined _rel2 ( +setlocal EnableDelayedExpansion +start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" -arm" +exit /b +) +color 07 +title Check Activation Status [wmi] +set wspp=SoftwareLicensingProduct +set wsps=SoftwareLicensingService +set ospp=OfficeSoftwareProtectionProduct +set osps=OfficeSoftwareProtectionService +set winApp=55c92734-d682-4d71-983e-d6ec3f16059f +set o14App=59a52881-a989-479d-af46-f275c6370663 +set o15App=0ff1ce15-a989-479d-af46-f275c6370663 +for %%# in (spp_get,ospp_get,cW1nd0ws,sppw,c0ff1ce15,sppo,osppsvc,ospp14,ospp15) do set "%%#=" +for /f "tokens=6 delims=[]. " %%# in ('ver') do set winbuild=%%# +set "spp_get=Description, DiscoveredKeyManagementServiceMachineName, DiscoveredKeyManagementServiceMachinePort, EvaluationEndDate, GracePeriodRemaining, ID, KeyManagementServiceMachine, KeyManagementServicePort, KeyManagementServiceProductKeyID, LicenseStatus, LicenseStatusReason, Name, PartialProductKey, ProductKeyID, VLActivationInterval, VLRenewalInterval" +set "ospp_get=%spp_get%" +if %winbuild% GEQ 9200 set "spp_get=%spp_get%, KeyManagementServiceLookupDomain, VLActivationTypeEnabled" +if %winbuild% GEQ 9600 set "spp_get=%spp_get%, DiscoveredKeyManagementServiceMachineIpAddress, ProductKeyChannel" +set "_work=%~dp0" +set "_batf=%~f0" +set "_batp=%_batf:'=''%" +set "_Local=%LocalAppData%" +set _Identity=0 +setlocal EnableDelayedExpansion +dir /b /s /a:-d "!_Local!\Microsoft\Office\Licenses\*1*" 1>nul 2>nul && set _Identity=1 +dir /b /s /a:-d "!ProgramData!\Microsoft\Office\Licenses\*1*" 1>nul 2>nul && set _Identity=1 +pushd "!_work!" +setlocal DisableDelayedExpansion +if %winbuild% LSS 9200 if not exist "%SystemRoot%\servicing\Packages\Microsoft-Windows-PowerShell-WTR-Package~*.mum" set _Identity=0 + +set "SysPath=%SystemRoot%\System32" +set "Path=%SystemRoot%\System32;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" +if exist "%SystemRoot%\Sysnative\reg.exe" ( +set "SysPath=%SystemRoot%\Sysnative" +set "Path=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%" +) + +:: Check LF line ending + +pushd "%~dp0" +>nul findstr /rxc:".*" "%~nx0" +if not %errorlevel%==0 ( +echo: +echo Error: This is not a correct file. It has LF line ending issue. +echo: +echo Press any key to exit... +pause >nul +popd +exit /b +) +popd + +set _cwmi=0 +for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( +wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "ComputerSystem" 1>nul && set _cwmi=1 +) + +if %_cwmi% EQU 0 ( +echo: +echo Error: wmic.exe is not responding in the system. +echo: +echo Press any key to exit... +pause >nul +exit /b +) + +set "line2=************************************************************" +set "line3=____________________________________________________________" +set "_psc=powershell" + +set _prsh=1 +for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" set _prsh=0 +set "_csg=cscript.exe //NoLogo //Job:WmiMulti "%~nx0?.wsf"" +set "_csq=cscript.exe //NoLogo //Job:WmiQuery "%~nx0?.wsf"" +set "_csx=cscript.exe //NoLogo //Job:XPDT "%~nx0?.wsf"" +if %_cwmi% EQU 0 set WMI_VBS=1 +if %WMI_VBS% EQU 0 ( +set "_zz1=wmic path" +set "_zz2=where" +set "_zz3=get" +set "_zz4=/value" +set "_zz5=(" +set "_zz6=)" +set "_zz7="wmic path" +set "_zz8=/value"" +) else ( +set "_zz1=%_csq%" +set "_zz2=" +set "_zz3=" +set "_zz4=" +set "_zz5="" +set "_zz6="" +set "_zz7=%_csq%" +set "_zz8=" +) +set _WSH=0 +set OsppHook=1 +sc query osppsvc >nul 2>&1 +if %errorlevel% EQU 1060 set OsppHook=0 + +net start sppsvc /y >nul 2>&1 +call :casWpkey %wspp% %winApp% cW1nd0ws sppw +if %winbuild% GEQ 9200 call :casWpkey %wspp% %o15App% c0ff1ce15 sppo +if %OsppHook% NEQ 0 ( +net start osppsvc /y >nul 2>&1 +call :casWpkey %ospp% %o14App% osppsvc ospp14 +if %winbuild% LSS 9200 call :casWpkey %ospp% %o15App% osppsvc ospp15 +) + +echo %line2% +echo *** Windows Status *** +echo %line2% +if not defined cW1nd0ws ( +echo. +echo Error: product key not found. +goto :casWcon +) +set winID=1 +set "_qr=%_zz7% %wspp% %_zz2% %_zz5%ApplicationID='%winApp%' and PartialProductKey is not null%_zz6% %_zz3% ID %_zz8%" +for /f "tokens=2 delims==" %%# in ('%_qr%') do ( + set "chkID=%%#" + call :casWdet "%wspp%" "%wsps%" "%spp_get%" + call :casWout + echo %line3% + echo. +) + +:casWcon +set winID=0 +set verbose=1 +if not defined c0ff1ce15 ( +if defined osppsvc goto :casWospp +goto :casWend +) +echo %line2% +echo *** Office Status *** +echo %line2% +set "_qr=%_zz7% %wspp% %_zz2% %_zz5%ApplicationID='%o15App%' and PartialProductKey is not null%_zz6% %_zz3% ID %_zz8%" +for /f "tokens=2 delims==" %%# in ('%_qr%') do ( + set "chkID=%%#" + call :casWdet "%wspp%" "%wsps%" "%spp_get%" + call :casWout + echo %line3% + echo. +) +set verbose=0 +if defined osppsvc goto :casWospp +goto :casWend + +:casWospp +if %verbose% EQU 1 ( +echo %line2% +echo *** Office Status *** +echo %line2% +) +set "_qr=%_zz7% %ospp% %_zz2% %_zz5%ApplicationID='%o15App%' and PartialProductKey is not null%_zz6% %_zz3% ID %_zz8%" +if defined ospp15 for /f "tokens=2 delims==" %%# in ('%_qr%') do ( + set "chkID=%%#" + call :casWdet "%ospp%" "%osps%" "%ospp_get%" + call :casWout + echo %line3% + echo. +) +set "_qr=%_zz7% %ospp% %_zz2% %_zz5%ApplicationID='%o14App%' and PartialProductKey is not null%_zz6% %_zz3% ID %_zz8%" +if defined ospp14 for /f "tokens=2 delims==" %%# in ('%_qr%') do ( + set "chkID=%%#" + call :casWdet "%ospp%" "%osps%" "%ospp_get%" + call :casWout + echo %line3% + echo. +) +goto :casWend + +:casWpkey +set "_qr=%_zz1% %1 %_zz2% %_zz5%ApplicationID='%2' and PartialProductKey is not null%_zz6% %_zz3% ID %_zz4%" +%_qr% 2>nul | findstr /i ID 1>nul && (set %3=1&set %4=1) +exit /b + +:casWdet +for %%# in (%~3) do set "%%#=" +if /i %~1==%ospp% for %%# in (DiscoveredKeyManagementServiceMachineIpAddress, KeyManagementServiceLookupDomain, ProductKeyChannel, VLActivationTypeEnabled) do set "%%#=" +set "cKmsClient=" +set "cTblClient=" +set "cAvmClient=" +set "ExpireMsg=" +set "_xpr=" +set "_qr="wmic path %~1 where ID='%chkID%' get %~3 /value" ^| findstr ^=" +if %WMI_VBS% NEQ 0 set "_qr=%_csg% %~1 "ID='%chkID%'" "%~3"" +for /f "tokens=* delims=" %%# in ('%_qr%') do set "%%#" + +set /a _gpr=(GracePeriodRemaining+1440-1)/1440 +echo %Description%| findstr /i VOLUME_KMSCLIENT 1>nul && (set cKmsClient=1&set _mTag=Volume) +echo %Description%| findstr /i TIMEBASED_ 1>nul && (set cTblClient=1&set _mTag=Timebased) +echo %Description%| findstr /i VIRTUAL_MACHINE_ACTIVATION 1>nul && (set cAvmClient=1&set _mTag=Automatic VM) +cmd /c exit /b %LicenseStatusReason% +set "LicenseReason=%=ExitCode%" +set "LicenseMsg=Time remaining: %GracePeriodRemaining% minute(s) (%_gpr% day(s))" +if %_gpr% GEQ 1 if %_WSH% EQU 1 ( +for /f "tokens=* delims=" %%# in ('%_csx% %GracePeriodRemaining%') do set "_xpr=%%#" +) +if %_gpr% GEQ 1 if %_prsh% EQU 1 if not defined _xpr ( +for /f "tokens=* delims=" %%# in ('%_psc% "$([DateTime]::Now.addMinutes(%GracePeriodRemaining%)).ToString('yyyy-MM-dd HH:mm:ss')" 2^>nul') do set "_xpr=%%#" +title Check Activation Status [wmi] +) + +if %LicenseStatus% EQU 0 ( +set "License=Unlicensed" +set "LicenseMsg=" +) +if %LicenseStatus% EQU 1 ( +set "License=Licensed" +set "LicenseMsg=" +if %GracePeriodRemaining% EQU 0 ( + if %winID% EQU 1 (set "ExpireMsg=The machine is permanently activated.") else (set "ExpireMsg=The product is permanently activated.") + ) else ( + set "LicenseMsg=%_mTag% activation expiration: %GracePeriodRemaining% minute(s) (%_gpr% day(s))" + if defined _xpr set "ExpireMsg=%_mTag% activation will expire %_xpr%" + ) +) +if %LicenseStatus% EQU 2 ( +set "License=Initial grace period" +if defined _xpr set "ExpireMsg=Initial grace period ends %_xpr%" +) +if %LicenseStatus% EQU 3 ( +set "License=Additional grace period (KMS license expired or hardware out of tolerance)" +if defined _xpr set "ExpireMsg=Additional grace period ends %_xpr%" +) +if %LicenseStatus% EQU 4 ( +set "License=Non-genuine grace period." +if defined _xpr set "ExpireMsg=Non-genuine grace period ends %_xpr%" +) +if %LicenseStatus% EQU 6 ( +set "License=Extended grace period" +if defined _xpr set "ExpireMsg=Extended grace period ends %_xpr%" +) +if %LicenseStatus% EQU 5 ( +set "License=Notification" + if "%LicenseReason%"=="C004F200" (set "LicenseMsg=Notification Reason: 0xC004F200 (non-genuine)." + ) else if "%LicenseReason%"=="C004F009" (set "LicenseMsg=Notification Reason: 0xC004F009 (grace time expired)." + ) else (set "LicenseMsg=Notification Reason: 0x%LicenseReason%" + ) +) +if %LicenseStatus% GTR 6 ( +set "License=Unknown" +set "LicenseMsg=" +) +if not defined cKmsClient exit /b + +if %KeyManagementServicePort%==0 set KeyManagementServicePort=1688 +set "KmsReg=Registered KMS machine name: %KeyManagementServiceMachine%:%KeyManagementServicePort%" +if "%KeyManagementServiceMachine%"=="" set "KmsReg=Registered KMS machine name: KMS name not available" + +if %DiscoveredKeyManagementServiceMachinePort%==0 set DiscoveredKeyManagementServiceMachinePort=1688 +set "KmsDns=KMS machine name from DNS: %DiscoveredKeyManagementServiceMachineName%:%DiscoveredKeyManagementServiceMachinePort%" +if "%DiscoveredKeyManagementServiceMachineName%"=="" set "KmsDns=DNS auto-discovery: KMS name not available" + +set "_qr="wmic path %~2 get ClientMachineID, KeyManagementServiceHostCaching /value" ^| findstr ^=" +if %WMI_VBS% NEQ 0 set "_qr=%_csg% %~2 "ClientMachineID, KeyManagementServiceHostCaching"" +for /f "tokens=* delims=" %%# in ('%_qr%') do set "%%#" +if /i %KeyManagementServiceHostCaching%==True (set KeyManagementServiceHostCaching=Enabled) else (set KeyManagementServiceHostCaching=Disabled) + +if %winbuild% LSS 9200 exit /b +if /i %~1==%ospp% exit /b + +if "%KeyManagementServiceLookupDomain%"=="" set "KeyManagementServiceLookupDomain=" + +if %VLActivationTypeEnabled% EQU 3 ( +set VLActivationType=Token +) else if %VLActivationTypeEnabled% EQU 2 ( +set VLActivationType=KMS +) else if %VLActivationTypeEnabled% EQU 1 ( +set VLActivationType=AD +) else ( +set VLActivationType=All +) + +if %winbuild% LSS 9600 exit /b +if "%DiscoveredKeyManagementServiceMachineIpAddress%"=="" set "DiscoveredKeyManagementServiceMachineIpAddress=not available" +exit /b + +:casWout +echo. +echo Name: %Name% +echo Description: %Description% +echo Activation ID: %ID% +echo Extended PID: %ProductKeyID% +if defined ProductKeyChannel echo Product Key Channel: %ProductKeyChannel% +echo Partial Product Key: %PartialProductKey% +echo License Status: %License% +if defined LicenseMsg echo %LicenseMsg% +if not %LicenseStatus%==0 if not %EvaluationEndDate:~0,8%==16010101 echo Evaluation End Date: %EvaluationEndDate:~0,4%-%EvaluationEndDate:~4,2%-%EvaluationEndDate:~6,2% %EvaluationEndDate:~8,2%:%EvaluationEndDate:~10,2% UTC +if not defined cKmsClient ( +if defined ExpireMsg echo.&echo. %ExpireMsg% +exit /b +) +if defined VLActivationTypeEnabled echo Configured Activation Type: %VLActivationType% +echo. +if not %LicenseStatus%==1 ( +echo Please activate the product in order to update KMS client information values. +exit /b +) +echo Most recent activation information: +echo Key Management Service client information +echo. Client Machine ID (CMID): %ClientMachineID% +echo. %KmsDns% +echo. %KmsReg% +if defined DiscoveredKeyManagementServiceMachineIpAddress echo. KMS machine IP address: %DiscoveredKeyManagementServiceMachineIpAddress% +echo. KMS machine extended PID: %KeyManagementServiceProductKeyID% +echo. Activation interval: %VLActivationInterval% minutes +echo. Renewal interval: %VLRenewalInterval% minutes +echo. KMS host caching: %KeyManagementServiceHostCaching% +if defined KeyManagementServiceLookupDomain echo. KMS SRV record lookup domain: %KeyManagementServiceLookupDomain% +if defined ExpireMsg echo.&echo. %ExpireMsg% +exit /b + +:casWend +if %_Identity% EQU 1 if %_prsh% EQU 1 ( +echo %line2% +echo *** Office vNext Status *** +echo %line2% +setlocal EnableDelayedExpansion +%_psc% "$f=[IO.File]::ReadAllText('!_batp!') -split ':vNextDiag\:.*';iex ($f[1])" +title Check Activation Status [wmi] +echo %line3% +echo. +) +echo. +echo Press any key to exit. +pause >nul +exit /b + +:vNextDiag: +function PrintModePerPridFromRegistry +{ + $vNextRegkey = "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext" + $vNextPrids = Get-Item -Path $vNextRegkey -ErrorAction Ignore | Select-Object -ExpandProperty 'property' | Where-Object -FilterScript {$_ -Ne 'InstalledGraceKey' -And $_ -Ne 'MigrationToV5Done' -And $_ -Ne 'test' -And $_ -Ne 'unknown'} + If ($vNextPrids -Eq $null) + { + Write-Host "No registry keys found." + Return + } + $vNextPrids | ForEach ` + { + $mode = (Get-ItemProperty -Path $vNextRegkey -Name $_).$_ + Switch ($mode) + { + 2 { $mode = "vNext"; Break } + 3 { $mode = "Device"; Break } + Default { $mode = "Legacy"; Break } + } + Write-Host $_ = $mode + } +} +function PrintSharedComputerLicensing +{ + $scaRegKey = "HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration" + $scaValue = Get-ItemProperty -Path $scaRegKey -ErrorAction Ignore | Select-Object -ExpandProperty "SharedComputerLicensing" -ErrorAction Ignore + $scaRegKey2 = "HKLM:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing" + $scaValue2 = Get-ItemProperty -Path $scaRegKey2 -ErrorAction Ignore | Select-Object -ExpandProperty "SharedComputerLicensing" -ErrorAction Ignore + $scaPolicyKey = "HKLM:\SOFTWARE\Policies\Microsoft\Office\16.0\Common\Licensing" + $scaPolicyValue = Get-ItemProperty -Path $scaPolicyKey -ErrorAction Ignore | Select-Object -ExpandProperty "SharedComputerLicensing" -ErrorAction Ignore + If ($scaValue -Eq $null -And $scaValue2 -Eq $null -And $scaPolicyValue -Eq $null) + { + Write-Host "No registry keys found." + Return + } + $scaModeValue = $scaValue -Or $scaValue2 -Or $scaPolicyValue + If ($scaModeValue -Eq 0) + { + $scaMode = "Disabled" + } + If ($scaModeValue -Eq 1) + { + $scaMode = "Enabled" + } + Write-Host "SharedComputerLicensing" = $scaMode + Write-Host + $tokenFiles = $null + $tokenPath = "${env:LOCALAPPDATA}\Microsoft\Office\16.0\Licensing" + If (Test-Path $tokenPath) + { + $tokenFiles = Get-ChildItem -Path $tokenPath -Recurse -File -Filter "*authString*" + } + If ($tokenFiles.length -Eq 0) + { + Write-Host "No tokens found." + Return + } + $tokenFiles | ForEach ` + { + $tokenParts = (Get-Content -Encoding Unicode -Path $_.FullName).Split('_') + $output = [PSCustomObject] ` + @{ + ACID = $tokenParts[0]; + User = $tokenParts[3] + NotBefore = $tokenParts[4]; + NotAfter = $tokenParts[5]; + } | ConvertTo-Json + Write-Host $output + } +} +function PrintLicensesInformation +{ + Param( + [ValidateSet("NUL", "Device")] + [String]$mode + ) + If ($mode -Eq "NUL") + { + $licensePath = "${env:LOCALAPPDATA}\Microsoft\Office\Licenses" + } + ElseIf ($mode -Eq "Device") + { + $licensePath = "${env:PROGRAMDATA}\Microsoft\Office\Licenses" + } + $licenseFiles = $null + If (Test-Path $licensePath) + { + $licenseFiles = Get-ChildItem -Path $licensePath -Recurse -File + } + If ($licenseFiles.length -Eq 0) + { + Write-Host "No licenses found." + Return + } + $licenseFiles | ForEach ` + { + $license = (Get-Content -Encoding Unicode $_.FullName | ConvertFrom-Json).License + $decodedLicense = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($license)) | ConvertFrom-Json + $licenseType = $decodedLicense.LicenseType + $userId = $decodedLicense.Metadata.UserId + $identitiesRegkey = Get-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Identity\Identities\${userId}*" -ErrorAction Ignore + $licenseState = $null + If ((Get-Date) -Gt (Get-Date $decodedLicense.MetaData.NotAfter)) + { + $licenseState = "RFM" + } + ElseIf (($decodedLicense.ExpiresOn -Eq $null) -Or + ((Get-Date) -Lt (Get-Date $decodedLicense.ExpiresOn))) + { + $licenseState = "Licensed" + } + Else + { + $licenseState = "Grace" + } + if ($mode -Eq "NUL") + { + $output = [PSCustomObject] ` + @{ + Version = $_.Directory.Name + Type = "User|${licenseType}"; + Product = $decodedLicense.ProductReleaseId; + Acid = $decodedLicense.Acid; + LicenseState = $licenseState; + EntitlementStatus = $decodedLicense.Status; + ReasonCode = $decodedLicense.ReasonCode; + NotBefore = $decodedLicense.Metadata.NotBefore; + NotAfter = $decodedLicense.Metadata.NotAfter; + NextRenewal = $decodedLicense.Metadata.RenewAfter; + Expiration = $decodedLicense.ExpiresOn; + TenantId = $decodedLicense.Metadata.TenantId; + } | ConvertTo-Json + } + ElseIf ($mode -Eq "Device") + { + $output = [PSCustomObject] ` + @{ + Version = $_.Directory.Name + Type = "Device|${licenseType}"; + Product = $decodedLicense.ProductReleaseId; + Acid = $decodedLicense.Acid; + DeviceId = $decodedLicense.Metadata.DeviceId; + LicenseState = $licenseState; + EntitlementStatus = $decodedLicense.Status; + ReasonCode = $decodedLicense.ReasonCode; + NotBefore = $decodedLicense.Metadata.NotBefore; + NotAfter = $decodedLicense.Metadata.NotAfter; + NextRenewal = $decodedLicense.Metadata.RenewAfter; + Expiration = $decodedLicense.ExpiresOn; + TenantId = $decodedLicense.Metadata.TenantId; + } | ConvertTo-Json + } + Write-Output $output + } +} + Write-Host + Write-Host "========== Mode per ProductReleaseId ==========" + Write-Host +PrintModePerPridFromRegistry + Write-Host + Write-Host "========== Shared Computer Licensing ==========" + Write-Host +PrintSharedComputerLicensing + Write-Host + Write-Host "========== vNext licenses ==========" + Write-Host +PrintLicensesInformation -Mode "NUL" + Write-Host + Write-Host "========== Device licenses ==========" + Write-Host +PrintLicensesInformation -Mode "Device" +:vNextDiag: +::===================================================
\ No newline at end of file |
