Come utilizzare PowerShell per confrontare l’orario del sistema locale con i server NTP

La sincronizzazione dell’orario è un elemento fondamentale in quella complessa macchina che è l’IT. Garantire che i dispositivi di una rete abbiano orari congruenti è fondamentale per diverse funzionalità e protocolli di sicurezza. Questo articolo analizza uno script PowerShell progettato per confrontare l’orario del sistema locale con un server NTP, segnalando se la differenza supera una soglia stabilita.

Background

Con l’evoluzione delle moderne infrastrutture IT, l’importanza della precisione dell’orario si è amplificata. Le differenze, anche di pochi secondi, possono creare problemi, causando anomalie nelle applicazioni o mettendo a repentaglio la sicurezza. I professionisti IT e i Managed Service Provider (MSP) devono garantire una sincronizzazione accurata dell’ora tra i vari dispositivi. Il nostro script per confrontare l’orario del sistema con un server NTP serve come strumento per segnalare potenziali discrepanze.

Lo script per confrontare l’orario del sistema con un server NTP

#Requires -Version 5.1

<#
.SYNOPSIS
    Compares the local system time to an NTP server, returning an exit code of 0 if less than a 2 minute difference or 1 if more than 2 minute difference.
.DESCRIPTION
    Compares the local system time to an NTP server, returning an exit code of 0 if less than a 2 minute difference or 1 if more than 2 minute difference.
.EXAMPLE
    No parameters needed
    The maximum acceptable time difference of 2 minute.
.EXAMPLE
    -Max 5
    The maximum acceptable time difference of 5 minute.
.EXAMPLE
    -NtpServer "pool.ntp.org"
    The maximum acceptable time difference of 2 minute, but uses the ntp.org's pool and use the time server pool "pool.ntp.org".
    Alterative pools:
    time.google.com
    time.cloudflare.com
    time.facebook.com
    time.apple.com
    time.nist.gov
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 10, Windows Server 2016
    Exit code 1: If the time is off more than Max
    Exit code 0: If the time is off less than or equal to Max
    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).
#>

[CmdletBinding()]
param (
    [Parameter()]
    [int]
    $Max = 2,
    [Parameter()]
    [string]
    $NtpServer = "time.windows.com"
)

begin {}
process {
    Write-Host "Using NTP server($NtpServer) to get time."
    $TimeSample = w32tm.exe /StripChart /Computer:"$NtpServer" /DataOnly /Samples:1
    $Diff = $($($TimeSample | Select-Object -Last 1) -split ', ' | Select-Object -Last 1) -replace '+' -replace '-'
    $TimeScale = $Diff -split '' | Select-Object -Last 1 -Skip 1

    # Convert to minutes
    $Diff = switch ($TimeScale) {
        "s" { [double]$($Diff -replace 's') / 60 }
        "m" { [double]$($Diff -replace 'm') }
        "h" { [double]$($Diff -replace 'h') * 60 * 60 }
        "d" { [double]$($Diff -replace 'd') * 60 * 60 * 24 }
        Default {}
    }
    Write-Host "Time Difference between NTP server and local system: $($([Math]::Round($Diff,2))) minutes"

    if ($Max -lt 0) {
        # If Max is negative then flip the sign to positive
        $Max = 0 - $Max
    }

    # Only output this if -Verbose is used
    Write-Verbose "$($Diff) minutes > $Max minutes = $($Diff -gt $Max)"
    # Assuming that $Max and $Diff are positive
    if (
        $Diff -gt $Max
    ) {
        # If time difference > $Max then return exit code of 1
        Write-Host "Time is over the maximum minutes of $Max."
        exit 1
    }
    else {
        # If time difference < $Max then return exit code of 0
        Write-Host "Time is under the maximum minutes of $Max."
        exit 0
    }
}
end {}

 

Accedi a oltre 700 script nel Dojo di NinjaOne

Ottieni l’accesso

Analisi dettagliata

  • Cmdlet Binding e parametri: Lo script per confrontare l’orario del sistema utilizza l’attributo CmdletBinding, che consente di utilizzarlo come cmdlet e di sfruttare le funzionalità integrate di PowerShell. Vengono dichiarati due parametri: $Max, la massima differenza di tempo accettabile (predefinita su 2 minuti) e $NtpServer, il server da controllare (predefinito su time.windows.com).
  • Blocco del processo: L’operazione principale viene eseguita qui.
  • Lo script per confrontare l’orario del sistema recupera la differenza di orario utilizzando w32tm.exe, uno strumento a riga di comando di Windows.
  • Analizza l’ora recuperata, individuando la differenza e l’unità di misura (secondi, minuti, ecc.).
  • Converte la differenza di orario in minuti.
  • Confronta la differenza calcolata con $Max, restituendo il codice di uscita appropriato.

Casi d’uso potenziali

Immagina un professionista IT che supervisiona una vasta rete di dispositivi in un’azienda. Ha osservato anomalie nelle applicazioni che registrano azioni visualizzando data e ora. Per effettuare la diagnosi, utilizza questo script per confrontare l’orario del sistema, per individuare i dispositivi che presentano discrepanze significative in termini di orario. Con i risultati ottenuti, può apportare le modifiche necessarie.

Confronti

Sebbene esistano strumenti basati su GUI e applicazioni di terze parti che offrono funzioni di sincronizzazione dell’ora, questo script per confrontare l’orario del sistema con un server NTP si distingue per la sua semplicità e adattabilità. Può essere integrato nei flussi di lavoro IT o negli strumenti di automazione esistenti, il che lo rende un’opzione versatile.

Domande frequenti

  • Posso utilizzare diversi server NTP? Sì, lo script per confrontare l’orario del sistema ne fornisce uno predefinito, ma con il parametro $NtpServer è possibile specificare un altro server.
  • E se volessi una soglia diversa in termini di differenza accettabile di orario? In quel caso dovresti modificare il parametro $Max usando il numero di minuti desiderato.
  • Lo script per confrontare l’orario del sistema si può utilizzare solo su Windows? Lo script per confrontare l’orario del sistema è progettato per Windows, in particolare per le versioni 10 e Server 2016 e successive.

Implicazioni

Le discrepanze di orario possono sembrare innocue, ma possono avere implicazioni profonde. Timestamp diversi possono compromettere l’integrità dei dati, influenzare le attività pianificate e generare vulnerabilità. Gli aggressori possono sfruttare queste differenze di orario, quindi i controlli regolari con strumenti come questo script per confrontare l’orario del sistema con un server NTP sono fondamentali per la sicurezza informatica.

Raccomandazioni

  • Esegui lo script per confrontare l’orario del sistema a intervalli regolari per garantire un monitoraggio continuo.
  • Verifica sempre la validità del server NTP utilizzato.
  • In caso di discrepanze, indaga sulla causa principale, in quanto potrebbe essere sintomatica di problemi di fondo più ampi.

Considerazioni finali

Sebbene script come questo per confrontare l’orario del sistema siano preziosi, una piattaforma completa come NinjaOne può migliorare in modo significativo la tua gestione IT. Integrando controlli, monitoraggio e risoluzione automatizzati, NinjaOne può essere complementare a strumenti come il nostro script PowerShell, assicurando che la tua infrastruttura rimanga funzionale e sicura.

Passi successivi

La creazione di un team IT efficiente ed efficace richiede una soluzione centralizzata che funga da principale strumento di erogazione dei servizi. NinjaOne consente ai team IT di monitorare, gestire, proteggere e supportare in termini di assistenza tutti i dispositivi, ovunque essi si trovino, senza la necessità di una complessa infrastruttura locale.

Scopri qualcosa in più su NinjaOne Endpoint Management, fai un tour dal vivo o inizia la tua prova gratuita della piattaforma NinjaOne.

Categorie:

Ti potrebbe interessare anche

Guarda una demo×
×

Guarda NinjaOne in azione!

Inviando questo modulo, accetto La politica sulla privacy di NinjaOne.

Termini e condizioni NinjaOne

Cliccando sul pulsante “Accetto” qui sotto, dichiari di accettare i seguenti termini legali e le nostre condizioni d’uso:

  • Diritti di proprietà: NinjaOne possiede e continuerà a possedere tutti i diritti, i titoli e gli interessi relativi allo script (compreso il copyright). NinjaOne ti concede una licenza limitata per l’utilizzo dello script in conformità con i presenti termini legali.
  • Limitazione d’uso: Puoi utilizzare lo script solo per legittimi scopi personali o aziendali interni e non puoi condividere lo script con altri soggetti.
  • Divieto di ripubblicazione: In nessun caso ti è consentito ripubblicare lo script in una libreria di script appartenente o sotto il controllo di un altro fornitore di software.
  • Esclusione di garanzia: Lo script viene fornito “così com’è” e “come disponibile”, senza garanzie di alcun tipo. NinjaOne non promette né garantisce che lo script sia privo di difetti o che soddisfi le tue esigenze o aspettative specifiche.
  • Assunzione del rischio: L’uso che farai dello script è da intendersi a tuo rischio. Riconosci che l’utilizzo dello script comporta alcuni rischi intrinseci, che comprendi e sei pronto ad assumerti.
  • Rinuncia e liberatoria: Non riterrai NinjaOne responsabile di eventuali conseguenze negative o indesiderate derivanti dall’uso dello script e rinuncerai a qualsiasi diritto legale o di equità e a qualsiasi rivalsa nei confronti di NinjaOne in relazione all’uso dello script.
  • EULA: Se sei un cliente NinjaOne, l’uso dello script è soggetto al Contratto di licenza con l’utente finale (EULA) applicabile.