Points à retenir
- L’automatisation améliore l’efficacité: Le script automatise la récupération et l’organisation des URL des sessions ScreenConnect, ce qui améliore considérablement l’efficacité de la gestion de l’assistance à distance.
- Personnalisable pour différents environnements: La flexibilité des paramètres tels que l’ID d’instance et le domaine permet de répondre aux différents types de configuration de ScreenConnect.
- Réduit les tâches manuelles et les erreurs: L’automatisation de la génération d’URL minimise la saisie manuelle, ce qui réduit le risque d’erreurs et permet de gagner du temps.
- Prise en compte de plusieurs instances: Le script identifie et signale les conflits d’URL potentiels dans les environnements comportant plusieurs instances ScreenConnect.
- La sécurité est primordiale: Bien que le script soit efficace, il est essentiel de maintenir les bonnes pratiques de sécurité dans l’environnement où il est utilisé.
- Intégration avec NinjaOne: L’intégration de ces scripts dans des plateformes telles que NinjaOne permet de simplifier et optimiser considérablement les processus de gestion à distance.
L’automatisation de la gestion informatique change la donne, en simplifiant les processus et en améliorant l’efficacité. Les scripts qui simplifient les tâches complexes en sont un bon exemple. Dans ce contexte, nous nous penchons sur un script conçu pour l’application ConnectWise ScreenConnect sur les systèmes Linux. Son rôle dans la gestion efficace des sessions d’assistance à distance en fait un atout précieux pour les professionnels de l’informatique et les fournisseurs de services gérés (MSP).
Contexte
ConnectWise ScreenConnect est un outil d’assistance à distance populaire, largement utilisé par les équipes informatiques et les entreprises MSP pour sa fiabilité et sa facilité d’utilisation. Ce script répond en particulier à la nécessité de récupérer automatiquement les URL de lancement de ScreenConnect et de les stocker dans un champ personnalisé. Il est conçu pour les environnements où un accès rapide et organisé à plusieurs sessions à distance est crucial.
Le script :
#!/usr/bin/env bash # # Description: Retrieves the ConnectWise ScreenConnect launch URL and saves it to a custom field (defaults to screenconnectURL). Requires the domain used for ScreenConnect and a Session Group the machine is a part of to successfully build the URL. # By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use. # Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. # Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. # Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. # Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. # Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. # Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. # EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA). # # Preset Parameter: --instanceId "ReplaceMeWithYourInstanceId" # The Instance ID for your instance of ScreenConnect. Used to differentiate between multiple installed ScreenConnect instances. # To get the instance ID, you can see it in the program name, e.g., connectwisecontrol-yourinstanceidhere. # It's also available in the ScreenConnect Admin Center (Administration > Advanced > Server Information). # # Preset Parameter: --screenconnectDomain "replace.me" # The domain used for your ScreenConnect instance. # # Preset Parameter: --sessionGroup "ReplaceMe" # A session group that contains all your machines (defaults to All Machines). # # Preset Parameter: --customField "ReplaceMeWithAnyMultilineCustomField" # The custom field you would like to store this information in. # # Preset Parameter: --help # Displays some help text. # These are all our preset parameter defaults. You can set these = to something if you would prefer the script defaults to a certain parameter value. _arg_instanceId= _arg_screenconnectdomain= _arg_sessiongroup="All Machines" _arg_customfield="screenconnectURL" _fieldValue= # Help text function for when invalid input is encountered print_help() { printf '\n\n%s\n\n' 'Usage: [--instanceId|-i <arg>] [--screenconnectDomain|-d <arg>] [--sessionGroup|-g <arg>] [--customField|-c <arg>] [--help|-h]' printf '%s\n' 'Preset Parameter: --instanceid "ReplaceWithYourInstanceID"' printf '\t%s\n' "Replace the text encased in quotes with your instance id. You can see the instance id in the ScreenConnect Admin Center (Administration > Advanced > Server Information). It's also usually present in the application name on already installed instance. e.g., connectwisecontrol-yourinstanceid." printf '\n%s\n' 'Preset Parameter: --screenconnectDomain "replace.me"' printf '\t%s' "Replace the text encased in quotes with the domain used for ConnectWise ScreenConnect. e.g. 'example.screenconnect.com'" printf '\n%s\n' 'Preset Parameter: --sessionGroup "Replace Me"' printf '\t%s' "Replace the text encased in quotes with the name of a Session Group that contains all of your machines e.g., 'All Machines'" printf '\n%s\n' 'Preset Parameter: --customField "replaceMe"' printf '\t%s' "Replace the text encased in quotes with the name of a custom field you'd like to store this information to (defaults to screenconnectUrl). E.g. 'screenconnectUrl'" printf '\n%s\n' 'Preset Parameter: --help' printf '\t%s\n' "Displays this help menu." } # Determines whether or not help text is necessary and routes the output to stderr die() { local _ret="${2:-1}" echo "$1" >&2 test "${_PRINT_HELP:-no}" = yes && print_help >&2 exit "${_ret}" } # Grabbing the parameters and parsing through them. parse_commandline() { while test $# -gt 0; do _key="$1" case "$_key" in --screenconnectdomain | --screenconnectDomain | --domain | -d) test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1 _arg_screenconnectdomain=$2 shift ;; --screenconnectdomain=*) _arg_screenconnectdomain="${_key##--screenconnectdomain=}" ;; --instanceId | --instanceid | -i) test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1 _arg_instanceId=$2 shift ;; --instanceid=*) _arg_instanceId="${_key##--instanceid=}" ;; --sessionGroup | --sessiongroup | -g) test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1 _arg_sessiongroup=$2 shift ;; --sessiongroup=*) _arg_sessiongroup="${_key##--sessiongroup=}" ;; --customField | --customfield | -c) test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1 _arg_customfield=$2 shift ;; --customfield=*) _arg_customfield="${_key##--customfield=}" ;; --help | -h) _PRINT_HELP=yes die 0 ;; *) _PRINT_HELP=yes die "FATAL ERROR: Got an unexpected argument '$1'" 1 ;; esac shift done } # Function to set a custom field setCustomField() { echo "$_fieldValue" | /opt/NinjaRMMAgent/programdata/ninjarmm-cli set --stdin "$_arg_customfield" } export PATH=$PATH:/usr/sbin:/usr/bin parse_commandline "$@" # If script form is used, override command-line arguments if [[ -n $screenconnectDomain ]]; then _arg_screenconnectdomain="$screenconnectDomain" fi if [[ -n $sessionGroup ]]; then _arg_sessiongroup="$sessionGroup" fi if [[ -n $instanceId ]]; then _arg_instanceId="$instanceId" fi if [[ -n $customFieldName ]]; then _arg_customfield="$customFieldName" fi # If we weren't given an instance id we should warn that this is not advised. if [[ -z $_arg_instanceId ]]; then echo "WARNING: Without the instance id we will be unable to tell which ScreenConnect instance is yours (if multiple are installed). This could result in the wrong URL being displayed." echo "To get the instance id you can find it in ScreenConnect itself (Admin > Advanced > Server Information > Instance Identifier Fingerprint). It's also in the application name on every installed copy 'connectwisecontrol-yourinstanceidhere'" fi # --screenconnectDomain and --sessionGroup are required. We should also escape the session group given. if [[ -z $_arg_screenconnectdomain || -z $_arg_sessiongroup ]]; then _PRINT_HELP=yes die "FATAL ERROR: Unable to build the URL without the Domain and Session Group!" 1 else _arg_sessiongroup=$(python3 -c "import urllib.parse;print(urllib.parse.quote('$_arg_sessiongroup'))") fi # Double check ScreenConnect is installed installedPkg=$(ls /opt | grep "connectwisecontrol-$_arg_instanceId") if [[ -z $installedPkg ]]; then _PRINT_HELP=no die "FATAL ERROR: It appears ConnectWise ScreenConnect is not installed!" 1 fi # Lets start building some urls for pkg in $installedPkg; do file="/opt/$pkg/ClientLaunchParameters.txt" id=$(grep -Eo 's=.{8}-.{4}-.{4}-.{4}-.{12}' "$file" | sed 's/s=//g' | sed 's/&e=Access//g') instanceid=${pkg//"connectwisecontrol-"/} # We shouldn't have multiple results but if we do we should warn the technician if [[ -n "$launchurls" ]]; then echo "WARNING: Multiple installed instances detected and no instance id was given. One of these urls will be incorrect." launchurls=$( printf '%s\n' "$launchurls" printf '%s\t' "$instanceid" printf '%s\n' "https://$_arg_screenconnectdomain/Host#Access/$_arg_sessiongroup//$id/Join" ) else launchurls=$( printf '%s\t\t' "InstanceID" printf '%s\n' "LaunchURL" printf '%s\t' "$instanceid" printf '%s\t' "https://$_arg_screenconnectdomain/Host#Access/$_arg_sessiongroup//$id/Join" ) fi done # Check that we were successful if [[ -n $launchurls ]]; then echo "Launch URL(s) Created" else _PRINT_HELP=no die "FATAL ERROR: Failed to create Launch URL(s)!" 1 fi # Change how we output the results based on how many urls we received. if [[ $(echo "$launchurls" | wc -l) -gt 2 ]]; then _fieldValue="$launchurls" echo "$_fieldValue" else _fieldValue=$(echo "$launchurls" | tail -n 1 | awk '{print $2}') echo "$_fieldValue" fi echo "Setting Custom Field..." setCustomField exit 0
Accédez à plus de 700 scripts dans le Dojo NinjaOne
Description détaillée
Le script commence par définir des valeurs par défaut pour divers paramètres tels que l’identifiant de l’instance, le domaine, le groupe de session et le champ personnalisé. Ces paramètres sont essentiels car ils déterminent la manière dont le script interagira avec l’environnement ScreenConnect. La fonction parse_commandline interprète les arguments de la ligne de commande, ce qui permet aux utilisateurs de spécifier les détails de ScreenConnect.
Le script vérifie notamment la présence du paquet ScreenConnect dans le système. En cas d’absence, il interrompt l’exécution, ce qui garantit la fiabilité. Il construit ensuite l’URL nécessaire pour lancer une session ScreenConnect en fonction des paramètres fournis. Cette étape est cruciale car elle permet de traduire les données de l’utilisateur en URL exploitables.
En cas d’instances ScreenConnect multiples, le script avertit intelligemment des conflits d’URL potentiels. Cette fonction améliore la connaissance de l’utilisateur et réduit les erreurs dans les environnements multi-instances.
Enfin, le script affiche les URL construites ou les enregistre dans le champ personnalisé spécifié, ce qui permet d’y accéder facilement en cas d’utilisation ultérieure.
Cas d’utilisation potentiels
Imaginez une entreprise MSP chargée de gérer l’infrastructure informatique de plusieurs sites clients. Elle utilise ScreenConnect pour l’assistance à distance, mais se heurte à la gestion de plusieurs URL de session. En utilisant ce script, elle peut rapidement générer et stocker ces URL, ce qui permet des temps de réponse plus rapides et une assistance à distance mieux organisée.
Comparaisons
Les méthodes traditionnelles de gestion des sessions ScreenConnect impliquent souvent la récupération et l’organisation manuelles des URL, ce qui prend du temps et est source d’erreurs. Ce script automatise le processus, ce qui le rend plus efficace et plus précis. Il se distingue des méthodes manuelles par une approche systématique qui réduit la probabilité d’erreurs et permet de gagner un temps précieux.
FAQ
- Le script est-il adaptable à différents environnements ?
- Oui, il permet des paramètres personnalisés tels que l’ID, le domaine, etc., ce qui le rend adaptable à diverses configurations.
- Peut-il gérer plusieurs instances ScreenConnect ?
- Le script signale les conflits d’URL potentiels dans les configurations multi-instances, ce qui permet une vérification manuelle.
- L’utilisation de ce script est-elle sûre ?
- Le script lui-même ne compromet pas la sécurité, mais il garantit que l’environnement dans lequel il est exécuté est sûr.
Implications
Bien que ce script simplifie la gestion des URL, les utilisateurs doivent être conscients des implications en matière de sécurité. Il est essentiel de veiller à ce que les URL soient stockées et accessibles en toute sécurité afin d’empêcher tout accès non autorisé aux sessions à distance.
Recommandations
- Vérifiez toujours les paramètres avant l’exécution.
- Mettez régulièrement à jour les versions les plus récentes du script et de ScreenConnect.
- Suivez les bonnes pratiques de sécurité dans votre environnement pour protéger les URL des sessions à distance.
Conclusion :
L’intégration de tels scripts dans la plateforme NinjaOne peut considérablement améliorer son efficacité. En automatisant des tâches telles que la récupération d’URL pour les sessions à distance, les utilisateurs de NinjaOne peuvent se concentrer davantage sur les activités stratégiques de gestion informatique, ce qui fait de la plateforme un outil encore plus utile pour les professionnels de l’informatique et les entreprises MSP.