@echo off
setlocal EnableExtensions DisableDelayedExpansion
title Usuwanie starego klucza Office

set "SYS=%SystemRoot%\System32"
set "PS=%SYS%\WindowsPowerShell\v1.0\powershell.exe"
set "SELFPATH=%~f0"
set "OFFICEAPP=0ff1ce15-a989-479d-af46-f275c6370663"

"%SYS%\reg.exe" query "HKU\S-1-5-19" >nul 2>&1
if not errorlevel 1 goto UPRAWNIENIA_OK
if /i "%~1"=="ELEVATED" goto BLAD_UPRAWNIENIA
if not exist "%PS%" goto BLAD_UPRAWNIENIA

echo.
echo  Potrzebne sa uprawnienia administratora.
echo  Za chwile system zapyta o zgode - wybierz TAK.
echo.
"%PS%" -NoProfile -Command "try { Start-Process -FilePath $env:SELFPATH -ArgumentList 'ELEVATED' -Verb RunAs -ErrorAction Stop } catch { exit 1 }"
if errorlevel 1 goto BLAD_UPRAWNIENIA
endlocal & exit /b 0

:UPRAWNIENIA_OK
if not exist "%PS%" goto BLAD_POWERSHELL
cls
echo.
echo  =====================================================
echo    Usuwanie starego klucza Office
echo  =====================================================
echo.
echo  Po usunieciu Office poprosi o nowy klucz.
echo  Klucze Visio i Project zostaja bez zmian.
echo.
echo  Szukam kluczy Office na tym komputerze...
echo.
"%PS%" -NoProfile -Command "$k = @(Get-CimInstance SoftwareLicensingProduct -Filter 'ApplicationID=''%OFFICEAPP%'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.Name -notmatch 'Visio|Project' }); foreach ($p in $k) { '  - klucz konczacy sie na ' + $p.PartialProductKey + ' (' + $p.Name + ')' }; exit $k.Count"
set "ILE=%errorlevel%"
echo.
if "%ILE%"=="0" goto BRAK_KLUCZY
echo  Znaleziono kluczy Office: %ILE%
echo.
set "ODP="
set /p "ODP=  Usunac te klucze Office? [T/n]: "
if /i "%ODP%"=="n" goto ANULOWANO

echo.
echo  Usuwam...
"%PS%" -NoProfile -Command "$n = 0; foreach ($p in @(Get-CimInstance SoftwareLicensingProduct -Filter 'ApplicationID=''%OFFICEAPP%'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.Name -notmatch 'Visio|Project' })) { try { Invoke-CimMethod -InputObject $p -MethodName UninstallProductKey -ErrorAction Stop | Out-Null; $n++; '  - usuniety klucz ' + $p.PartialProductKey } catch { '  - NIE udalo sie usunac klucza ' + $p.PartialProductKey } }; try { Get-CimInstance SoftwareLicensingService | Invoke-CimMethod -MethodName RefreshLicenseStatus -ErrorAction Stop | Out-Null } catch { }; exit $n"
set "USUNIETE=%errorlevel%"
echo.
echo  =====================================================
echo    Usunieto kluczy: %USUNIETE% z %ILE%
echo  =====================================================
echo.
echo  NASTEPNY KROK:
echo    1. Otworz Word.
echo    2. Plik - Konto - Zmien klucz produktu.
echo    3. Wpisz nowy klucz z naszego maila.
echo.
echo  Nacisnij dowolny klawisz, aby zamknac to okno.
pause >nul
endlocal & exit /b 0

:BRAK_KLUCZY
echo  Nie znaleziono zadnego klucza Office.
echo  Office moze byc juz bez klucza - wpisz nowy bezposrednio:
echo  Word - Plik - Konto - Zmien klucz produktu.
echo.
echo  Nacisnij dowolny klawisz, aby zamknac to okno.
pause >nul
endlocal & exit /b 0

:ANULOWANO
echo.
echo  Anulowano - nic nie zostalo zmienione.
echo.
echo  Nacisnij dowolny klawisz, aby zamknac to okno.
pause >nul
endlocal & exit /b 0

:BLAD_POWERSHELL
echo.
echo  Na tym komputerze brakuje programu Windows PowerShell,
echo  ktory jest potrzebny do usuniecia klucza.
echo  Napisz do nas - pomozemy.
echo.
echo  Nacisnij dowolny klawisz, aby zamknac to okno.
pause >nul
endlocal & exit /b 1

:BLAD_UPRAWNIENIA
echo.
echo  BRAK UPRAWNIEN ADMINISTRATORA
echo.
echo  CO ZROBIC:
echo  1. Zamknij to okno.
echo  2. Kliknij plik Usun_stary_klucz_Office.bat PRAWYM przyciskiem myszy.
echo  3. Wybierz Uruchom jako administrator.
echo  4. Gdy system zapyta o zgode, wybierz TAK.
echo.
echo  Nacisnij dowolny klawisz, aby zamknac to okno.
pause >nul
endlocal & exit /b 1
