installiertes Office erkennen

Dieses Script sollte ursprünglich als Startup-Script vor Benutzeranmeldung ausgeführt werden. Leider deinstalliert sich nicht jede Office-Version im Silent-Modus und erwartet eine Benutzereingabe, die ja von Benutzeranmeldung nie kommt.

Dennoch läuft das Script, wenn man es nach Benutzeranmeldung startet, meinet halben über Taskplaner/ LogonScript.
Meiner Erfahrung nach macht sowas aber wenig Sinn, da der Benutzer trotz Vorankündigung und Anleitung nicht das macht was man erwartet und so die automatische Deinstallation/ Installation schief geht. Also lieber sich selber an den PC setzen.

Vorbereitung

Bereitstellungstool von Office herunterladen und ODT-Offline-Version erstellen.
https://docs.microsoft.com/de-de/deployoffice/overview-of-the-office-2016-deployment-tool

Tipp:

Erstmal keinen PC auf TRUE setzen. Über set log= kann über einen Pfad zu einem beschreibbaren Verzeichnis eine Log-Datei erstellt werden. So kann das Script als Startup/Logon-Script ausgeführt werden und man erfährt auf welchem PC welche Office-Version installiert ist.

Ablauf

  • erkennen der installierte Office-Version [o365|2013|2010]
  • innerhalb der erkannten Office-Versions-Routine → iF defined [o365|2013|2010] PC-Name prüfen ob dieser zur Deinstallaition/Installation berechtigt ist
    Call-Befehl zur Deinstallation aufrufen → call %[o365|2013|2010]%
  • neues Office 365 aus Offline-ODT installieren, wahlweise als 32bit und 64bit möglich.
    call \\spc\…..\setup.exe /configure \\spc\….\configuration32bit.xml|configuration64bit.xml]
  • Wird kein Office erkannt, so soll nach PC-Namensprüfung Office 365 aus Offline-ODT installiert werden → :error

    Code

@echo off

set regKey=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
set regKey64=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
set regString=/v UninstallString
set "log="
set "o365="
set "o2013="
set "o2010="
set "o2007="

rem Office 365 RegKeys
FOR /F "tokens=2* delims=     " %%A IN ('REG QUERY "%regKey%\O365BusinessRetail - de-de" %regString%') DO SET o365=%%B &::globale Erkennung Microsoft Office 365
IF not defined o365 FOR /F "tokens=2* delims=     " %%A IN ('REG QUERY "%regKey%\{90150000-007E-0000-1000-0000000FF1CE}" %regString%') DO SET o365=%%B &:: Microsoft Office 365 Business - Version 2013
IF not defined o365 FOR /F "tokens=2* delims=     " %%A IN ('REG QUERY "%regKey%\{90160000-007E-0000-1000-0000000FF1CE}" %regString%') DO SET o365=%%B &:: Microsoft Office 365 Business - Version 2016

rem Office 2013 RegKeys
FOR /F "tokens=2* delims=     " %%A IN ('REG QUERY "%regKey%\HomeBusinessRetail - de-de" %regString%') DO SET o2013=%%B &::globale Erkennung Microsoft Office 2013
IF not defined o2013 FOR /F "tokens=2* delims=     " %%A IN ('REG QUERY "%regKey64%\HomeBusinessRetail - de-de" %regString%') DO SET o2013=%%B &::globale Erkennung Microsoft Office 2013 (64bit)

rem Office 2010 RegKeys
FOR /F "tokens=2* delims=     " %%A IN ('REG QUERY "%regKey%\Office14.SingleImage" %regString%') DO SET o2010=%%B &::Microsoft Office Home & Business SingleImage
IF not defined o2010 FOR /F "tokens=2* delims=     " %%A IN ('REG QUERY "%regKey64%\Office14.SingleImage" %regString%') DO SET o2010=%%B &::Microsoft Office Home & Business SingleImage (64bit)

set log=\\spc\NETLOGON\Scripts\filesStart\logs\Office\Office365_%computername%.log
IF defined o365 (
    Echo "Office 365 erkannt"
    Echo "Office 365 erkannt"> %log%
    Echo Start %date% %time%>> %log%
    ECHO UninstallString365=%o365%>> %log%
    Echo Client "%computername%" wird für Deinstallation überprüft>> %log%

    set "TRUE="
    IF "%computername%"=="V01WIN7-64.." set TRUE=1
    IF "%computername%"=="EDV-1510d..." set TRUE=1

    IF defined TRUE (
        echo Office-Deinstallation wird in die Wege geleitet>> %log%
        call %o365%>> %log%
        Echo %date% %time%>> %log%
        echo Office365-Installation wird in die Wege geleitet>> %log%
        call \\spc\NETLOGON\Scripts\files\Office\ODT\deploymenttool\Office365_2016_16\setup.exe /configure \\spc\NETLOGON\Scripts\files\Office\ODT\deploymenttool\Office365_2016_16\configuration32bit.xml>> %log%

    )else (
        echo Client ist für Deinstallation nicht ausgewählt worden>> %log%
    )
    Echo Ende %date% %time%>> %log%
    goto ende
)

set log=\\spc\NETLOGON\Scripts\filesStart\logs\Office\Office2013_%computername%.log
IF defined o2013 (
    Echo "Office 2013 erkannt"
    Echo "Office 2013 erkannt"> %log%
    Echo Start %date% %time%>> %log%
    ECHO UninstallString2013=%o2013%>> %log%
    Echo Client "%computername%" für Deinstallation wird überprüft>> %log%

    set "TRUE="
    IF "%computername%"=="V01WIN7-64.." set TRUE=1
    IF "%computername%"=="EDV-1510d..." set TRUE=1

    IF defined TRUE (
        echo Office-Deinstallation wird in die Wege geleitet>> %log%
        call %o2013%>> %log%
        Echo %date% %time%>> %log%
        echo Office365-Installation wird in die Wege geleitet>> %log%
        call \\spc\NETLOGON\Scripts\files\Office\ODT\deploymenttool\Office365_2016_16\setup.exe /configure \\spc\NETLOGON\Scripts\files\Office\ODT\deploymenttool\Office365_2016_16\configuration32bit.xml>> %log%

    )else (
        echo Client ist für Deinstallation nicht ausgewählt worden>> %log%
    )
    Echo Ende %date% %time%>> %log%
    goto ende
)

set log=\\spc\NETLOGON\Scripts\filesStart\logs\Office\Office2010_%computername%.log
IF defined o2010 (
    Echo "Office 2010 erkannt"
    Echo "Office 2010 erkannt"> %log%
    Echo Start %date% %time%>> %log%
    ECHO UninstallString2010=%o2010%>> %log%
    Echo Client "%computername%" wird für Deinstallation überprüft>> %log%

    set "TRUE="
    IF "%computername%"=="V01WIN7-64.." set TRUE=1
    IF "%computername%"=="EDV-1510d..." set TRUE=1
    IF "%computername%"=="VERTR03-1211.." set TRUE=1
    IF "%computername%"=="VERTR02-1706" set TRUE=1

    IF defined TRUE (
        echo Office-Deinstallation wird in die Wege geleitet>> %log%
        call %o2010%>> %log%
        Echo %date% %time%>> %log%
        echo Office365-Installation wird in die Wege geleitet>> %log%
        call \\spc\NETLOGON\Scripts\files\Office\ODT\deploymenttool\Office365_2016_16\setup.exe /configure \\spc\NETLOGON\Scripts\files\Office\ODT\deploymenttool\Office365_2016_16\configuration32bit.xml>> %log%

    )else (
        echo Client ist für Deinstallation nicht ausgewählt worden>> %log%
    )
    Echo Ende %date% %time%>> %log%
    goto ende
)

:error
echo fehler %errorlevel%
echo Kein gültiges Office erkannt
set log=\\spc\NETLOGON\Scripts\filesStart\logs\Office\OfficeXX_%computername%.log
Echo Kein gültiges Office erkannt> %log%

Echo Berechtigung zur Neuinstallation wird für "%computername% geprüft>> %log%
    set "TRUE="
    IF "%computername%"=="VWIN10-TEST01" set TRUE=1
    IF "%computername%"=="VERTR03-1211.." set TRUE=1
    IF "%computername%"=="VERTR02-1706" set TRUE=1

    IF defined TRUE (
        echo Office365-Installation wird in die Wege geleitet>> %log%
        Echo Start %date% %time%>> %log%
        call \\spc\NETLOGON\Scripts\files\Office\ODT\deploymenttool\Office365_2016_16\setup.exe /configure \\spc\NETLOGON\Scripts\files\Office\ODT\deploymenttool\Office365_2016_16\configuration32bit.xml>> %log%

    )else (
        echo Client ist für Neuinstallation nicht ausgewählt worden>> %log%
    )
    Echo Ende %date% %time%>> %log%

:ende
echo ende