Skript-Leitfaden: Automatisierter lokaler Hostname & Computerumbenennung für macOS

Die wichtigsten Erkenntnisse

  • Automatisierte Effizienz: Das Skript automatisiert die Umbenennung von Macs Computer- und lokalen Hostnamen und verbessert so die Effizienz der Netzwerkverwaltung.
  • Benutzerfreundliche vs. Netzwerknamen: Er unterscheidet zwischen dem benutzerfreundlichen Computernamen und dem für das Netzwerk sichtbaren lokalen Hostnamen.
  • Flexibilität der Parameter: Die Benutzer können entweder den lokalen Hostnamen, den Computernamen oder beide umbenennen.
  • Strenge Validierungsregeln: Das Skript erzwingt die Einhaltung von Namensstandards und sorgt für die Einhaltung von Hostnamen-Konventionen.
  • Fehlermanagement: Eine robuste Fehlerbehandlung gibt klare Rückmeldungen und verhindert häufige Fehler.
  • DNS-Cache-Spülung: Dazu gehört auch ein Schritt zum Leeren des DNS-Caches, der die sofortige Erkennung von Änderungen im Netz ermöglicht.
  • Abhängigkeit von der DHCP-Erneuerung: Änderungen der Namen werden möglicherweise erst beim nächsten DHCP-Erneuerungszyklus vollständig übernommen.
  • Automatisierung vs. manueller Prozess: Das Skript bietet eine erhebliche Effizienzsteigerung gegenüber dem manuellen Umbenennungsprozess.
  • Sicherheit und Klarheit: Fördert die Beibehaltung einer Namenskonvention, die die Netzwerksicherheit und Klarheit unterstützt.
  • Integration mit Verwaltungstools: Die Funktionalität des Skripts ist ein Beispiel für die Art der Automatisierung, die in IT-Management-Systeme wie NinjaOne integriert werden kann.

Das Ändern des Computernamens und des lokalen Hostnamens eines Macs ist eine wichtige Aufgabe für IT-Experten, die mehrere Geräte in einem Netzwerk verwalten. Die effiziente Umbenennung dieser Komponenten kann die Netzwerkverwaltung rationalisieren und die Geräteidentifikation vereinfachen, was einen nahtlosen Betrieb in dynamischen IT-Umgebungen gewährleistet.

Hintergrund

Das mitgelieferte Bash-Skript bietet eine zuverlässige Lösung für die Umbenennung des Computernamens und des lokalen Hostnamens eines Macs. Diese Elemente sind in einer Netzwerkeinrichtung von zentraler Bedeutung: Der Computername ist die benutzerfreundliche Kennung, die in Finder sichtbar ist, während der lokale Hostname innerhalb des Netzwerks verwendet wird. Dieses Skript ist besonders nützlich für IT-Experten und Managed Service Provider (MSPs ), die Geräteidentitäten konsistent und effizient verwalten müssen.

Das Skript:

#!/bin/bash

# Description: Change's both the mac's computername (friendly name seen in Finder) and local hostname (what you would see in the network). Please note the hostname will update upon the next dhcp renewal.
#
# Release Notes: Initial Release
# 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).
#
# Below are all the valid parameters for this script only the new computer name is required!
# Preset Parameter: "ReplaceWithNewComputerName" --localhostname-only --computername-only
# --localhostname-only: Sets only the LocalHostName (The one you see when scanning the network)
# --computername-only: Sets only the user-friendly ComputerName (The one you see in finder)

# Help text function for when invalid input is encountered
print_help() {
  printf '\n### Below are all the (case sensitive) valid parameters for this script only the new computer name is required! ###\n'
  printf '\nPreset Parameter: "ReplaceWithNewComputerName" --localhostname-only --computername-only \n'
  printf '\t%s\n' "--localhostname-only: Sets only the LocalHostName (The one you see when scanning the network)"
  printf '\t%s\n' "--computername-only: Sets only the user-friendly ComputerName (The one you see in finder)"
}

# Determines whether or not help text is nessessary and routes the output to stderr
die() {
  local _ret="${2:-1}"
  echo "$1" >&2
  test "${_PRINT_HELP:-no}" = yes && print_help >&2
  exit "${_ret}"
}

# THE DEFAULTS INITIALIZATION - OPTIONALS
_arg_localhostname_only="off"
_arg_computername_only="off"
_typical="on"

# Grabbing the parameters and parsing through them.
parse_commandline() {
  while test $# -gt 0; do
    _key="$1"
    case "$_key" in
    --localhostname-only)
      _arg_localhostname_only="on"
      _typical="off"
      ;;
    --computername-only)
      _arg_computername_only="on"
      _typical="off"
      ;;
    --*)
      _PRINT_HELP=yes die "FATAL ERROR: Got an unexpected argument '$1'" 1
      ;;
    *)
      if [[ -z $_arg_name ]]; then
        _arg_name=$1
      else
        _PRINT_HELP=yes die "FATAL ERROR: Got an unexpected argument '$1' but the new computername '$_arg_name' was already specified" 1
      fi
      ;;
    esac
    shift
  done
}

# Dtermines if the hostname is valid.
validate_localhostname() {
  pattern=" |'"
  if [[ $1 =~ $pattern ]]; then
    _PRINT_HELP=yes die "FATAL ERROR: Local Hostnames DO NOT support spaces or most special characters - is okay!" 1
  fi

  if [[ ${#1} -gt 253 ]]; then
    _PRINT_HELP=yes die "FATAL ERROR: Local Hostnames cannot be more than 253 characters long!" 1
  fi

  if [[ ${#1} -gt 15 ]]; then
    printf "\nWARNING: Hostname is longer than 15 characters!"
    printf "\tWhile technically osx will let you set a hostname of basically any length you may experience issues if the name is absurdly long."
  fi
}

# Initializes parameter processing
parse_commandline "$@"

if [[ -n $newName ]]; then
  _arg_name=$newName
fi

if [[ -n $action ]]; then
  if [[ $action == "Change Local Host Name Only" ]]; then
    _arg_localhostname_only="on"
    _typical="off"
  fi
  if [[ $action == "Change Computer Name Only" ]]; then
    _arg_computername_only="on"
    _typical="off"
  fi
fi

# If they didn't give me a new name I should error out
if [[ -z $_arg_name ]]; then
  _PRINT_HELP=yes die 'FATAL ERROR: No Computer Name was given! Please enter in the new name in the "Preset Parameter" box in Ninja! For Example "MyNewName".' 1
fi

# If they didn't specify which of the 2 names to change we'll change both
if [[ $_typical == "on" ]]; then
  validate_localhostname "$_arg_name"
  echo "Changing both LocalHostName and ComputerName to $_arg_name..."

  # This actually changes the name
  scutil --set LocalHostName "$_arg_name"
  # Sleeps for a few seconds as scutil sometimes takes a second or two for the new name to appear
  sleep 7
  # Tests that the change was successful
  new_localhostname=$(scutil --get LocalHostName)
  if [[ $new_localhostname != "$_arg_name" ]]; then
    _PRINT_HELP=no die "FATAL ERROR: failed to set local hostname to $_arg_name." 1
  else
    echo "Success!"
  fi

  # Changes the friendly name
  scutil --set ComputerName "$_arg_name"
  # Sleeps for a few seconds as we're gonna test immediately afterwards
  sleep 7
  # Test that we were successful
  new_computername=$(scutil --get ComputerName)
  if [[ $new_localhostname != "$_arg_name" ]]; then
    _PRINT_HELP=no die "FATAL ERROR: failed to set Computer Name to $_arg_name." 1
  else
    echo "Success!"
  fi

fi

# This is the same as above just localhostname only
if [[ $_arg_localhostname_only == "on" ]]; then
  validate_localhostname "$_arg_name"
  echo "Changing LocalHostName to $_arg_name..."
  scutil --set LocalHostName "$_arg_name"
  sleep 7
  new_localhostname=$(scutil --get LocalHostName)
  if [[ $new_localhostname != "$_arg_name" ]]; then
    _PRINT_HELP=no die "FATAL ERROR: failed to set local hostname to $_arg_name." 1
  else
    echo "Success!"
  fi
fi

# Same as above just friendly name only
if [[ $_arg_computername_only == "on" ]]; then
  echo "Changing ComputerName to $_arg_name..."
  scutil --set ComputerName "$_arg_name"
  sleep 7
  new_computername=$(scutil --get ComputerName)
  if [[ $new_computername != "$_arg_name" ]]; then
    _PRINT_HELP=no die "FATAL ERROR: failed to set Computer Name to $_arg_name." 1
  else
    echo "Success"
  fi
fi

# Flushes the dns cache so that the mac is prepared to start handing out its new name
dscacheutil -flushcache

# Warns the user that it will take some time for the new name to show up
printf "\nWARNING: The devicename in Ninja will likely display the old name until the next dhcp renewal."
printf "\n\tOSX determines its devicename\hostname from the dhcp or dns server."
printf "\n\tTypically these services will update their records upon receiving a new DHCP request from the device."

 

Zugriff auf über 300 Skripte im NinjaOne Dojo

Zugang erhalten

Detaillierte Aufschlüsselung

Das Skript arbeitet in mehreren wichtigen Phasen:

  • Handhabung der Parameter: Es beginnt mit der Analyse von Befehlszeilenargumenten, so dass der Benutzer angeben kann, ob er den lokalen Hostnamen, den Computernamen oder beides ändern möchte.
  • Validierung: Es enthält eine Validierungsfunktion, die sicherstellt, dass der neue Name den Hostnamen-Standards entspricht und auf verbotene Zeichen und Längenbeschränkungen geprüft wird.
  • Namensänderung: Der Befehl scutil wird verwendet, um die neuen Namen anzuwenden. Nach jeder Änderung macht das Skript eine kurze Pause, um sicherzustellen, dass das System den neuen Namen erkennt, bevor es fortfährt.
  • Fehlerbehandlung: Das Skript verwaltet Fehler zuverlässig und gibt im Falle von Problemen eine klare Rückmeldung.
  • DNS-Cache-Spülung: Schließlich wird der DNS-Cache geleert, so dass die neuen Namen sofort im gesamten Netzwerk erkannt werden.
  • Benachrichtigung der Benutzer:innen: Das Skript schließt mit dem Hinweis, dass die Änderungen möglicherweise erst bei der nächsten DHCP-Erneuerung sichtbar werden.

Mögliche Anwendungsfälle

Stellen Sie sich vor, ein IT-Experte an einer Schule muss die Macs in einem Computerraum umbenennen, um die Verwaltung zu erleichtern. Mithilfe dieses Skripts können sie die Identität jedes Rechners effizient aktualisieren und so eine einheitliche Namenskonvention im gesamten Netzwerk sicherstellen.

Vergleiche

Traditionell erfordert das Umbenennen eines Macs einen manuellen Eingriff über die Systemeinstellungen, was zeitaufwändig und fehleranfällig ist. Dieses Skript automatisiert den Prozess, verringert die Fehlerwahrscheinlichkeit und spart viel Zeit.

FAQs

  • Wie kann ich dieses Skript verwenden?
    • Führen Sie das Skript einfach mit dem neuen Namen als Argument aus und geben Sie optional an, welcher Namenstyp geändert werden soll.
  • Kann ich einen Rechner in einen Namen mit Sonderzeichen umbenennen?
    • Nein, das Skript validiert den Namen, um sicherzustellen, dass er mit den Hostnamen-Standards konform ist.
  • Werden die Veränderungen sofort eintreten?
    • Das Skript löscht den DNS-Cache, aber einige Änderungen erscheinen möglicherweise erst nach der nächsten DHCP-Erneuerung.

Auswirkungen

Durch die Automatisierung des Umbenennungsprozesses werden menschliche Fehler minimiert und die Netzwerkverwaltung rationalisiert. Es ist jedoch wichtig, eine Namenskonvention beizubehalten, die die Sicherheit und Übersichtlichkeit des Netzwerks erhöht.

Empfehlungen

  • Sichern Sie immer die Systemeinstellungen, bevor Sie solche Skripte ausführen.
  • Verwenden Sie klare und einheitliche Namenskonventionen.
  • Testen Sie das Skript in einer kontrollierten Umgebung, bevor Sie es in großem Umfang einsetzen.

Abschließende Überlegungen 

Im Zusammenhang mit Tools wie NinjaOne ist dieses Skript ein Beispiel für eine effiziente, automatisierte Lösung, die für ein modernes IT-Management unerlässlich ist. Die Fähigkeiten von NinjaOne können solche Skripte ergänzen und bieten einen ganzheitlichen Ansatz für das Geräte- und Netzwerkmanagement. Die Integration einer solchen Automatisierung in umfassendere IT-Verwaltungsstrukturen ist der Schlüssel zur Aufrechterhaltung robuster, sicherer und effizienter IT-Umgebungen.

Nächste Schritte

Der Aufbau eines effizienten und effektiven IT-Teams erfordert eine zentralisierte Lösung, die als vereintes Tool für die Bereitstellung von Dienstleistungen fungiert. NinjaOne ermöglicht es IT-Teams, all ihre Geräte zu überwachen, verwalten, sichern und zu unterstützen, unabhängig von ihrem Ort und komplexer Infrastruktur vor Ort.

Erfahren Sie mehr über NinjaOne Endpoint Management schauen Sie sich eine Live-Tour an oder starten Sie Ihre kostenlose Testversion der NinjaOne Plattform.

Kategorien:

Das könnte Sie auch interessieren

Demo ansehen×
×

Sehen Sie NinjaOne in Aktion!

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

NinjaOne Terms & Conditions

By clicking the “I Accept” button below, you indicate your acceptance of the following legal terms as well as our 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 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).