Guide de script : Automatiser le nom d’hôte local et renommer un ordinateur macOS

Points à retenir

  • Efficacité automatisée : Le script permet de renommer des ordinateurs macOS et des hôtes locaux automatiquement, améliorant ainsi l’efficacité de la gestion du réseau.
  • Noms conviviaux ou noms de réseau : Il fait la distinction entre le nom de l’ordinateur, facile à utiliser, et le nom d’hôte local, visible sur le réseau.
  • Flexibilité des paramètres : Les utilisateurs peuvent choisir de renommer le nom d’hôte local, le nom de l’ordinateur ou les deux.
  • Règles de validation strictes : Le script applique les normes de dénomination, garantissant la conformité avec les conventions de noms d’hôtes.
  • Gestion des erreurs : Une gestion robuste des erreurs fournit un retour d’information clair et permet d’éviter les pièges les plus courants.
  • Nettoyage du cache DNS : Il comprend une étape pour vider le cache DNS, ce qui facilite la reconnaissance immédiate des changements par le réseau.
  • Dépendance du renouvellement DHCP : Les changements de noms peuvent ne pas se propager complètement jusqu’au prochain cycle de renouvellement DHCP.
  • Automatisation ou processus manuel : Le script offre une amélioration significative de l’efficacité par rapport au processus de renommage manuel.
  • Sécurité et clarté : Il encourage le maintien d’une convention de dénomination qui favorise la sécurité et la clarté du réseau.
  • Intégration avec les outils de gestion : La fonctionnalité du script illustre le type d’automatisation qui peut être intégré dans des systèmes de gestion informatique tels que NinjaOne.

Renommer un ordinateur macOS et le nom d’hôte local d’un Mac est une tâche cruciale pour les professionnels de l’informatique qui gèrent plusieurs appareils sur un réseau. En renommant efficacement ces composants, on peut rationaliser la gestion du réseau et simplifier l’identification des appareils, ce qui garantit un fonctionnement sans faille dans les environnements informatiques dynamiques.

Contexte

Le script Bash fourni offre une solution robuste pour renommer un ordinateur macOS et l’hôte local d’un Mac. Ces éléments sont essentiels dans une configuration réseau : le nom de l’ordinateur est l’identifiant convivial visible dans le Finder, tandis que le nom d’hôte local est utilisé au sein du réseau. Ce script est particulièrement utile pour les professionnels de l’informatique et les fournisseurs de services gérés (MSP) qui doivent gérer les identités des appareils de manière cohérente et efficace.

Le script :

#!/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/fr/conditions-dutilisation
# 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."

 

Accédez à plus de 700 scripts dans le Dojo NinjaOne

Obtenir l’accès

Description détaillée

Le script se déroule en plusieurs étapes :

  • Traitement des paramètres : Il commence par analyser les arguments de la ligne de commande, ce qui permet aux utilisateurs de préciser s’ils souhaitent modifier le nom d’hôte local, le nom de l’ordinateur ou les deux.
  • Validation : Il comprend une fonction de validation qui permet de s’assurer que le nouveau nom est conforme aux normes relatives aux noms d’hôtes, en vérifiant l’absence de caractères interdits et de restrictions de longueur.
  • Changement de nom : La commande scutil est utilisée pour appliquer les nouveaux noms. Après chaque modification, le script marque une courte pause pour s’assurer que le système reconnaît le nouveau nom avant de poursuivre.
  • Gestion des erreurs : Le script gère les erreurs de manière robuste et fournit un retour d’information clair en cas de problème.
  • Nettoyage du cache DNS : Enfin, il vide le cache DNS, ce qui garantit que les nouveaux noms sont immédiatement reconnus sur le réseau.
  • Avis à l’utilisateur : Le script se termine en rappelant à l’utilisateur que les changements peuvent ne pas être visibles avant le prochain renouvellement du DHCP.

Cas d’utilisation potentiels

Imaginez qu’un professionnel de l’informatique d’une école doive renommer les Macs d’un laboratoire informatique pour en faciliter la gestion. En utilisant ce script, ils peuvent mettre à jour efficacement l’identité de chaque machine, garantissant ainsi une convention de dénomination cohérente sur l’ensemble du réseau.

Comparaisons

Traditionnellement, renommer un Mac nécessite une intervention manuelle dans les Préférences Système, ce qui prend du temps et est source d’erreurs. Ce script automatise le processus, ce qui réduit le risque d’erreurs et permet de gagner beaucoup de temps.

FAQ

  • Comment utiliser ce script ?
    • Il suffit d’exécuter le script avec le nouveau nom en argument, en précisant éventuellement le type de nom à modifier.
  • Puis-je renommer une machine avec des caractères spéciaux ?
    • Non, le script valide le nom pour s’assurer qu’il est conforme aux normes relatives aux noms d’hôtes.
  • Les changements seront-ils instantanés ?
    • Le script vide le cache DNS, mais certaines modifications peuvent n’apparaître qu’après le prochain renouvellement DHCP.

Implications

L’automatisation du processus de renommage minimise les erreurs humaines et rationalise la gestion du réseau. Cependant, il est essentiel de maintenir une convention de dénomination qui renforce la sécurité et la clarté du réseau.

Recommandations

  • Sauvegardez toujours les paramètres du système avant d’exécuter de tels scripts.
  • Utilisez des conventions de dénomination claires et cohérentes.
  • Testez le script dans un environnement contrôlé avant de le déployer à grande échelle.

Dernières réflexions 

Avec des outils tels que NinjaOne, ce script illustre le type de solution efficace et automatisée qui est essentiel à la gestion informatique. Les fonctionnalités de NinjaOne peuvent compléter ces scripts, en offrant une approche complète de la gestion des appareils et du réseau. L’intégration de cette automatisation dans des cadres de gestion informatique plus larges est essentielle pour maintenir des environnements informatiques performants, sécurisés et efficaces.

Pour aller plus loin

Pour créer une équipe informatique efficace et performante, il est essentiel d'avoir une solution centralisée qui joue le rôle de nœud principal pour vos services. NinjaOne permet aux équipes informatiques de surveiller, gérer, sécuriser et prendre en charge tous les appareils, où qu'ils soient, sans avoir besoin d'une infrastructure complexe sur site. Pour en savoir plus sur NinjaOne Endpoint Management, participez à une visite guidée, ou profitez d'un essai gratuit de la plateforme NinjaOne.

Catégories :

Vous pourriez aussi aimer

×

Voir NinjaOne en action !

En soumettant ce formulaire, j'accepte la politique de confidentialité de NinjaOne.

Termes et conditions NinjaOne

En cliquant sur le bouton “J’accepte” ci-dessous, vous indiquez que vous acceptez les termes juridiques suivants ainsi que nos conditions d’utilisation:

  • Droits de propriété: NinjaOne possède et continuera de posséder tous les droits, titres et intérêts relatifs au script (y compris les droits d’auteur). NinjaOne vous accorde une licence limitée pour l’utilisation du script conformément à ces conditions légales.
  • Limitation de l’utilisation: Les scripts ne peuvent être utilisés qu’à des fins personnelles ou professionnelles internes légitimes et ne peuvent être partagés avec d’autres entités.
  • Interdiction de publication: Vous n’êtes en aucun cas autorisé à publier le script dans une bibliothèque de scripts appartenant à, ou sous le contrôle d’un autre fournisseur de logiciels.
  • Clause de non-responsabilité: Le texte est fourni “tel quel” et “tel que disponible”, sans garantie d’aucune sorte. NinjaOne ne promet ni ne garantit que le script sera exempt de défauts ou qu’il répondra à vos besoins ou attentes particulières.
  • Acceptation des risques: L’utilisation du script est sous votre propre responsabilité. Vous reconnaissez qu’il existe certains risques inhérents à l’utilisation du script, et vous comprenez et assumez chacun de ces risques.
  • Renonciation et exonération de responsabilité: Vous ne tiendrez pas NinjaOne pour responsable des conséquences négatives ou involontaires résultant de votre utilisation du script, et vous renoncez à tout droit ou recours légal ou équitable que vous pourriez avoir contre NinjaOne en rapport avec votre utilisation du script.
  • EULA: Si vous êtes un client de NinjaOne, votre utilisation du script est soumise au contrat de licence d’utilisateur final qui vous est applicable (End User License Agreement (EULA)).