Umfassender Guide zur Automatisierung der ConnectWise-Installation unter macOS

Die wichtigsten Erkenntnisse

  • Automatisierte Installation: Das Skript sorgt für die Automatisierung der ConnectWise-Installation und steigert die Effizienz in IT-Umgebungen.
  • Anpassungsmöglichkeiten: Es unterstützt die Anpassung von Installationen mit Unternehmensnamen, Gerätestandort, Typ und Abteilung.
  • Fehlerbehandlung: Das Skript enthält robuste Fehlerbehandlung und eine Wiederholungslogik für ein zuverlässiges Herunterladen.
  • Flexibilität der Parameter: Bietet Flexibilität, da verschiedene Formate für Befehlszeilenargumente akzeptiert werden.
  • URL-Erstellung: Die Download-URL wird dynamisch erstellt und an die spezifischen Anforderungen des Unternehmens angepasst.
  • Überprüfung vor der Installation: Enthält eine Prüfung, um eine Neuinstallation von ConnectWise Control zu vermeiden, wenn es bereits vorhanden ist.
  • Sicherheitserwägungen: Betont die Notwendigkeit einer sicheren Beschaffung und einer Überprüfung der Integrität des Pakets.
  • Anpassungsfähigkeit: Das Konzept des Skripts wurde zwar für macOS entwickelt, lässt sich aber auch auf andere Systeme oder Software übertragen.
  • Integration mit IT-Verwaltungs-Tools: Das Skript kann in umfassendere IT-Management-Plattformen wie NinjaOne effektiv integriert werden.

Automatisierung und Effizienz sind in der sich ständig weiterentwickelnden Welt des IT-Managements von entscheidender Bedeutung. Die Rationalisierung der Installation wichtiger Tools, wie etwa der Software für Fern-Support, spart nicht nur wertvolle Zeit, sondern gewährleistet auch Konsistenz über mehrere Geräte hinweg. Dieser Ansatz ist besonders wichtig für Managed Service Provider (MSPs) und IT-Expert:innen, die eine Vielfalt von Computern verwalten.

Kontext

ConnectWise Control, früher bekannt als ScreenConnect, ist eine in der IT-Branche weit verbreitete Lösung für Fern-Support, Zugriff und Meetings. Seine Anpassungsfähigkeit und sein robuster Funktionsumfang machen es zu einem unverzichtbaren Tool für MSPs und IT-Abteilungen. Das thematisierte Skript automatisiert die Installation von ConnectWise Control auf macOS-Systemen. Diese Automatisierung ist für IT-Expert:innen und MSPs besonders wichtig, um diese Software effizient auf mehreren macOS-Geräten einzusetzen, die Standardisierung aufrechtzuerhalten und den manuellen Arbeitsaufwand zu reduzieren.

Das Skript zur Automatisierung der ConnectWise-Installation

#!/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/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: --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

 

Greifen Sie auf über 300 Skripte im NinjaOne Dojo zu.

Zugang erhalten

Detaillierte Aufschlüsselung

Das Skript beginnt mit der Definition einer Reihe von voreingestellten Parametern. Zu diesen Parametern gehören die ConnectWise-Domain, der Name des Unternehmens, der Standort und der Typ des Geräts sowie eine Abteilungskennung. Eine wichtige Funktion ist der Parameter ‘–skipSleep’, mit dem ein zufälliges Ruheintervall vor dem Herunterladen umgangen werden kann. Das ist ein cleverer Zusatz, um den Installationsprozess bei Bedarf zu beschleunigen.

Bei der Ausführung analysiert das Skript zunächst die angegebenen Befehlszeilenargumente und setzt die entsprechenden Variablen auf der Grundlage der Benutzereingaben. Hervorzuheben ist die Flexibilität bei der Anpassung an verschiedene Parameterformate (wie –useOrgName und –useorgname), die das Skript benutzerfreundlich macht.

Es fährt dann fort, den Download-URL für das ConnectWise Steuerinstallationsprogramm zu errichten. Bei diesem Schritt werden der URL dynamisch Parameter wie Unternehmensname, Standort und Gerätetyp hinzugefügt. Es ist ein wichtiger Teil des Skripts, da es das Installationspaket auf die spezifischen Anforderungen des Unternehmens oder des Geräts zuschneidet.

Der Download-Prozess, der von der Funktion downloadFile abgewickelt wird, umfasst Fehlerbehandlung und eine Wiederholungslogik, die einen zuverlässigen Download auch unter ungünstigen Netzwerkbedingungen gewährleistet. Das Skript versucht, die Datei bei Bedarf bis zu dreimal herunterzuladen, was ein robuster Ansatz zur Bewältigung potenzieller Download-Probleme darstellt.

Nach dem Herunterladen prüft das Skript, ob ConnectWise Control bereits installiert ist, um eine unnötige Neuinstallation zu vermeiden. Wenn die Software noch nicht installiert ist, wird sie installiert.

Mögliche Anwendungsfälle

Stellen Sie sich einen MSP vor, der die IT-Infrastruktur für mehrere kleine Unternehmen verwaltet. Jedes Unternehmen kann unterschiedliche Konfigurationen haben, wie verschiedene Abteilungen oder Gerätetypen. Mithilfe dieses Skripts kann der MSP ConnectWise Control schnell auf allen Kunden-Geräten einsetzen, angepasst an die spezifische Einrichtung des jeweiligen Unternehmens, und so die Effizienz steigern und manuelle Fehler reduzieren.

Vergleiche

Traditionell würden solche Installationen ein manuelles Herunterladen und Konfigurieren auf jedem Gerät oder die Verwendung von Massenverteilungs-Tools erfordern, die möglicherweise nicht den gleichen Grad an Anpassung bieten. Dieses Skript bietet einen optimierteren, anpassbaren Ansatz, der besonders für Umgebungen mit unterschiedlichen und spezifischen Konfigurationsanforderungen von Vorteil ist.

FAQs

F: Kann dieses Skript auch für andere Betriebssysteme als macOS verwendet werden?
A: Nein, dieses Skript ist speziell für macOS konzipiert.

F: Ist es möglich, das Skript für verschiedene Fern-Support-Software zu ändern?
A: Ja, mit entsprechenden Änderungen an der URL-Erstellung und der Installations-Logik könnte sie für andere Software angepasst werden.

Folgen

Auch wenn dieses Skript die Effizienz erheblich verbessert, müssen die Auswirkungen auf die Sicherheit berücksichtigt werden. Automatisierte Skripte können bei unsachgemäßer Handhabung eine Sicherheitsschwachstelle darstellen. Entscheidend ist, dass das Skript von einer sicheren URL stammt und die Integrität des heruntergeladenen Pakets überprüft wird.

Empfehlungen

Zu den Best Practices gehören regelmäßige Überprüfungen und Aktualisierungen des Skripts, um alle Änderungen im Installationsprozess von ConnectWise Control oder macOS-Updates zu berücksichtigen. Außerdem muss sichergestellt werden, dass das Skript in einer sicheren Umgebung ausgeführt wird, um Sicherheitsverletzungen zu vermeiden.

Abschließende Überlegungen

Im Kontext von NinjaOne, einer einheitlichen IT-Verwaltungsplattform, ist dieses Skript ein Beispiel für die Art von Effizienz und Automatisierung, die in umfangreichere IT-Verwaltungsstrategien integriert werden kann. Solche Automatisierungsskripte können in Kombination mit einem umfassenden Tool wie NinjaOne die Effizienz und Effektivität des IT-Managements erheblich steigern, insbesondere in vielfältigen und dynamischen Umgebungen.

Nächste Schritte

Der Aufbau eines effizienten und effektiven IT-Teams erfordert eine zentralisierte Lösung, die als einheitliches Tool zur Bereitstellung von IT-Dienstleistungen fungiert. NinjaOne ermöglicht es IT-Teams, alle Geräte zu überwachen, zu verwalten, zu sichern und zu unterstützen, unabhängig vom Standort, ohne dass eine komplexe Infrastruktur vor Ort erforderlich ist.

Erfahren Sie mehr über NinjaOne Remote Script Deployment, sehen Sie sich eine Live-Tour an oder starten Sie Ihre kostenlose Testversion unserer NinjaOne Plattform.

Kategorien:

Das könnte Sie auch interessieren

×

Sehen Sie NinjaOne in Aktion!

Mit dem Absenden dieses Formulars akzeptiere ich die Datenschutzerklärung von NinjaOne.

NinjaOne Allgemeine Geschäftsbedingungen für Skripte

Indem Sie unten auf die Schaltfläche “Ich akzeptiere” klicken, erklären Sie Ihr Einverständnis mit den folgenden rechtlichen Bedingungen sowie mit unseren Nutzungsbedingungen:

  • Eigentumsrechte: NinjaOne besitzt und wird weiterhin alle Rechte, Titel und Interessen an dem Skript (einschließlich des Urheberrechts) behalten. NinjaOne gewährt Ihnen eine eingeschränkte Lizenz zur Nutzung des Skripts in Übereinstimmung mit diesen rechtlichen Bedingungen.
  • Einschränkung der Nutzung: Sie dürfen das Skript nur für Ihre legitimen persönlichen oder internen Geschäftszwecke verwenden und es nicht an Dritte weitergeben.
  • Verbot der Wiederveröffentlichung: Sie sind unter keinen Umständen berechtigt, das Skript in einer Skriptbibliothek, die einem anderen Softwareanbieter gehört oder von diesem kontrolliert wird, erneut zu veröffentlichen.
  • Gewährleistungsausschluss: Das Skript wird “wie gesehen” und “wie verfügbar” bereitgestellt, ohne jegliche Garantie. NinjaOne gibt keine Versprechen oder Garantien, dass das Skript frei von Fehlern ist oder dass es Ihre speziellen Bedürfnisse oder Erwartungen erfüllt.
  • Risikoübernahme: Die Verwendung des Skripts erfolgt auf eigene Gefahr. Sie erkennen an, dass die Nutzung des Skripts mit bestimmten Risiken verbunden ist, und Sie verstehen und übernehmen jedes dieser Risiken.
  • Verzicht und Freigabe: Sie machen NinjaOne nicht für nachteilige oder unbeabsichtigte Folgen verantwortlich, die sich aus Ihrer Nutzung des Skripts ergeben, und Sie verzichten auf alle gesetzlichen oder billigkeitsrechtlichen Rechte oder Rechtsmittel, die Sie gegen NinjaOne im Zusammenhang mit Ihrer Nutzung des Skripts haben könnten.
  • EULA: Wenn Sie ein NinjaOne-Kunde sind, unterliegt Ihre Nutzung des Skripts dem für Sie geltenden Endbenutzer-Lizenzvertrag (EULA).