{"id":513833,"date":"2025-08-25T12:27:42","date_gmt":"2025-08-25T12:27:42","guid":{"rendered":"https:\/\/www.ninjaone.com\/?post_type=script_hub&#038;p=513833"},"modified":"2025-08-25T12:27:42","modified_gmt":"2025-08-25T12:27:42","slug":"installer-office-365-sur-macos-avec-un-script-shell","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/fr\/script-hub\/installer-office-365-sur-macos-avec-un-script-shell\/","title":{"rendered":"Comment installer Office 365 sur macOS avec un script Shell"},"content":{"rendered":"<p>Pour les professionnels de l&rsquo;informatique et les <a href=\"https:\/\/www.ninjaone.com\/fr\/quest-ce-quun-msp\/\">fournisseurs de services g\u00e9r\u00e9s (MSP)<\/a>, il est essentiel de garantir un d\u00e9ploiement coh\u00e9rent, automatis\u00e9 et sans erreur des logiciels, en particulier lorsqu&rsquo;ils g\u00e8rent des flottes d&rsquo;appareils <a href=\"https:\/\/www.ninjaone.com\/fr\/plateforme-de-gestion-de-terminaux\/gestion-des-terminaux-mac\/\">macOS<\/a>. Microsoft Office 365 reste une suite de productivit\u00e9 fondamentale pour les entreprises et les PME. L&rsquo;installation manuelle sur plusieurs machines peut toutefois s&rsquo;av\u00e9rer inefficace et sujette \u00e0 des oublis. Une solution efficace consiste \u00e0 apprendre <strong>\u00e0 installer Office 365 sur macOS avec un script shell<\/strong>. Cet article de blog se penche sur un script shell qui permet justement cela, en rationalisant l&rsquo;installation et en proposant des options comme le red\u00e9marrage forc\u00e9 pour un contr\u00f4le total du d\u00e9ploiement.<\/p>\n<h2>Contexte<\/h2>\n<p>L&rsquo;automatisation des d\u00e9ploiements de logiciels est une bonne pratique pour les \u00e9quipes informatiques qui g\u00e8rent de nombreux terminaux. Alors que des outils comme Microsoft Endpoint Manager et Jamf offrent une gestion compl\u00e8te des appareils, les administrateurs ont parfois besoin de solutions l\u00e9g\u00e8res, bas\u00e9es sur des scripts, en particulier dans les environnements exploitant les capacit\u00e9s d&rsquo;automatisation de NinjaOne. Ce script simplifie le processus d&rsquo;installation d&rsquo;Office 365 sur macOS avec une interaction humaine minimale et fournit une logique pour la validation de l&rsquo;installation, le nettoyage et le red\u00e9marrage optionnel.<\/p>\n<p>Pour les MSP travaillant avec des environnements clients vari\u00e9s ou les d\u00e9partements informatiques internes \u00e0 la recherche d&rsquo;options de d\u00e9ploiement rapide, ce script offre une alternative fiable et \u00e9volutive.<\/p>\n<h2>Le script<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">#!\/usr\/bin\/env bash\r\n\r\n# Description: Install Office 365 on MacOS with default install settings.\r\n# 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.\r\n# 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. \r\n# 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. \r\n# 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. \r\n# Warranty Disclaimer: The script is provided \u201cas is\u201d and \u201cas available\u201d, 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. \r\n# 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. \r\n# 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. \r\n# EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).\r\n\r\n# Release Notes: Initial Release\r\n\r\nprint_help() {\r\n  printf '\\n### Below are all the (case sensitive) valid parameters for this script! ###\\n'\r\n  printf '\\nPreset Parameter: --forcereboot \\n'\r\n  printf '\\t%s\\n' \"--forcereboot: Reboot the device after the installation is complete.\"\r\n}\r\n\r\n# Determines whether or not help text is necessary and routes the output to stderr\r\ndie() {\r\n  local _ret=\"${2:-1}\"\r\n  echo \"$1\" &gt;&amp;2\r\n  test \"${_PRINT_HELP:-no}\" = yes &amp;&amp; print_help &gt;&amp;2\r\n  exit \"${_ret}\"\r\n}\r\n\r\n# THE DEFAULTS INITIALIZATION - OPTIONALS\r\n_arg_forceReboot=\"off\"\r\n_reboot_time=\"1\"                                  # Minutes\r\n_reboot_message_giveup=$((_reboot_time * 60 \/ 2)) # Seconds\r\n_reboot_message=\"A shutdown operation has been mandated by your IT staff and will occur in $((_reboot_time * 60)) seconds.\"\r\n_install_url=\"https:\/\/go.microsoft.com\/fwlink\/p\/?linkid=2009112\"\r\n_temp_file=\"\/tmp\/office.pkg\"\r\n\r\n# Grabbing the parameters and parsing through them.\r\nparse_commandline() {\r\n  while test $# -gt 0; do\r\n    _key=\"$1\"\r\n    case \"$_key\" in\r\n    --forcereboot)\r\n      _arg_forceReboot=\"on\"\r\n      ;;\r\n    --*)\r\n      _PRINT_HELP=yes die \"[Error] Got an unexpected argument '$1'\" 1\r\n      ;;\r\n    *)\r\n      _PRINT_HELP=yes die \"[Error] Got an unexpected argument '$1'\" 1\r\n      ;;\r\n    esac\r\n    shift\r\n  done\r\n}\r\n\r\ncleanup() {\r\n  # Clean up the Office 365 installer\r\n\r\n  # Check if the file exists\r\n  if [[ -f \"${_temp_file}\" ]]; then\r\n    if rm -f \"${_temp_file}\"; then\r\n      echo \"[Info] Cleaned up the Office 365 installer\"\r\n    else\r\n      echo \"[Error] Failed to clean up the Office 365 installer\"\r\n      exit 1\r\n    fi\r\n  else\r\n    echo \"[Info] Office 365 installer not found, nothing to clean up.\"\r\n  fi\r\n}\r\n\r\ncheck_installed() {\r\n  # Check if Office 365 is already installed\r\n  if [[ -d \"\/Applications\/Microsoft Word.app\" ]] || [[ -d \"\/Applications\/Microsoft Excel.app\" ]] || [[ -d \"\/Applications\/Microsoft PowerPoint.app\" ]] || [[ -d \"\/Applications\/Microsoft Outlook.app\" ]]; then\r\n    echo \"[Error] Office 365 Suite or one of its components is already installed\"\r\n    echo \"[Info] To remove the existing installation, please follow Microsoft's instructions found here:\"\r\n    echo \"https:\/\/support.microsoft.com\/en-us\/office\/troubleshoot-office-for-mac-issues-by-completely-uninstalling-before-you-reinstall-ec3aa66e-6a76-451f-9d35-cba2e14e94c0\"\r\n    exit 1\r\n  fi\r\n}\r\n\r\n# Check if we are running as system\/root\r\nif [[ $EUID -ne 0 ]]; then\r\n  echo \"[Error] This script must be run as System from Ninja or root in the terminal\" 1&gt;&amp;2\r\n  exit 1\r\nfi\r\n\r\n# shellcheck disable=SC2154\r\nif [[ \"${forceReboot}\" == \"true\" ]]; then\r\n  _arg_forceReboot=\"on\"\r\nfi\r\n\r\nparse_commandline \"$@\"\r\n\r\n# Check if Office 365 is already installed\r\ncheck_installed\r\n\r\n# Install Office 365\r\necho \"[Info] Downloading Office 365 installer\"\r\n\r\n# Download the Office 365 Suite\r\nif curl -L -o \"${_temp_file}\" \"${_install_url}\"; then\r\n  echo \"[Info] Office 365 installer downloaded successfully\"\r\nelse\r\n  echo \"[Error] Failed to download the Office 365 installer\"\r\n  exit 1\r\nfi\r\n\r\n# Install the Office 365 Suite\r\n_results=$(installer -pkg \"${_temp_file}\" -target \/ -dumplog 2&gt;&amp;1)\r\n# shellcheck disable=SC2181\r\nif [[ $? -eq 0 ]]; then\r\n  echo \"[Info] Office 365 Suite installed successfully\"\r\nelse\r\n  echo \"[Error] Failed to install the Office 365 Suite\"\r\n  _errors=$(echo \"${_results}\" | grep \"Error\")\r\n  # Parse errors\r\n  if ((\"$(echo \"$_errors\" | tail -2 | wc -l)\" &gt; 0)); then\r\n    # Check type of error\r\n    if echo \"$_errors\" | tail -2 | head -n 1 | grep -q \"not enough space\"; then\r\n      # Disk space error\r\n      echo \"[Error] Not enough space to install Office 365 Suite\"\r\n      # Print the raw error message related to disk space and how much space is needed\r\n      echo \"$_errors\" | tail -2 | head -n 1 | cut -d \":\" -f 5 | cut -d \"=\" -f 5 | cut -d \",\" -f 1\r\n    else\r\n      # Other errors\r\n      echo \"[Error] Installer Errors:\"\r\n      echo \"$_errors\"\r\n    fi\r\n  fi\r\n  cleanup\r\n  exit 1\r\nfi\r\n\r\ncleanup\r\n\r\nif [[ $_arg_forceReboot = \"on\" ]]; then\r\n  echo \"[Info] Sending message to user that a reboot has been initiated\"\r\n  osascript -e \"display alert \\\"Reboot Initiated\\\" message \\\"${_reboot_message}\\\" with icon caution giving up after ${_reboot_message_giveup}\" \/dev\/null 2&gt;&amp;1\r\n  echo \"[Info] Rebooting the device\"\r\n  shutdown -r \"+${_reboot_time}\" 2&gt;&amp;1\r\nfi<\/pre>\n<p>&nbsp;<\/p>\n\n<h2>Description d\u00e9taill\u00e9e<\/h2>\n<p>Voici une pr\u00e9sentation compl\u00e8te du fonctionnement de ce script.<\/p>\n<h3>1. Analyse des arguments et fonction d&rsquo;aide<\/h3>\n<p>Le script commence par d\u00e9finir une fonction print_help qui documente les param\u00e8tres pris en charge. Actuellement, un seul argument optionnel est disponible : &#8211;forcereboot. Cela d\u00e9clenche un red\u00e9marrage du syst\u00e8me apr\u00e8s l&rsquo;installation.<\/p>\n<p>bash<\/p>\n<p>CopyEdit<\/p>\n<p>&#8211;forcereboot : Red\u00e9marrer l&rsquo;appareil une fois l&rsquo;installation termin\u00e9e.<\/p>\n<h3>2. Initialisation des valeurs par d\u00e9faut et des variables<\/h3>\n<p>Le script initialise des variables essentielles, notamment :<\/p>\n<ul>\n<li>_install_url : URL du programme d&rsquo;installation d&rsquo;Office 365 de Microsoft<\/li>\n<li>_temp_file : Chemin o\u00f9 le .pkg sera stock\u00e9<\/li>\n<li>_arg_forceReboot: Drapeau pour la logique de red\u00e9marrage<\/li>\n<li>_reboot_time et _reboot_message : Utilis\u00e9 si le red\u00e9marrage est d\u00e9clench\u00e9<\/li>\n<\/ul>\n<h3>3. Analyse de la ligne de commande<\/h3>\n<p>En utilisant parse_commandline, le script lit et valide les arguments d&rsquo;entr\u00e9e. Toute entr\u00e9e non reconnue provoque une erreur et affiche le message d&rsquo;aide.<\/p>\n<h3>4. Contr\u00f4les de l&rsquo;environnement<\/h3>\n<p>Il v\u00e9rifie que le script est ex\u00e9cut\u00e9 en tant que super-utilisateur ou par le biais d&rsquo;un contexte syst\u00e8me, ce qui est essentiel pour l&rsquo;installation de logiciels \u00e0 l&rsquo;\u00e9chelle du syst\u00e8me.<\/p>\n<h3>5. Contr\u00f4le pr\u00e9alable \u00e0 l&rsquo;installation<\/h3>\n<p>Avant de t\u00e9l\u00e9charger le programme d&rsquo;installation, il v\u00e9rifie si Office est d\u00e9j\u00e0 install\u00e9 en d\u00e9tectant l&rsquo;une de ces applications :<\/p>\n<ul>\n<li>Microsoft Word<\/li>\n<li>Microsoft Excel<\/li>\n<li>Microsoft PowerPoint<\/li>\n<li>Microsoft Outlook<\/li>\n<\/ul>\n<p>S&rsquo;il en trouve, il interrompt le processus afin d&rsquo;\u00e9viter toute corruption ou tout conflit.<\/p>\n<h3>6. T\u00e9l\u00e9chargement et installation<\/h3>\n<p>En utilisant curl, il t\u00e9l\u00e9charge l&rsquo;installateur .pkg dans \/tmp. En cas de succ\u00e8s, il proc\u00e8de \u00e0 l&rsquo;installation \u00e0 l&rsquo;aide de la commande installercommand.<\/p>\n<h3>7. Gestion des erreurs<\/h3>\n<p>Si l&rsquo;installation \u00e9choue, le script capture et analyse le journal des erreurs. Il v\u00e9rifie les probl\u00e8mes connus tels que \u00ab\u00a0pas assez d&rsquo;espace\u00a0\u00bb et imprime des messages lisibles par l&rsquo;homme.<\/p>\n<h3>8. Nettoyage<\/h3>\n<p>Qu&rsquo;il r\u00e9ussisse ou non, il supprime le programme d&rsquo;installation t\u00e9l\u00e9charg\u00e9 de \/tmp pour garder le syst\u00e8me de fichiers propre.<\/p>\n<h3>9. Red\u00e9marrage facultatif<\/h3>\n<p>Si &#8211;forcereboot est fourni, il utilise osascript pour notifier l&rsquo;utilisateur connect\u00e9 et planifie un red\u00e9marrage via l&rsquo;arr\u00eat.<\/p>\n<h2>Cas d&rsquo;utilisation potentiels<\/h2>\n<h3>Cas de figure\u00a0: Onboarding des nouveaux appareils macOS<\/h3>\n<p>Un MSP acquiert un nouveau client avec 50 appareils MacBook n\u00e9cessitant Office 365. Au lieu de t\u00e9l\u00e9charger et d&rsquo;installer manuellement Office, le technicien informatique d\u00e9ploie ce script via le module de script de NinjaOne. Le script v\u00e9rifie la pr\u00e9sence d&rsquo;instances pr\u00e9install\u00e9es, t\u00e9l\u00e9charge le dernier programme d&rsquo;installation, installe Office et, si le param\u00e8tre &#8211;forcereboot est d\u00e9fini, s&rsquo;assure que le syst\u00e8me red\u00e9marre pour finaliser les configurations. Ce qui prendrait des heures manuellement est d\u00e9sormais automatis\u00e9 et r\u00e9alis\u00e9 en quelques minutes.<\/p>\n<h2>Comparaisons<\/h2>\n<p>Compar\u00e9 \u00e0 d&rsquo;autres approches, ce script pr\u00e9sente plusieurs avantages :<\/p>\n<table>\n<tbody>\n<tr>\n<td style=\"text-align: center;\"><strong>M\u00e9thode<\/strong><\/td>\n<td style=\"text-align: center;\"><strong>Avantages<\/strong><\/td>\n<td style=\"text-align: center;\"><strong>Inconv\u00e9nients<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Installation manuelle<\/td>\n<td>Simple pour un seul appareil<\/td>\n<td>Chronophage et sujette aux erreurs<\/td>\n<\/tr>\n<tr>\n<td>Microsoft Endpoint Manager<\/td>\n<td>Fonctionnalit\u00e9s de niveau entreprise<\/td>\n<td>N\u00e9cessite la licence et l&rsquo;installation d&rsquo;Intune<\/td>\n<\/tr>\n<tr>\n<td>Jamf Pro<\/td>\n<td>Int\u00e9gration pouss\u00e9e de macOS<\/td>\n<td>Co\u00fbt et complexit\u00e9<\/td>\n<\/tr>\n<tr>\n<td><strong>Ce script Shell<\/strong><\/td>\n<td>L\u00e9ger, compatible avec NinjaOne, \u00e9volutif<\/td>\n<td>Moins de personnalisation bas\u00e9e sur l&rsquo;interface graphique<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Ce script shell est id\u00e9al pour les \u00e9quipes informatiques qui ont besoin d&rsquo;automatisation sans disposer d&rsquo;une infrastructure de gestion des appareils \u00e0 grande \u00e9chelle.<\/p>\n<h2>FAQ<\/h2>\n<h3>Q\u00a0: Ce script peut-il \u00eatre utilis\u00e9 sans NinjaOne ?<\/h3>\n<p>Oui, tant qu&rsquo;il est ex\u00e9cut\u00e9 en tant que root sur macOS. NinjaOne simplifie le d\u00e9ploiement \u00e0 grande \u00e9chelle.<\/p>\n<h3>Q\u00a0: Que se passe-t-il si Office est partiellement install\u00e9 ?<\/h3>\n<p>Le script recherche les applications cl\u00e9s d&rsquo;Office et s&rsquo;arr\u00eate s&rsquo;il en trouve. Dans ce cas, un nettoyage manuel peut s&rsquo;av\u00e9rer n\u00e9cessaire.<\/p>\n<h3>Q\u00a0: Cela fonctionne-t-il sur les Mac Intel et Apple Silicon ?<\/h3>\n<p>Oui, le programme d&rsquo;installation de Microsoft est universel. Ce script ne fait pas explicitement la diff\u00e9rence, mais l&rsquo;installateur s&rsquo;en charge.<\/p>\n<h3>Q\u00a0: Puis-je personnaliser les applications Office install\u00e9es ?<\/h3>\n<p>Ce script utilise le programme d&rsquo;installation par d\u00e9faut, qui installe la suite compl\u00e8te. Pour les configurations personnalis\u00e9es, un autre .pkg ou script de post-installation sera n\u00e9cessaire.<\/p>\n<h2>Implications<\/h2>\n<p>Le d\u00e9ploiement de logiciels par le biais de scripts comporte \u00e0 la fois des avantages et des risques. D&rsquo;un point de vue positif, elle garantit la coh\u00e9rence, <a href=\"https:\/\/www.ninjaone.com\/blog\/how-human-error-relates-to-cybersecurity-risks\/\">r\u00e9duit les erreurs humaines<\/a> et permet de gagner du temps. Cependant, l&rsquo;ex\u00e9cution en tant que super-utilisateur pr\u00e9sente \u00e9galement des risques potentiels, en particulier si les scripts sont modifi\u00e9s ou malveillants. Il est essentiel de garantir une validation, une journalisation et un contr\u00f4le de l&rsquo;\u00e9tendue appropri\u00e9s. L&rsquo;automatisation de l&rsquo;installation d&rsquo;Office 365 s&rsquo;aligne sur les principes de s\u00e9curit\u00e9 informatique en r\u00e9duisant les interventions manuelles et en standardisant la configuration des terminaux.<\/p>\n<h2>Recommandations<\/h2>\n<ul>\n<li><strong>Tester d&rsquo;abord<\/strong>: Validez toujours le script sur une machine de test avant de le d\u00e9ployer en production.<\/li>\n<li><strong>Utilisez les champs personnalis\u00e9s de NinjaOne<\/strong>: Contr\u00f4lez dynamiquement le comportement de red\u00e9marrage ou suivre l&rsquo;\u00e9tat de l&rsquo;installation sur l&rsquo;ensemble des appareils.<\/li>\n<li><strong>Surveiller les journaux<\/strong>: Int\u00e9grez des m\u00e9canismes de journalisation si l&rsquo;on souhaite d\u00e9velopper davantage ce script.<\/li>\n<li><strong>Mise \u00e0 jour p\u00e9riodique<\/strong>: V\u00e9rifiez les modifications apport\u00e9es \u00e0 l&rsquo;URL de t\u00e9l\u00e9chargement ou au comportement d&rsquo;installation de Microsoft.<\/li>\n<\/ul>\n<h2>Conclusion<\/h2>\n<p>Pour les professionnels de l&rsquo;informatique qui g\u00e8rent des appareils macOS, l&rsquo;automatisation de l&rsquo;installation de logiciels de base tels qu&rsquo;Office 365 est une grande victoire. Ce script shell fournit une solution intelligente et efficace adapt\u00e9e aux environnements utilisant <a href=\"https:\/\/www.ninjaone.fr\/\" target=\"_blank\" rel=\"noopener\">NinjaOne<\/a>. En combinant les scripts macOS natifs avec les capacit\u00e9s d&rsquo;automatisation de NinjaOne, les \u00e9quipes informatiques peuvent r\u00e9aliser des d\u00e9ploiements rapides et \u00e9volutifs avec un minimum de friction. Qu&rsquo;il s&rsquo;agisse de l&rsquo;int\u00e9gration d&rsquo;un nouveau client ou du renouvellement d&rsquo;un parc existant, cette approche vous permet de maintenir la coh\u00e9rence, de r\u00e9duire les frais g\u00e9n\u00e9raux et de vous concentrer sur les initiatives informatiques strat\u00e9giques.<\/p>\n","protected":false},"author":35,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","_lmt_disableupdate":"no","_lmt_disable":""},"operating_system":[4210],"use_cases":[4281],"class_list":["post-513833","script_hub","type-script_hub","status-publish","hentry","script_hub_category-macos","use_cases-configuration-generale"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/script_hub\/513833","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/script_hub"}],"about":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/types\/script_hub"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/comments?post=513833"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/media?parent=513833"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/operating_system?post=513833"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/use_cases?post=513833"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}