{"id":353748,"date":"2024-09-17T06:06:49","date_gmt":"2024-09-17T06:06:49","guid":{"rendered":"https:\/\/www.ninjaone.com\/script-hub\/script-per-cercare-un-testo-nei-file-di-log-su-macos\/"},"modified":"2024-10-18T12:11:42","modified_gmt":"2024-10-18T12:11:42","slug":"script-per-cercare-un-testo-nei-file-di-log-su-macos","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/it\/script-hub\/script-per-cercare-un-testo-nei-file-di-log-su-macos\/","title":{"rendered":"Come cercare un testo nei file di log su macOS con uno script Bash personalizzato"},"content":{"rendered":"<p>Nell&#8217;attuale panorama IT, il monitoraggio e la gestione efficiente dei file di log \u00e8 fondamentale per mantenere l\u2019integrit\u00e0 del sistema e garantire la sicurezza. Che tu sia un professionista IT o un <a href=\"https:\/\/www.ninjaone.com\/it\/cos-e-un-msp\/\" target=\"_blank\" rel=\"noopener\">Managed Service Provider (MSP)<\/a>, la possibilit\u00e0 di ricercare e segnalare rapidamente un testo specifico all&#8217;interno di un file di log pu\u00f2 essere uno strumento potente nel tuo arsenale. In questo articolo presenteremo uno <a href=\"https:\/\/www.ninjaone.com\/blog\/what-is-bash-scripting\/\" target=\"_blank\" rel=\"noopener\">script Bash<\/a> personalizzato progettato <strong>per cercare un testo nei file di log su <a href=\"https:\/\/www.ninjaone.com\/it\/gestione-endpoint\/gestione-dei-mac\/\">macOS<\/a> e avvisare gli utenti.<\/strong><\/p>\n<h2>L&#8217;importanza del monitoraggio dei file di log<\/h2>\n<p>I file di log sono una componente fondamentale per il funzionamento e la manutenzione dei sistemi IT. Contengono le registrazioni di eventi, processi ed errori che si verificano in un computer o in una rete. Analizzando i file di log, i professionisti IT possono identificare i problemi, rintracciarne la causa principale e garantire la conformit\u00e0 ai requisiti normativi. Tuttavia, controllare manualmente questi file per trovare le informazioni rilevanti pu\u00f2 richiedere molto tempo ed \u00e8 un\u2019attivit\u00e0 che pu\u00f2 essere <a href=\"https:\/\/www.ninjaone.com\/it\/blog\/come-l-errore-umano-influisce-sui-rischi-di-cybersecurity\/\" target=\"_blank\" rel=\"noopener\">soggetta a errori umani<\/a>.<\/p>\n<p>\u00c8 qui che entra in gioco l\u2019<a href=\"https:\/\/www.ninjaone.com\/it\/rmm\/automazione-it\/\" target=\"_blank\" rel=\"noopener\">automazione<\/a>. L&#8217;automazione del processo di monitoraggio dei file di log e l&#8217;attivazione di avvisi quando viene rilevato un testo specifico possono far risparmiare tempo e ridurre il rischio di trascurare problemi critici. Lo script di cui parleremo \u00e8 una soluzione semplice ma efficace per ottenere questo risultato su macOS.<\/p>\n<h2>Lo script per cercare un testo nei file di log su macOS:<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">#!\/usr\/bin\/env bash\r\n\r\n# Description: Alert when the specified Text is found in a text file.\r\n#\r\n# Release Notes: Initial Release\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# Text to trigger on: [Alert]\r\n#\r\n# Below are all the valid parameters for this script.\r\n# Preset Parameter: --file \"\/opt\/MyLogFile.log\" --text batman\r\n#   Alerts when the text \"batman\" is found in the file \/opt\/MyLogFile.log\r\n#    This is Case Sensitive\r\n#     Example where it will alert: \"I am batman!\"\r\n#     Example where it will alert: \"Iambatman!\"\r\n#     Example where it will not alert: \"IamBatman!\"\r\n#     Example where it will not alert: \"I am Batman!\"\r\n#\r\n# Preset Parameter: --file \"\/opt\/MyLogFile.log\" --text Batman --caseInsensitive true\r\n#   Alerts when the text \"Batman\" is found in the file \/opt\/MyLogFile.log, but is case insensitive\r\n#    This is Case Insensitive\r\n#     Example where it will alert: \"I am batman!\"\r\n#     Example where it will alert: \"Iambatman!\"\r\n#\r\n# Preset Parameter: --file \"\/opt\/MyLogFile.log\" --text Batman --wholeWord true\r\n#   Alerts when the text \"Batman\" is found in the file \/opt\/MyLogFile.log, but only if it is a word in a sentence.\r\n#    This is Case Sensitive\r\n#     Example where it will alert: \"I am Batman!\"\r\n#     Example where it will not alert: \"IamBatman!\"\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    test \"${_PRINT_HELP:-no}\" = yes &amp;&amp; print_help &gt;&amp;2\r\n    echo \"$1\" &gt;&amp;2\r\n    exit \"${_ret}\"\r\n}\r\n\r\n# Function that evaluates whether a value passed to it begins by a character\r\n# that is a short option of an argument the script knows about.\r\n# This is required in order to support getopts-like short options grouping.\r\nbegins_with_short_option() {\r\n    local first_option all_short_options='ftiwh'\r\n    first_option=\"${1:0:1}\"\r\n    test \"$all_short_options\" = \"${all_short_options\/$first_option\/}\" &amp;&amp; return 1 || return 0\r\n}\r\n\r\n# THE DEFAULTS INITIALIZATION - OPTIONALS\r\n_arg_file=\r\n_arg_text=\r\n_arg_caseInsensitive=\"false\"\r\n_arg_wholeWord=\"false\"\r\n\r\n# Help text function for when invalid input is encountered\r\nprint_help() {\r\n    printf '%s\\n' \"Alert when the specified Text is found in a text file.\"\r\n    printf 'Usage: %s [-f|--file [path to file]] [-t|--text [text to search]] [-i|--caseInsensitive &lt;true|false&gt;] [-w|--wholeWord &lt;true|false&gt;] [-h|--help]\\n' \"$0\"\r\n    printf '\\t%s\\n' \"-f, --file: path to a log file\"\r\n    printf '\\t%s\\n' \"-t, --text: text to alert when found\"\r\n    printf '\\t%s\\n' \"-i, --caseInsensitive: search text with case insensitivity (default: false)\"\r\n    printf '\\t%s\\n' \"-w, --wholeWord: search for text as a whole word (default: false)\"\r\n    printf '\\t%s\\n' \"-h, --help: Prints help\"\r\n}\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        -f | --file)\r\n            test $# -lt 2 &amp;&amp; die \"Missing value for the optional argument '$_key'.\" 1\r\n            _arg_file=\"$2\"\r\n            shift\r\n            ;;\r\n        --file=*)\r\n            _arg_file=\"${_key##--file=}\"\r\n            ;;\r\n        -f*)\r\n            _arg_file=\"${_key##-f}\"\r\n            ;;\r\n        -t | --text)\r\n            test $# -lt 2 &amp;&amp; die \"Missing value for the optional argument '$_key'.\" 1\r\n            _arg_text=\"$2\"\r\n            shift\r\n            ;;\r\n        --text=*)\r\n            _arg_text=\"${_key##--text=}\"\r\n            ;;\r\n        -t*)\r\n            _arg_text=\"${_key##-t}\"\r\n            ;;\r\n        -i | --caseInsensitive)\r\n            test $# -lt 2 &amp;&amp; die \"Missing value for the optional argument '$_key'.\" 1\r\n            _arg_caseInsensitive=\"$2\"\r\n            shift\r\n            ;;\r\n        --caseInsensitive=*)\r\n            _arg_caseInsensitive=\"${_key##--caseInsensitive=}\"\r\n            ;;\r\n        -i*)\r\n            _arg_caseInsensitive=\"${_key##-i}\"\r\n            ;;\r\n        -w | --wholeWord)\r\n            test $# -lt 2 &amp;&amp; die \"Missing value for the optional argument '$_key'.\" 1\r\n            _arg_wholeWord=\"$2\"\r\n            shift\r\n            ;;\r\n        --wholeWord=*)\r\n            _arg_wholeWord=\"${_key##--wholeWord=}\"\r\n            ;;\r\n        -w*)\r\n            _arg_wholeWord=\"${_key##-w}\"\r\n            ;;\r\n        -h | --help)\r\n            print_help\r\n            exit 0\r\n            ;;\r\n        -h*)\r\n            print_help\r\n            exit 0\r\n            ;;\r\n        *)\r\n            _PRINT_HELP=yes die \"FATAL ERROR: Got an unexpected argument '$1'\" 1\r\n            ;;\r\n        esac\r\n        shift\r\n    done\r\n}\r\n\r\nparse_commandLine \"$@\"\r\n\r\ntext=$_arg_text\r\nfile=$_arg_file\r\ncaseInsensitive=$_arg_caseInsensitive\r\nwholeWord=$_arg_wholeWord\r\n\r\n# Check if Script Variables where used and overwrite command line parameters\r\nif [[ -n \"${textToMatch}\" ]]; then\r\n    text=$textToMatch\r\nfi\r\nif [[ -n \"${textFile}\" ]]; then\r\n    file=$textFile\r\nfi\r\nif [[ -n \"${matchWholeWord}\" ]]; then\r\n    wholeWord=$matchWholeWord\r\nfi\r\nif [[ -n \"${insensitiveToCase}\" ]]; then\r\n    caseInsensitive=$insensitiveToCase\r\nfi\r\n\r\n# Check if text is not an empty string\r\nif [[ -z \"${text}\" ]]; then\r\n    echo \"[Error] Text not specified\"\r\n    exit 2\r\nfi\r\n\r\n# Check if text is not an empty string\r\nif [[ -z \"${file}\" ]]; then\r\n    echo \"[Error] File not specified\"\r\n    exit 2\r\nfi\r\n\r\n# Does file exit and is readable\r\nif [ -f \"${file}\" ]; then\r\n    echo \"[Info] File \\\"${file}\\\" exists\"\r\n    if [ -r \"${file}\" ]; then\r\n        echo \"[Info] File \\\"${file}\\\" is readable\"\r\n    else\r\n        echo \"[Error] File \\\"${file}\\\" is not readable\"\r\n        exit 2\r\n    fi\r\nelse\r\n    echo \"[Error] File \\\"${file}\\\" does not exists\"\r\n    exit 2\r\nfi\r\n\r\n# Detect\r\ncount=0\r\nif [[ \"${wholeWord}\" == \"true\" ]]; then\r\n    if [[ \"${caseInsensitive}\" == \"true\" ]]; then\r\n        count=$(grep -c -i -n -w \"$text\" \"$file\")\r\n    else\r\n        count=$(grep -c -n -w \"$text\" \"$file\")\r\n    fi\r\nelse\r\n    if [[ \"${caseInsensitive}\" == \"true\" ]]; then\r\n        count=$(grep -c -i -n -e \"$text\" \"$file\")\r\n    else\r\n        count=$(grep -c -n -e \"$text\" \"$file\")\r\n    fi\r\nfi\r\n\r\n# Alert\r\nif ((count &gt; 0)); then\r\n    echo \"[Alert] Found text in file\"\r\n    exit 1\r\nelse\r\n    echo \"[Info] Not found text in file\"\r\n    exit 0\r\nfi\r\n<\/pre>\n<p>&nbsp;<\/p>\n\n<div class=\"in-context-cta\"><p>Accedi a oltre 700 script nel Dojo di NinjaOne <a href=\"https:\/\/www.ninjaone.com\/it\/prova-gratuita\/\">Ottieni l&#8217;accesso<\/a><\/p>\n<\/div>\n<h2>Comprendere lo script<\/h2>\n<p>Lo script fornito \u00e8 uno script Bash progettato per cercare un testo specifico all&#8217;interno di un file di log e attivare un avviso se tale testo viene trovato. Consente agli utenti di personalizzare i parametri di ricerca, ad esempio se la ricerca deve essere sensibile alle maiuscole o se deve corrispondere solo a parole intere. Ecco una descrizione dettagliata del funzionamento dello script.<\/p>\n<h3>Inizializzazione dello script<\/h3>\n<p>Lo script per cercare un testo nei file di log su macOS inizia definendo alcune funzioni per gestire gli errori, verificare la validit\u00e0 degli argomenti e visualizzare le informazioni di aiuto. La funzione die(), per esempio, viene utilizzata per terminare lo script e visualizzare un messaggio di errore se qualcosa va storto. Questa funzione stampa anche il testo di aiuto se viene fornita l&#8217;opzione &#8211;help.<\/p>\n<h3>Impostazione dei parametri predefiniti<\/h3>\n<p>Lo script per cercare un testo nei file di log su macOS inizializza diversi parametri predefiniti:<\/p>\n<ul>\n<li>_arg_file: Memorizza il percorso del file di log da cercare.<\/li>\n<li>_arg_text: Contiene il testo da cercare all&#8217;interno del file di log.<\/li>\n<li>_arg_caseInsensitive: Determina se la ricerca non debba essere sensibile alle maiuscole e alle minuscole.<\/li>\n<li>_arg_wholeWord: Specifica se la ricerca deve corrispondere solo a parole intere.<\/li>\n<\/ul>\n<p>Questi parametri possono essere modificati dall&#8217;utente tramite argomenti della riga di comando durante l&#8217;esecuzione dello script per cercare un testo nei file di log su macOS.<\/p>\n<h3>Parsing degli argomenti della riga di comando<\/h3>\n<p>La funzione parse_commandLine() \u00e8 responsabile del parsing degli argomenti della riga di comando passati allo script. Supporta diverse opzioni, come &#8211;file per specificare il file di log, &#8211;text per definire il testo di ricerca e &#8211;caseInsensitive e &#8211;wholeWord per personalizzare il comportamento della ricerca.<\/p>\n<p>Se mancano i parametri richiesti, lo script per cercare un testo nei file di log su macOS termina con un messaggio di errore. Questo assicura che lo script venga eseguito con tutte le informazioni necessarie.<\/p>\n<h3>Convalida degli input e accessibilit\u00e0 dei file<\/h3>\n<p>Prima di eseguire la ricerca, lo scriptper cercare un testo nei file di log su macOS convalida gli input per verificare che non siano vuoti e controlla se il file specificato esiste ed \u00e8 leggibile. Se il file non esiste o non \u00e8 accessibile, lo script esce con un messaggio di errore, evitando un&#8217;esecuzione inutile.<\/p>\n<h3>Ricerca nel file di log<\/h3>\n<p>La funzionalit\u00e0 principale dello script consiste nella capacit\u00e0 di effettuare una ricerca nei file di log in base ai parametri forniti. Lo script per cercare un testo nei file di log su macOS utilizza il comando grep, un potente strumento per la ricerca di testo nei file, per eseguire la ricerca. A seconda delle opzioni selezionate, grep cercher\u00e0 il testo con sensibilit\u00e0 a maiuscole e minuscole oppure no, e cercher\u00e0 una corrispondenza con l&#8217;intera parola o parte di essa.<\/p>\n<ul>\n<li>Se &#8211;wholeWord \u00e8 impostato su true, lo script aggiunge il flag -w a grep, assicurando che vengano cercate corrispondenze solo con le parole intere.<\/li>\n<li>Se &#8211;caseInsensitive \u00e8 su True, lo script utilizza il flag -i per non fare differenza tra maiuscole e minuscole durante la ricerca.<\/li>\n<\/ul>\n<h3>Attivazione degli avvisi<\/h3>\n<p>Una volta completata la ricerca, lo script conta il numero di corrispondenze trovate nel file di log. Se non vengono rilevate delle corrispondenze, lo script attiva un avviso stampando il messaggio [Alert] Found text in file. If no matches are found, it prints [Info] Testo non trovato nel file. Questo approccio diretto garantisce che gli utenti siano immediatamente informati se il testo che stanno monitorando compare nel file di log.<\/p>\n<h2>Applicazione concreta<\/h2>\n<p>Immagina un professionista IT che gestisce una server farm in cui \u00e8 fondamentale monitorare i messaggi di errore specifici nei file di log. Utilizzando questo script per cercare un testo nei file di log su macOS, pu\u00f2 essere avvisato automaticamente ogni volta che un particolare codice di errore o messaggio appare nei log, in modo da poter intervenire immediatamente. Per esempio, se nei log viene trovato il testo &#8220;disk failure&#8221;, lo script pu\u00f2 attivare un avviso, consentendo al team IT di risolvere il problema prima che si trasformi in un guasto critico del sistema.<\/p>\n<h2>Confronto con altri metodi<\/h2>\n<p>Sebbene questo script fornisca un modo semplice ed efficace per monitorare i file di log, con altri metodi \u00e8 possibile ottenere risultati simili. Per esempio, i sistemi di gestione dei log pi\u00f9 avanzati, come <a href=\"https:\/\/www.splunk.com\/\" target=\"_blank\" rel=\"noopener\">Splunk<\/a> o lo <a href=\"https:\/\/www.elastic.co\/elastic-stack\" target=\"_blank\" rel=\"noopener\">stack ELK<\/a>, offrono un&#8217;analisi completa dei log, compreso il monitoraggio in tempo reale, le query complesse e le integrazioni con altri sistemi. Tuttavia, queste soluzioni richiedono spesso pi\u00f9 risorse e possono essere eccessive per ambienti pi\u00f9 piccoli o per casi d&#8217;uso specifici in cui \u00e8 sufficiente un semplice script Bash.<\/p>\n<h2>Domande frequenti<\/h2>\n<p>1.\u00a0<strong>Questo script pu\u00f2 essere utilizzato su sistemi operativi diversi da macOS?<\/strong><\/p>\n<p>S\u00ec, questo script \u00e8 scritto in Bash, che \u00e8 disponibile sulla maggior parte dei sistemi operativi Unix-like, compreso <a href=\"https:\/\/www.ninjaone.com\/it\/blog\/filesystem-di-linux\/\" target=\"_blank\" rel=\"noopener\">Linux<\/a>. Tuttavia, potrebbero essere necessari alcune modifiche a seconda dell&#8217;ambiente specifico.<\/p>\n<p>2.\u00a0<strong>Come posso modificare lo script per cercare pi\u00f9 file contemporaneamente?<\/strong><\/p>\n<p>Puoi modificare lo script per eseguire iterazioni su pi\u00f9 file espandendo l&#8217;opzione &#8211;file in modo da accettare un elenco di file o directory. Lo script pu\u00f2 quindi iterare su ogni file ed eseguire la ricerca.<\/p>\n<p>3.\u00a0<strong>Cosa succede se il file di log \u00e8 molto grande?<\/strong><\/p>\n<p>Per i file di log molto grandi, le prestazioni possono diventare un problema. In questi casi, valuta la possibilit\u00e0 di ottimizzare la ricerca limitando il numero di righe ricercate o utilizzando strumenti pi\u00f9 avanzati come awk o sistemi di gestione dei log.<\/p>\n<h2>Implicazioni per la sicurezza informatica<\/h2>\n<p>Automatizzando il monitoraggio dei file di log, questo script pu\u00f2 contribuire a <a href=\"https:\/\/www.ninjaone.com\/it\/blog\/guida-sicurezza-informatica-msp-consigli-contro-ransomware\/\" target=\"_blank\" rel=\"noopener\">migliorare la sicurezza informatica<\/a>, garantendo che i problemi critici vengano individuati e affrontati tempestivamente. Per esempio, il rilevamento di tentativi di accesso non autorizzati o di attivit\u00e0 di malware nei log pu\u00f2 aiutare a <a href=\"https:\/\/www.ninjaone.com\/it\/it-hub\/sicurezza-degli-endpoint\/cos-e-una-violazione-dei-dati\/\" target=\"_blank\" rel=\"noopener\">prevenire le violazioni della sicurezza<\/a> e a <a href=\"https:\/\/www.ninjaone.com\/it\/backup\/backup-di-file-e-cartelle\/\" target=\"_blank\" rel=\"noopener\">ridurre il rischio di perdita di dati<\/a>.<\/p>\n<h2>Best practice<\/h2>\n<p>Quando utilizzi questo script per cercare un testo nei file di log su macOS, tieni a mente le seguenti best practice:<\/p>\n<ul>\n<li>Aggiorna regolarmente lo script per garantire la compatibilit\u00e0 con il tuo ambiente.<\/li>\n<li>Utilizza parametri di ricerca chiari e specifici per evitare falsi positivi.<\/li>\n<li>Implementa ulteriori meccanismi di logging o di avviso come soluzioni complementari allo script.<\/li>\n<\/ul>\n<h2>Considerazioni finali<\/h2>\n<p>Per i professionisti IT e gli MSP, strumenti come questo script per cercare un testo nei file di log su macOS sono preziosi per automatizzare le attivit\u00e0 di routine e garantire l\u2019integrit\u00e0 del sistema. Inserendo tali script nel tuo flusso di lavoro, potrai concentrarti su attivit\u00e0 pi\u00f9 strategiche, mantenendo la certezza che i problemi critici non passeranno inosservati. <a href=\"https:\/\/www.ninjaone.com\/it\/\" target=\"_blank\" rel=\"noopener\">NinjaOne<\/a> offre una suite di strumenti che possono migliorare ulteriormente le capacit\u00e0 di gestione dell&#8217;IT, fornendo ulteriori livelli di <a href=\"https:\/\/www.ninjaone.com\/it\/rmm\/automazione-it\/\" target=\"_blank\" rel=\"noopener\">automazione<\/a>, <a href=\"https:\/\/www.ninjaone.com\/it\/blog\/endpoint-monitoraggio-spiegato-con-degli-esempi\/\" target=\"_blank\" rel=\"noopener\">monitoraggio<\/a> e<a href=\"https:\/\/www.ninjaone.com\/it\/it-hub\/sicurezza-degli-endpoint\/\" target=\"_blank\" rel=\"noopener\"> sicurezza<\/a> a supporto delle operazioni IT.<\/p>\n","protected":false},"author":35,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"open","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":[4273],"class_list":["post-353748","script_hub","type-script_hub","status-publish","hentry","script_hub_category-macos"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/script_hub\/353748","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/script_hub"}],"about":[{"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/types\/script_hub"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/comments?post=353748"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/media?parent=353748"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/operating_system?post=353748"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/use_cases?post=353748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}