Seite 1 von 2

Teams-Paket und Funktion „Meeting-Erlebnis“

Veröffentlicht: 14. November 2020 - 11:05 Uhr
von Pierre Baridon
Hallo zusammen,

Unsere Nutzer haben uns schon seit einiger Zeit nach der Teams-Funktion "Meeting-Erlebnis aktivieren / Zusammen-Modus" gefragt, die seit diesem Sommer / Anfang September verfügbar ist.
Togethermode.png
Togethermode.png (53,35 KB) 11889 Mal angesehen
Diese Funktion war jedoch (mit der gleichen Clientversion) bei eigenständigen Installationen verfügbar, nicht aber bei Installationen über das Teams-Paket (das zusammen mit dem WAPT-Paket für alle Benutzer auf der Workstation in einer festen Version bereitgestellt wurde).
Nach einiger Recherche wurde mir klar, dass diese Funktion in VDI-Umgebungen nicht verfügbar ist.
Und die Tatsache, dass die VDI-Umgebung bei der Paketinstallation simuliert wird, blockiert diese Funktionalität effektiv.

Um das zu umgehen, habe ich das Skript so angepasst, dass die „VDI“-Registry-Einträge nach der MSI-Installation gelöscht werden. Und dann, wie von Zauberhand, erscheint die lang ersehnte Funktionalität, sobald der Teams-Cache geleert ist.

Glauben Sie, dass das Löschen der "VDI"-Registry-Einträge nach der Installation des MSI-Pakets Auswirkungen haben könnte?

Aufrichtig,

Felsen

Betreff: Teams-Paket und Funktion „Besprechungserlebnis“

Veröffentlicht: 16. November 2020 - 09:56 Uhr
von Gaetan
Hallo,
vielen Dank für das Feedback. Ich hatte dasselbe vor.

Könnten Sie mir bitte Ihr Skript zur Verfügung stellen? Ich könnte es in einer Testumgebung mit 30 Rechnern prüfen und sehen, ob es Nebenwirkungen gibt.
Danke.

Betreff: Teams-Paket und Funktion „Besprechungserlebnis“

Veröffentlicht: 17. November 2020 - 09:45 Uhr
von Yoann
Hallo,

natürlich hat das Auswirkungen.

Die Registrierungsschlüssel werden hinzugefügt, um eine VDI-Umgebung zu simulieren und die Installation mit dem Argument ALLUSER=1 (ohne das „S“) zu ermöglichen.
Dadurch wird Microsoft Teams im C:\Program Files (x86)\Microsoft\Teams und nicht im %APPDATA%-Verzeichnis jedes Benutzers installiert.

Ich weiß nicht, welche Folgen das Löschen der Registrierungsschlüssel nach der Installation haben könnte.

Viele Grüße.

Betreff: Teams-Paket und Funktion „Besprechungserlebnis“

Veröffentlicht: 17. November 2020 - 10:20 Uhr
von Gaetan
Nach der Installation sollte es keine Probleme geben.
Für Updates müssen Sie diese lediglich neu installieren bzw. deinstallieren.

Betreff: Teams-Paket und Funktion „Besprechungserlebnis“

Veröffentlicht: 17. November 2020 – 22:40 Uhr
von Pierre Baridon
Gaetan schrieb: 16. Nov. 2020 - 9:56 Uhr Hallo,
danke für das Feedback. Ich hatte dasselbe vor.

Könntest du mir bitte dein Skript zur Verfügung stellen? Ich könnte es in einer Testumgebung mit 30 Rechnern prüfen und sehen, ob es Nebenwirkungen gibt.
Danke.
Guten Morgen,
Hier ist der Code für das angepasste Paket (verwendet mit Version 1.3.0.28779 des Teams-Installationsprogramms):
2 Änderungen:
- Löschen der VDI-Registrierungsschlüssel nach der Installation
- Bereinigen des Benutzerprofils bei der Sitzungseinrichtung

Es wird derzeit auf etwa fünfzig Rechnern getestet. Falls jemand eine Möglichkeit findet, die Einstellung so zu ändern, dass das gesamte Benutzerprofil nicht gelöscht wird….

Code: Alle auswählen

# -*- coding: utf-8 -*-
from setuphelpers import *
import json
import platform
import time

#{731F6BAA-A986-45A4-8936-7C3AAAAA760B}      Teams Machine-Wide Installer        1.3.0.12058         MsiExec.exe /I{731F6BAA-A986-45A4-8936-7C3AAAAA760B}

uninstallkey = []

# Installation procedure: https://docs.microsoft.com/fr-fr/microsoftteams/teams-for-vdi#install-or-update-the-teams-desktop-app-on-vdi

# Defining variables
bin_name_string = 'Teams_windows_%s_x64.msi'
bin_name_temp = 'Teams_windows_x64.msi'
url_dl = "https://teams.microsoft.com/downloads/desktopurl?env=production&plat=windows&arch=x64&managedInstaller=true&download=true"
silent_args = 'OPTIONS="noAutoStart=true" ALLUSER=1' #OPTIONS="noAutoStart=true" ALLUSER=1 ALLUSERS=1
#silent_args = 'ALLUSER=1' #OPTIONS="noAutoStart=true" ALLUSER=1 ALLUSERS=1
app_name_short = 'Teams'
app_dir = makepath(programfiles32,'Microsoft','Teams')
app_path = makepath(app_dir, 'current','Teams.exe')
#sys_json_setup = makepath(app_dir,'setup.json')
#json_setup_content =  json.loads('{"noAutoStart":true,"--exeName":"Teams.exe"}')


def install():
    # Initializing variables
    package_version = control.version.split('-')[0]
    bin_name = bin_name_string % package_version
    app_name = control.name

    # Uninstalling older versions if found
    for uninstall in installed_softwares(name=app_name_short):
        if Version(uninstall['version']) < Version(package_version):
            print('Older %s version found (%s)' % (app_name,uninstall['version']))
            print('Removing: %s (%s)' % (uninstall['name'],uninstall['version']))
            run(uninstall_cmd(uninstall['key']))
            time.sleep(15)

    """ # Force uninstalling to make sure that we are using system-wide installation
    for uninstall in installed_softwares(name=app_name_short):
        print('Removing: %s' % uninstall['name'])
        run(uninstall_cmd(uninstall['key']))
        time.sleep(5) """

    # Adding fake WVD/VDI RegKey
    # Un/comment if needed
    registry_set(HKEY_LOCAL_MACHINE,r'SOFTWARE\VMware, Inc.\VMware VDM\Agent','','')
    registry_set(HKEY_LOCAL_MACHINE,r'SOFTWARE\Citrix\PortICA','','')
    registry_set(HKEY_LOCAL_MACHINE,r'SOFTWARE\Microsoft\Teams','IsWVDEnvironment',1,type=REG_DWORD)

    # Installing the package system wide
    print('Installing: %s' % bin_name)
    install_msi_if_needed(bin_name,
        properties=silent_args,
        min_version=package_version,
        accept_returncodes=[0,3010,1605,1614,1641],
        timeout=900)

    # Disabling AutoStart
    if iswin64():
        registry_delete(HKEY_LOCAL_MACHINE,r'SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run','Teams')
    registry_delete(HKEY_LOCAL_MACHINE,r'SOFTWARE\Microsoft\Windows\CurrentVersion\Run','Teams')

    # Removing shortcuts
    remove_desktop_shortcut(app_name)

    # Adding Firewall Rules for Teams
    run('netsh advfirewall firewall add rule name="%s" dir=in action=allow program="%s" enable=yes protocol=TCP profile=domain' % (app_name,app_path))
    run('netsh advfirewall firewall add rule name="%s" dir=in action=allow program="%s" enable=yes protocol=TCP profile=private' % (app_name,app_path))
    run('netsh advfirewall firewall add rule name="%s" dir=in action=allow program="%s" enable=yes protocol=UDP profile=domain' % (app_name,app_path))
    run('netsh advfirewall firewall add rule name="%s" dir=in action=allow program="%s" enable=yes protocol=UDP profile=private' % (app_name,app_path))

    # clean VDI register key (modif PB)
    if reg_value_exists(HKEY_LOCAL_MACHINE,r'SOFTWARE\Microsoft\Teams','IsWVDEnvironment'):
        registry_delete(HKEY_LOCAL_MACHINE,r'SOFTWARE\Microsoft\Teams','IsWVDEnvironment')

    if reg_key_exists(HKEY_LOCAL_MACHINE,r'SOFTWARE\VMware, Inc.'):
        registry_deletekey(HKEY_LOCAL_MACHINE,r'SOFTWARE\VMware, Inc.\VMware VDM\Agent','',force=False)
        registry_deletekey(HKEY_LOCAL_MACHINE,r'SOFTWARE\VMware, Inc.\VMware VDM','',force=False)
        registry_deletekey(HKEY_LOCAL_MACHINE,r'SOFTWARE\VMware, Inc.','',force=False)

    if reg_key_exists(HKEY_LOCAL_MACHINE,r'SOFTWARE\Citrix\PortICA'):
        registry_deletekey(HKEY_LOCAL_MACHINE,r'SOFTWARE\Citrix\PortICA','',force=False)



def uninstall():
    # Initializing variables
    processes_to_kill = control.impacted_process.split(',')

    # Cleaning fake WVD/VDI RegKey properly
    # Un/comment if needed
    if reg_value_exists(HKEY_LOCAL_MACHINE,r'SOFTWARE\Microsoft\Teams','IsWVDEnvironment'):
        registry_delete(HKEY_LOCAL_MACHINE,r'SOFTWARE\Microsoft\Teams','IsWVDEnvironment')
    if reg_key_exists(HKEY_LOCAL_MACHINE,r'SOFTWARE\VMware, Inc.'):
        registry_deletekey(HKEY_LOCAL_MACHINE,r'SOFTWARE\VMware, Inc.\VMware VDM\Agent','',force=False)
        registry_deletekey(HKEY_LOCAL_MACHINE,r'SOFTWARE\VMware, Inc.\VMware VDM','',force=False)
        registry_deletekey(HKEY_LOCAL_MACHINE,r'SOFTWARE\VMware, Inc.','',force=False)
    if reg_key_exists(HKEY_LOCAL_MACHINE,r'SOFTWARE\Citrix\PortICA'):
        registry_deletekey(HKEY_LOCAL_MACHINE,r'SOFTWARE\Citrix\PortICA','',force=False)

    # Removing remaining files
    if isdir(app_dir):
        killalltasks(processes_to_kill)
        time.sleep(15)
        remove_tree(app_dir)


def session_setup():
    # Initializing variables
    user_conf_dir = makepath(application_data,'Microsoft','Teams')
    json_config = makepath(user_conf_dir,'desktop-config.json')
    json_settings = makepath(user_conf_dir,'settings.json')

    user_app_dir = makepath(user_local_appdata,'Microsoft','Teams')
    user_app_path = makepath(user_app_dir,'current','Teams.exe')
    user_app_updater = makepath(user_app_dir,'Update.exe')
    #user_app_version = registry_readstring(HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Uninstall\Teams','DisplayVersion')

    user_app_progdata_dir = makepath('C:','ProgramData',get_current_user(),'Microsoft','Teams')
    user_app_progdata_path = makepath(user_app_progdata_dir,'current','Teams.exe')
    user_app_progdata_updater = makepath(user_app_progdata_dir,'Update.exe')

    user_silent_args_uninst = '--uninstall -s'
    processes_to_kill = control.impacted_process.split(',')

    # Uninstalling from user environment (procedure: https://docs.microsoft.com/microsoftteams/msi-deployment)
    if isfile(user_app_path):
        print('Uninstalling Microsoft Teams from user environment')
        killalltasks(processes_to_kill)
        run('"%s" %s' % (user_app_updater,user_silent_args_uninst))
    if isdir(user_app_dir):
        remove_tree(user_app_dir)
    if isfile(user_app_progdata_path):
        print('Uninstalling Microsoft Teams from user ProgramData environment')
        killalltasks(processes_to_kill)
        run('"%s" %s' % (user_app_progdata_updater,user_silent_args_uninst))
    if isdir(user_app_progdata_dir):
        killalltasks(processes_to_kill)
        remove_tree(user_app_progdata_dir)

    if reg_value_exists(HKEY_CURRENT_USER,r'Software\Microsoft\Office\Teams','PreventInstallationFromMsi'):
        registry_delete(HKEY_CURRENT_USER,r'Software\Microsoft\Office\Teams','PreventInstallationFromMsi')

    # suppression autoremplissage uid (modif PB)
    if not reg_value_exists(HKEY_CURRENT_USER,r'Software\Microsoft\Office\Teams','SkipUpnPrefill'):
        registry_set(HKEY_CURRENT_USER,r'Software\Microsoft\Office\Teams','SkipUpnPrefill',1,type=REG_DWORD)

    # nettoyage profil teams utilisateur (un peu violent mais le nettoyage du cache ne suffisant pas...)
    if isdir(user_conf_dir):
        killalltasks(processes_to_kill)
        time.sleep(15)
        remove_tree(user_conf_dir)

    # Define user settings (procedure: https://techcommunity.microsoft.com/t5/microsoft-teams/how-to-disable-check-for-updates-in-microsoft-teams/m-p/54644)
    print('Setting up user settings')
    if not isdir(user_conf_dir):
        mkdirs(user_conf_dir)

    # desktop-config.json
    if isfile(json_config):
        json_config_content = load_json(json_config)
    else:
        json_config_content = json.loads('{"appPreferenceSettings":{}}')
        #json_config_content = json.load({})

    json_config_content['appPreferenceSettings']['registerAsIMProvider'] = False
    json_config_content['appPreferenceSettings']['openAsHidden'] = True
    json_config_content['appPreferenceSettings']['runningOnClose'] = True
    json_config_content['openAtLogin'] = False
    json_config_content['isForeground'] = True
    json_config_content['wamFallbackInProgress'] = False
    json_config_content['disableWarningOnOpenKeyRegistered'] = True
    json_config_content['isAppFirstRun'] = False

    write_json(json_config,json_config_content)

    # settings.json
    if isfile(json_settings):
        json_settings_content = load_json(json_settings)
    else:
        json_settings_content = json.loads('{"baseSettings":{},"initializedSettings":{},"preauthSettings":{"samplingRules":{}}}')
        #json_settings_content = json.load({})

    # Update part
    json_settings_content['baseSettings']['enableBlockSilentUpdate'] = True
    json_settings_content['baseSettings']['disableAllUsersAutoUpdate'] = True
    json_settings_content['baseSettings']['enableUnAuthUpdates'] = False
    """ json_settings_content['initializedSettings']['disableAllUsersAutoUpdate'] = True
    json_settings_content['preauthSettings']['disableAllUsersAutoUpdate'] = True
    json_settings_content['preauthSettings']['samplingRules']['updateNotificationEnabled'] = False """
    # Telemetry part
    json_settings_content['baseSettings']['enableAdalMacTelemetryV2'] = False
    json_settings_content['baseSettings']['enableAdalWinTelemetry'] = False
    json_settings_content['baseSettings']['proplusAdditionalTelemetryEnabled'] = False
    json_settings_content['baseSettings']['regionInTelemetryEnabled'] = False
    json_settings_content['baseSettings']['tenantRegionInTelemetryEnabled'] = False
    """ json_settings_content['initializedSettings']['tenantRegionInTelemetryEnabled'] = False
    json_settings_content['preauthSettings']['tenantRegionInTelemetryEnabled'] = False
    json_settings_content['preauthSettings']['samplingRules']['tenantRegionInTelemetryEnabled'] = False """
    # Other part
    json_settings_content['baseSettings']['enableRegisterProtocolToRoot'] = False
    """ json_settings_content['preauthSettings']['registerAddinOnMeetingPolicySettingsSync'] = False """

    write_json(json_settings,json_settings_content)


def update_package():
    print('Download/Update package content from upstream binary sources')

    # Getting proxy informations from WAPT settings
    proxy = {}
    if platform.system()=='Windows' and isfile(makepath(user_local_appdata(),'waptconsole','waptconsole.ini')):
        proxywapt = inifile_readstring(makepath(user_local_appdata(),'waptconsole','waptconsole.ini'),'global','http_proxy')
        if proxywapt :
            proxy = {'http':proxywapt,'https':proxywapt}

    # Initializing variables
    latest_bin = bin_name_temp

    # Downloading latest binaries
    if isfile(bin_name_temp):
        remove_file(bin_name_temp)
    if not isfile(latest_bin):
        print('Downloading: ' + latest_bin)
        wget(url_dl,latest_bin,proxies=proxy)

        # Get version from file
        version_from_file = get_msi_properties(latest_bin)['ProductVersion']
        version = version_from_file
        old_latest_bin = latest_bin
        latest_bin = bin_name_string % version
        if isfile(latest_bin):
            remove_file(latest_bin)
        os.rename(old_latest_bin,latest_bin)

		# Change version of the package
        pe = PackageEntry().load_control_from_wapt('.')
        pe.version = '%s-%s'%(version,int(pe.version.split('-',1)[1])+1)
        pe.save_control_to_wapt('.')
        print('Changing version to ' + pe.version + ' in WAPT\\control')
        print('Update package done. You can now build-upload your package')
    else:
        print('This package is already up-to-date')

    # Deleting outdated binaries
    for bin_in_dir in glob.glob('*.exe') or glob.glob('*.msi') or glob.glob('*.zip'):
        if bin_in_dir != latest_bin :
            print('Outdated binary: ' + bin_in_dir + ' Deleted')
            remove_file(bin_in_dir)




def load_json(json_filename):
    with open(json_filename) as json_file:
        data = json.load(json_file)
    return data


def write_json(json_filename,data):
    with open(json_filename, 'w') as outfile:
        json.dump(data, outfile, sort_keys=True, indent=4, default=str)


Betreff: Teams-Paket und Funktion „Besprechungserlebnis“

Veröffentlicht: 18. November 2020 - 09:01 Uhr
von Gaetan
Danke, ich werde es testen. =)

Betreff: Teams-Paket und Funktion „Besprechungserlebnis“

Veröffentlicht: 19. November 2020 - 12:03 Uhr
von jpele
Hallo,

ich warte auf Ihr Feedback, bevor ich diesen Artikel in den Shop aufnehme. ;)

Betreff: Teams-Paket und Funktion „Besprechungserlebnis“

Veröffentlicht: 26. November 2020 – 17:13 Uhr
von Pierre Baridon
Hallo,
der Test an rund fünfzig Maschinen war erfolgreich; wir gehen nun zur Serienproduktion mit 1700 Maschinen über.
Mit freundlichen Grüßen,
Pierre

Betreff: Teams-Paket und Funktion „Besprechungserlebnis“

Veröffentlicht: 26. November 2020 – 21:11 Uhr
von Gaetan
Für mich war auch der Rückweg kein Problem ;)

Betreff: Teams-Paket und Funktion „Besprechungserlebnis“

Veröffentlicht: 27. November 2020 – 14:55 Uhr
von jpele
Guten Morgen,

Vielen Dank für Ihr Feedback, ich habe das Paket entsprechend angepasst.
Haben Sie Rückmeldungen von Nutzern erhalten, die sich sehr regelmäßig, teilweise sogar täglich, erneut mit Teams verbinden mussten?
Für den Fall, dass ich das Profil einmalig bereinigt habe, hier der Codeausschnitt.

Code: Alle auswählen

    # No longer Prefill UPN
    registry_set(HKEY_CURRENT_USER,r'Software\Microsoft\Office\Teams','SkipUpnPrefill',1,type=REG_DWORD)

    # Cleaning up Teams profile once
    if registry_readstring(HKEY_CURRENT_USER,r'Software\WAPT\Teams','CleanupOnce') != 'Done':
        if isdir(user_conf_dir):
            killalltasks(processes_to_kill)
            time.sleep(2)
            remove_tree(user_conf_dir)
        registry_set(HKEY_CURRENT_USER,r'Software\WAPT\Teams','CleanupOnce','Done')
Wir müssen noch überprüfen, ob die Option beim nächsten Update nicht verschwindet, aber es sollte alles in Ordnung sein ;)

Aufrichtig,
Jimmy