Guida completa all’automazione dell’installazione di ConnectWise su macOS

Punti chiave

  • Installazione automatizzata: Lo script automatizza l’installazione di ConnectWise Control su macOS, migliorando l’efficienza degli ambienti IT.
  • Caratteristiche di personalizzazione: Lo script per l’installazione di ConnectWise supporta la personalizzazione delle installazioni con il nome dell’organizzazione, la posizione del dispositivo, il tipo e il reparto.
  • Gestione degli errori: Lo script per l’installazione di ConnectWise include una solida gestione degli errori e una logica di ripetizione per un download affidabile.
  • Flessibilità dei parametri: Offre flessibilità accettando vari formati per gli argomenti della riga di comando.
  • Creazione di URL: Crea dinamicamente l’URL di download in base alle specifiche esigenze organizzative.
  • Controllo pre-installazione: Include un controllo per evitare di reinstallare ConnectWise Control se è già presente.
  • Considerazioni sulla sicurezza: Si sottolinea la necessità di una fonte sicura e di una verifica dell’integrità dei pacchetti.
  • Adattabilità: Pur essendo progettato per macOS, il concetto di questo script per l’installazione di ConnectWise è adattabile ad altri sistemi o software.
  • Integrazione con gli strumenti di gestione IT: Si evidenziano le potenziali sinergie dello script con piattaforme di gestione IT più ampie come NinjaOne.

L’automazione e l’efficienza sono fondamentali nel panorama in continua evoluzione della gestione IT. Semplificare l’installazione di strumenti essenziali, come il software di assistenza remota, non solo fa risparmiare tempo prezioso, ma garantisce anche coerenza tra i vari dispositivi. Questo approccio è particolarmente significativo per i Managed Service Provider (MSP) e per i professionisti IT che gestiscono un certo numero di dispositivi.

Background

ConnectWise Control, precedentemente noto come ScreenConnect, è una popolare soluzione di supporto e accesso da remoto, oltre che di riunione, ampiamente utilizzata nel settore IT. La sua adattabilità e il suo solido set di funzioni la rendono uno strumento indispensabile per gli MSP e i reparti IT. Lo script in questione automatizza l’installazione di ConnectWise Control sui sistemi macOS. Questa automazione è particolarmente importante per i professionisti IT e gli MSP che hanno bisogno di distribuire questo software in modo efficiente su più dispositivi macOS, mantenendo la standardizzazione e riducendo il carico di lavoro manuale.

Lo script per l’installazione di ConnectWise:

#!/usr/bin/env bash
#
# Description: Download and Install ConnectWise ScreenConnect. Supports automatic customization of the company name, device type, location, and other ScreenConnect fields.
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/it/condizioni-utilizzo/
    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: --screenconnectdomain "replace.me"
#   Replace the text encased in quotes to have the script build the download URL and then install ScreenConnect.
#
# Preset Parameter: --useOrgName
#   Modifies your URL to use the organization name in the "Company Name" field in ScreenConnect.
#
# Preset Parameter: --useLocation
#   Modifies your URL to use the Location Name in the "Site" field in ScreenConnect.
#
# Preset Parameter: --useDeviceType
#   Modifies your URL to fill in the "Device Type" field in ScreenConnect. (Either Workstation or Laptop).
#
# Preset Parameter: --Department "REPLACEME"
#   Modifies your URL to fill in the Department name with the text encased in quotes.
#
# Preset Parameter: --skipSleep
#   By default, this script sleeps at a random interval (between 3 and 30 seconds) before downloading the installation file.
#   This option skips the random sleep interval.
#
# 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 automatically assumed a parameter is used.
_arg_instanceId=
_arg_screenconnectdomain=
# For parameters that don't have arguments "on" or "off" is used.
_arg_useOrgName="off"
_arg_useLocation="off"
_arg_useDeviceType="off"
_arg_department=
_arg_filename="ClientSetup.pkg"
_arg_destfolder=/tmp
_arg_skipsleep="off"

# Help text function for when invalid input is encountered
print_help() {
  printf '\n\n%s\n\n' 'Usage: [--screenconnectdomain <arg>] [--useOrgName] [--useLocation] [--useDeviceType] [--department <arg>] [--skipSleep] [-h|--help]'
  printf '\n%s\n' 'Preset Parameter: --screenconnectdomain "replace.me"'
  printf '\t%s\n' "Replace the text encased in quotes with the domain used for ConnectWise ScreenConnect. ex. 'example.screenconnect.com'"
  printf '\n%s\n' 'Preset Parameter: --useOrgName'
  printf '\t%s\n' "Builds the url so the 'Company Name' field in ScreenConnect is filled in with the Organization Name."
  printf '\n%s\n' 'Preset Parameter: --useLocation'
  printf '\t%s\n' "Builds the url so the 'Site Name' field in ScreenConnect is filled in with the Location the device is in in Ninja."
  printf '\n%s\n' 'Preset Parameter: --useDeviceType'
  printf '\t%s\n' "Builds the url so the 'Device Type' field in ScreenConnect is filled in with the detected device type (Laptop or Workstation)."
  printf '\n%s\n' 'Preset Parameter: --department "YourDesiredDepartmentName"'
  printf '\t%s\n' "Builds the url so the 'Department' field in ScreenConnect is filled in with the text encased in quotes."
  printf '\n%s\n' 'Preset Parameter: --skipSleep'
  printf '\t%s\n' "By default this script will sleep at a random interval between 3 and 60 seconds prior to download. Use this option to skip this behavior."
  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 | --domain)
      test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1
      _arg_screenconnectdomain=$2
      shift
      ;;
    --screenconnectdomain=*)
      _arg_screenconnectdomain="${_key##--screenconnectdomain=}"
      ;;
    --useOrgName | --useorgname | --orgname)
      _arg_useOrgName="on"
      ;;
    --useLocation | --useOrgLocation | --uselocation | --location)
      _arg_useLocation="on"
      ;;
    --useDeviceType | --usedevicetype | --devicetype)
      _arg_useDeviceType="on"
      ;;
    --department | --Department)
      test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1
      _arg_department="$2"
      shift
      ;;
    --department=*)
      _arg_department="${_key##--department=}"
      ;;
    --skipsleep | --skipSleep)
      _arg_skipsleep="on"
      ;;
    --help | -h)
      _PRINT_HELP=yes die 0
      ;;
    *)
      _PRINT_HELP=yes die "FATAL ERROR: Got an unexpected argument '$1'" 1
      ;;
    esac
    shift
  done
}

parse_commandline "$@"

# If dynamic script variables are used override the comand line arguments

if [[ -n $screenconnectDomainName ]]; then
  _arg_screenconnectdomain="$screenconnectDomainName"
fi

if [[ -n $useNinjaOrganizationName && $useNinjaOrganizationName == "true" ]]; then
  _arg_useOrgName="on"
fi

if [[ -n $useNinjaLocationName && $useNinjaLocationName == "true" ]]; then
  _arg_useLocation="on"
fi

if [[ -n $addDeviceType && $addDeviceType == "true" ]]; then
  _arg_useDeviceType="on"
fi

if [[ -n $department ]]; then
  _arg_department="$department"
fi

if [[ -n $skipSleep && $skipSleep == "true" ]]; then
  _arg_skipsleep="on"
fi

# This function will download our file when we're ready for that.
downloadFile() {
  i=1
  while [[ $i -lt 4 ]]; do
    if [[ ! $_arg_skipsleep == "on" ]]; then
      sleep_time=$((3 + RANDOM % 60))
      echo "Sleeping for $sleep_time seconds..."
      sleep $sleep_time
    fi

    echo "Download Attempt $i"
    curl -L "$url" -o "$_arg_destfolder/$_arg_filename" -s -f

    file=$_arg_destfolder/$_arg_filename
    if [[ -f $file ]]; then
      echo 'Download was successful!'
      i=4
    else
      echo 'Attempt Failed!'
      ((i += 1))
    fi
  done
}

# If we're not given a download method error out
if [[ -z $_arg_screenconnectdomain ]]; then
  _PRINT_HELP=yes die "FATAL ERROR: The domain you use for ScreenConnect is required to install ScreenConnect." 1
fi

pattern='^http(.?)://(.*)'
if [[ $_arg_screenconnectdomain =~ $pattern ]]; then
  _arg_screenconnectdomain=${_arg_screenconnectdomain//http*:\/\//}
  echo "You accidentally included http with the domain. Using '$_arg_screenconnectdomain' instead."
fi

# If the destination folder doesn't exist create it.
if [[ ! -d $_arg_destfolder ]]; then
  mkdir "$_arg_destfolder"
fi

# If a file already exists with that name remove it.
if [[ -f "$_arg_destfolder/$_arg_filename" ]]; then
  rm "$_arg_destfolder/$_arg_filename"
fi

# Start the build process
echo "Building URL..."
# For anything we put in the url we'll need to escape it as curl won't do this conversion for us.
companyName=$(echo "$NINJA_COMPANY_NAME" | perl -MURI::Escape -ne 'chomp;print uri_escape($_),"\n"')
baseURL="https://$_arg_screenconnectdomain/Bin/$companyName.ClientSetup.pkg?e=Access&y=Guest"

# If the technician specified --useOrgName (or any other switch/flag) we set it to "on" when we parse the parameters
if [[ $_arg_useOrgName == "on" ]]; then
  orgName=$(echo "$NINJA_ORGANIZATION_NAME" | perl -MURI::Escape -ne 'chomp;print uri_escape($_),"\n"')
  baseURL="$baseURL&c=$orgName"
else
  # If they decided to not use that field we just leave it blank so ScreenConnect will skip over it.
  baseURL="$baseURL&c="
fi

if [[ $_arg_useLocation == "on" ]]; then
  location=$(echo "$NINJA_LOCATION_NAME" | perl -MURI::Escape -ne 'chomp;print uri_escape($_),"\n"')
  baseURL="$baseURL&c=$location"
else
  baseURL="$baseURL&c="
fi

if [[ -n $_arg_department ]]; then
  _arg_department=$(echo "$_arg_department" | perl -MURI::Escape -ne 'chomp;print uri_escape($_),"\n"')
  baseURL="$baseURL&c=$_arg_department"
else
  baseURL="$baseURL&c="
fi

# Getting whether or not the device is a laptop is a bit tricky. Fortunately only MacBooks are laptops (everything else is too old to worry about e.g. PowerBooks).
if [[ $_arg_useDeviceType == "on" ]]; then
  modelName=$(system_profiler SPHardwareDataType -detaillevel mini | grep "Model Name" | sed 's/Model Name://' | xargs)
  modelIdentifier=$(system_profiler SPHardwareDataType -detaillevel mini | grep "Model Identifier" | sed 's/Model Identifier://' | xargs)

  if [[ $modelName == *"MacBook"* || $modelIdentifier == *"MacBook"* ]]; then
    deviceType="Laptop"
  else
    deviceType="Workstation"
  fi

  baseURL="$baseURL&c=$deviceType&c=&c=&c=&c="
else
  baseURL="$baseURL&c=&c=&c=&c=&c="
fi

url="$baseURL"
echo "URL Built: $url"

# At this point we should have everything setup for us to be able to download the file.
downloadFile

# Lets check if the download was a success
file="$_arg_destfolder/$_arg_filename"
if [[ ! -f $file ]]; then
  _PRINT_HELP=no die "FATAL ERROR: The Installation File has failed to download please try again." 1
fi

# Analyze .pkg file and grab application name
pkgutil --expand $file "$_arg_destfolder/ScreenConnect"
pkgname=$(grep -Eo "connectwisecontrol-.*" "$_arg_destfolder/ScreenConnect/PackageInfo" | sed 's/".*//')

# Grabs a list of all installed packages and then filters it by connectwisecontrol-yourinstanceid
if [[ -z $pkgname ]]; then
  echo "WARNING: Failed to get package name from .Pkg file. Checking if ANY ScreenConnect instance is installed."
  installedPkg=$(pkgutil --pkgs | grep "connectwisecontrol-")
else
  installedPkg=$(pkgutil --pkgs | grep "$pkgname")
fi

if [[ -n $installedPkg ]]; then
  echo "Connectwise ScreenConnect is already installed!"
  exit 0
else
  echo "ConnectWise ScreenConnect is not installed. Installing..."
fi

# Start installing
echo "Installing application..."
if installer -pkg "$file" -target /; then
  echo "Exit Code: $?"
  echo "Connectwise ScreenConnect Installed Successfully!"
  rm "$file"
  exit 0
else
  echo "Exit Code: $?"
  rm "$file"
  _PRINT_HELP=no die "FATAL ERROR: The Installation has failed!" 1
fi

 

Accedi a oltre 700 script nel Dojo NinjaOne

Ottieni l’accesso

Analisi dettagliata dello script per l’installazione di ConnectWise

Lo script inizia definendo una serie di parametri preimpostati. Questi parametri includono il dominio ConnectWise, le opzioni per inserire il nome dell’organizzazione, la posizione e il tipo di dispositivo e un identificatore di reparto. Una caratteristica degna di nota è il parametro “–skipSleep”, progettato per bypassare un intervallo di sospensione casuale prima di avviare il download, un’aggiunta intelligente per accelerare il processo di installazione quando necessario.

Al momento dell’esecuzione, lo script analizza innanzitutto gli argomenti della riga di comando forniti, impostando le variabili appropriate in base all’input dell’utente. Degna di nota è la sua flessibilità nell’adattarsi a diversi formati di parametri (come –useOrgName e –useorgname), che lo rende facile da usare.

Lo script crea quindi l’URL di download per l’installer di ConnectWise Control. Questa fase prevede l’aggiunta dinamica all’URL di parametri quali il nome dell’organizzazione, la posizione e il tipo di dispositivo. È una parte fondamentale dello script, poiché consente di adattare il pacchetto di installazione alle esigenze specifiche dell’organizzazione o del dispositivo.

Il processo di download, gestito dalla funzione downloadFile, include la gestione degli errori e la logica di ripetizione del tentativo, per garantire un download affidabile anche in condizioni di rete non ottimali. Lo script tenta di scaricare il file fino a tre volte se necessario, un approccio solido per gestire potenziali problemi di download.

Dopo il download, lo script controlla se ConnectWise Control è già installato, evitando così un’inutile reinstallazione. Se non è già installato, procede all’installazione del software.

Casi d’uso potenziali

Immagina un MSP che gestisce l’infrastruttura IT di diverse piccole imprese. Ogni azienda potrebbe avere configurazioni diverse, reparti distinti o diversi tipi di dispositivi. Utilizzando questo script per l’installazione di ConnectWise, l’MSP può distribuire rapidamente ConnectWise Control su tutti i dispositivi dei clienti, personalizzandolo in base alla configurazione specifica di ogni azienda e migliorando così l’efficienza e riducendo gli errori manuali.

Confronti

Tradizionalmente, questo tipo di installazioni richiede il download e la configurazione manuale su ogni dispositivo o l’uso di strumenti di distribuzione in blocco che potrebbero non offrire lo stesso livello di personalizzazione. Questo script offre un approccio più snello e personalizzabile, particolarmente utile per gli ambienti con esigenze di configurazione varie e specifiche.

Domande frequenti

D: Questo script per l’installazione di ConnectWise può essere utilizzato per sistemi operativi diversi da macOS?
R: No, questo script per l’installazione di ConnectWise è stato progettato specificamente per macOS.

D: È possibile modificare lo script per l’installazione di ConnectWise per diversi software di supporto remoto?
R: Sì, con le opportune modifiche alla logica di creazione e installazione degli URL, potrebbe essere adattato ad altri software.

Implicazioni

Sebbene questo script migliori notevolmente l’efficienza, è essenziale considerare le implicazioni per la sicurezza. Gli script automatizzati possono essere un vettore di vulnerabilità della sicurezza se non vengono gestiti correttamente. Assicurarsi che lo script per l’installazione di ConnectWise provenga da un URL sicuro e verificare l’integrità del pacchetto scaricato sono passi fondamentali.

Raccomandazioni

Le best practice prevedono revisioni e aggiornamenti regolari dello script per l’installazione di ConnectWise per adattarlo a eventuali modifiche del processo di installazione di ConnectWise Control o agli aggiornamenti di macOS. Inoltre, è essenziale assicurarsi che lo script per l’installazione di ConnectWise venga eseguito in un ambiente sicuro per prevenire eventuali violazioni della sicurezza.

Considerazioni finali

Nel contesto di NinjaOne, una piattaforma di gestione IT unificata, questo script esemplifica il tipo di efficienza e automazione che può essere integrato in strategie di gestione IT più ampie. Questi script di automazione, se combinati con uno strumento completo come NinjaOne, possono migliorare in modo significativo l’efficienza e l’efficacia della gestione IT, in particolare in ambienti eterogenei e dinamici.

Passi successivi

La creazione di un team IT efficiente ed efficace richiede una soluzione centralizzata che funga da principale strumento per la fornitura di servizi. NinjaOne consente ai team IT di monitorare, gestire, proteggere e supportare tutti i dispositivi, ovunque essi si trovino, senza la necessità di una complessa infrastruttura locale.

Per saperne di più su NinjaOne Endpoint Management, fai un tour dal vivo, o inizia la tua prova gratuita della piattaforma NinjaOne.

Categorie:

Ti potrebbe interessare anche

×

Guarda NinjaOne in azione!

Inviando questo modulo, accetto La politica sulla privacy di NinjaOne.

Termini e condizioni NinjaOne

Cliccando sul pulsante “Accetto” qui sotto, dichiari di accettare i seguenti termini legali e le nostre condizioni d’uso:

  • Diritti di proprietà: NinjaOne possiede e continuerà a possedere tutti i diritti, i titoli e gli interessi relativi allo script (compreso il copyright). NinjaOne ti concede una licenza limitata per l’utilizzo dello script in conformità con i presenti termini legali.
  • Limitazione d’uso: Puoi utilizzare lo script solo per legittimi scopi personali o aziendali interni e non puoi condividere lo script con altri soggetti.
  • Divieto di ripubblicazione: In nessun caso ti è consentito ripubblicare lo script in una libreria di script appartenente o sotto il controllo di un altro fornitore di software.
  • Esclusione di garanzia: Lo script viene fornito “così com’è” e “come disponibile”, senza garanzie di alcun tipo. NinjaOne non promette né garantisce che lo script sia privo di difetti o che soddisfi le tue esigenze o aspettative specifiche.
  • Assunzione del rischio: L’uso che farai dello script è da intendersi a tuo rischio. Riconosci che l’utilizzo dello script comporta alcuni rischi intrinseci, che comprendi e sei pronto ad assumerti.
  • Rinuncia e liberatoria: Non riterrai NinjaOne responsabile di eventuali conseguenze negative o indesiderate derivanti dall’uso dello script e rinuncerai a qualsiasi diritto legale o di equità e a qualsiasi rivalsa nei confronti di NinjaOne in relazione all’uso dello script.
  • EULA: Se sei un cliente NinjaOne, l’uso dello script è soggetto al Contratto di licenza con l’utente finale (EULA) applicabile.