Catégories
Informatique

Assigner TeamViewer à une entreprise automatiquement via un script Jamf Pro

TeamViewer l’outil de prise en main à distance supporte un réglage dit d’assignement, qui aide à se connecter sans avoir besoin d’obtenir un ID/mot de passe de la part de vos utilisateurs. Nous allons donc voir un script qui permet de l’automatiser, et idéalement le pousser dans votre MDM Jamf Pro.

Une documentation fouilli (et pas fouillée)

TeamViewer c’est pratique pour prendre la main sur les ordinateurs de collaborateurs ou de clients dans le cadre du support, mais la documentation en ligne fournie par la marque est – a minima – pourrie.. et la société fait plein de changements dans ses produits désormais nommés TeamViewer Remote, TeamViewer (Classic), TeamViewer Tensor et TeamViewer Tensor (Classic).. sans compter sur TeamViewer Frontline. Ca fait qu’en lisant la doc, on ne sait jamais trop à quoi elle s’applique.

Exemple flagrant avec la page qui parle de comment assigner un appareil qui commence par « You can push the TeamViewer to your devices via command line. Here is how to proceed. » ce qui ne veut pas dire grand chose. Bef enough ranting.

Comment ça marche en court?

On peut assigner un client TeamViewer (le logiciel qui s’exécute sur une machine) par son ID – son identifiant unique .. à un groupe d’appareils qui se retrouve dans votre console TeamViewer.

Une fois assignés, vous pouvez vous y connecter en un clic!

Ci dessus un exemple de la console d’un client dans laquelle les ordinateurs sont regroupés dans « My computers« . Bien sûr il est possible de faire plusieurs groupes selon vos besoins.

Le script!

La communauté se débrouille autour de la mauvaise documentation de l’éditeur et a créé ses propres scripts.

Voici celui que l’on utilise autour de TeamViewer, proposé par Martin « z-bckr » et très légèrement édité par nos soins pour ajouter l’accès facile.

Ce script fonctionne avec la version Host et « full » de TeamViewer:

#!/bin/bash
#
# Script to run the TeamViewer Assignment Helper
# works for the full client and the host version
#
# Parameter $4 = Assignment ID
#


if [[ -z $4 ]]; then
    echo "$(date): No teamviewer assignement ID provided."
    exit 1
else
    tv_assignmentID="$4"
fi

# precheck - installed TeamViewer Version
if [ -f '/Applications/TeamViewerHost.app/Contents/Helpers/TeamViewer_Assignment' ]; then
    echo "$(date): TeamViewer Host installed"
    tv_service="/Applications/TeamViewerHost.app/Contents/MacOS/TeamViewer_Service"
    tv_assignmentHelper="/Applications/TeamViewerHost.app/Contents/Helpers/TeamViewer_Assignment"
elif [ -f '/Applications/TeamViewer.app/Contents/Helpers/TeamViewer_Assignment' ]; then
    echo "$(date): TeamViewer Full Client installed"
    tv_service="/Applications/TeamViewer.app/Contents/MacOS/TeamViewer_Service"
    tv_assignmentHelper="/Applications/TeamViewer.app/Contents/Helpers/TeamViewer_Assignment"
else
    echo "$(date): No TeamViewer Assignment helper found. TeamViewer might not be installed"
    exit 1
fi

# teamviewer processes
# get all running teamviewer related processes and count them
processCount=$(pgrep -f "$tv_service" | wc -l)
counter=0
serviceStarted="false"
startTeamViewerService() {
    echo "$(date): Start TeamViewer Service"
   /bin/launchctl load /Library/LaunchDaemons/com.teamviewer.teamviewer_service.plist
   serviceStarted="true"
}

# timeout after 3 minutes (36x sleep for 5 sec)
while [[ $counter -le 36 ]]; do
    if [[ $processCount -eq 1 ]]; then
        echo "$(date): TeamViewer is running, run assignment"
        tv_hostname="$(hostname -s) | $(id -P $(stat -f%Su /dev/console) | cut -d : -f 8)"
       
        echo "$(date): Run TeamViewer Assignment"
        ${tv_assignmentHelper} -assignment_id "$tv_assignmentID"
        break
       
    else
        echo "$(date): Waiting for TeamViewer to start"
        if [[ "$serviceStarted" == "false" ]]; then
            startTeamViewerService
        fi
        sleep 5
        ((counter++))
    fi
done

Que fait ce script ?

Il va lire le nom de l’utilisateur actuel, tenter d’assigner le client TeamViewer installé via l’appel de l’exécutable auquel on passe un paramètre.

Comment déployer le script

Créez ID d’attribution

Tout d’abord créez un ID d’attribution aussi appelée ID d’affectation, ID de configuration de déploiement, parce que chez TeamViewer ils n’ont pas su choisir un seul terme. Leur guide est ici..

Ajoutez le script à Jamf Pro

Ajoutez le script à vos scripts Jamf Pro et renseignez le label du paramètre dans les options du script :

  • Paramètre 4 : ID d’attribution

Créez une Policy

Créez une Policy dans Jamf Pro qui aura comme paramètres :

  • Statut : Enabled
  • Trigger : au choix pour vous, par exemple Recurring Check-in
  • Execution Frequency : vous pouvez faire tourner cette policy régulièrement au cas où les utilisateurs changent les réglages de leur TeamViewer
  • Scope : Idéalement créez un smart group qui ne fait tourner cette Policy que sur les ordinateurs ayant un client TeamViewer installé, pour cela nous utilisons un Smart Group de notre côté
Smart group Jamf Pro et Teamviewer

Niveau contenu, choisissez que votre Policy exécute un script, et renseignez le paramètre de celui-ci dans Parameter Values sinon le script ne marchera pas.

Bien sûr adaptez tout ceci à vos besoins, chacun ayant un usage différent.

En bonus: l’Extension Attribute

Dans Jamf Pro vous pouvez créer des scripts (entre autres) qui obtiennent des informations personnalisées depuis les ordinateurs lors qu’ils soumettent leur inventaire à Jamf Pro. On appelle cela des Extension Attributes.

Un utilisateur de la communauté Jamf (toujours Martin – z-bckr) a créé un tel script pour récupérer les informations d’assignement de TeamViewer, le voici :

#!/bin/sh
RESULT='Not installed'
if [[ -e '/Applications/TeamViewer.app' || -e '/Applications/TeamViewerHost.app' ]]; then
    RESULT='Not assigned'
    AccountName=$(defaults read /Library/Preferences/com.teamviewer.teamviewer.preferences.plist OwningManagerAccountName 2>/dev/null)
    CompanyName=$(defaults read /Library/Preferences/com.teamviewer.teamviewer.preferences.plist OwningManagerCompanyName 2>/dev/null)

    if [[ -n "$AccountName" && -n "$CompanyName" ]]; then
        RESULT="$AccountName,$CompanyName"
    fi
fi
/bin/echo "<result>$RESULT</result>"

Il retourne donc le nom de compte & de société assignés à la machine. Vous pouvez personnaliser ce script pour obtenir d’autres infos bien sûr.

Laisser un commentaire