Guide complet pour la surveillance de bail DHCP avec PowerShell

Vous voulez en savoir plus sur les notifications de bail DHCP pour PowerShell ? Cet article explique pourquoi la surveillance et la gestion des champs d’application DHCP est une tâche essentielle pour les professionnels de l’informatique et les fournisseurs de services gérés (MSP). S’assurer que les serveurs DHCP fonctionnent efficacement et qu’il y a suffisamment d’adresses IP disponibles dans le pool permet d’éviter les problèmes de réseau et de garantir une connectivité sans faille.

Ce article présente un script PowerShell conçu pour surveiller les champs d’application DHCP et alerter les administrateurs lorsque le nombre de baux disponibles tombe en dessous d’un seuil spécifié. Ce script est un outil essentiel pour maintenir la fiabilité du réseau et éviter d’éventuelles perturbations.

Contexte

Le protocole de configuration dynamique des hôtes (DHCP) est un protocole de gestion de réseau utilisé pour automatiser le processus de configuration des appareils sur les réseaux IP. Sans DHCP, chaque appareil du réseau devrait se voir attribuer manuellement une adresse IP. Compte tenu de la nature dynamique des réseaux modernes, les serveurs DHCP sont souvent sollicités en permanence pour fournir des adresses IP.

Il est essentiel de surveiller ces serveurs et de s’assurer qu’ils disposent d’un nombre suffisant de locations. Le script PowerShell fourni répond à ce besoin en vérifiant les champs d’application DHCP et en alertant les administrateurs si le nombre de baux libres (lease) tombe en dessous d’un certain seuil.

Le script :

#Requires -Version 5.1

<#
.SYNOPSIS
    Checks the DHCP scopes for the number of leases used and alerts if the threshold is exceeded.
.DESCRIPTION
    Checks the DHCP scopes for the number of leases used and alerts if the threshold is exceeded.
    This script requires the DhcpServer module to be installed with the DHCP server feature installed.
    The script will output the number of leases used, free, and total for each scope.
    If the LeaseThreshold parameter is set, the script will alert if the number of free leases is less than the threshold.
    If the ExcludeScope parameter is set, the script will exclude the specified scope from the output.
    If the IncludeScope parameter is set, the script will only include the specified scope in the output.

.PARAMETER LeaseThreshold
    The number of free leases that will trigger an alert. If the number of free leases is less than the threshold, an alert will be triggered.
.PARAMETER ExcludeScope
    The name of the scope to exclude from the output.
.PARAMETER IncludeScope
    The name of the scope to include in the output.

.EXAMPLE
    (No Parameters)
    ## EXAMPLE OUTPUT WITHOUT PARAMS ##
    [Info] Scope: Test1 Leases Used(In Use/Total): 250/252
    [Info] Scope: Test2 Leases Used(In Use/Total): 220/252
    [Info] Scope: Test6 Leases Used(In Use/Total): 4954378/18446744073709551615

.EXAMPLE
    PARAMETER: -LeaseThreshold 10
    ## EXAMPLE OUTPUT WITH LEASETHRESHOLD ##
    [Alert] Scope: Test1 Leases Used(In Use/Free/Total): 220/2/252
    [Info] Scope: Test2 Leases Used(In Use/Free/Total): 150/102/252
    [Info] Scope: Test6 Leases Used(In Use/Free/Total): 0/18446744073709551615/18446744073709551615

.EXAMPLE
    PARAMETER: -ExcludeScope "Test1"
    ## EXAMPLE OUTPUT WITH EXCLUDESCOPE ##
    [Info] Scope: Test2 Leases Used(In Use/Free/Total): 220/2/252
    [Info] Scope: Test6 Leases Used(In Use/Free/Total): 0/18446744073709551615/18446744073709551615

.EXAMPLE
    PARAMETER: -IncludeScope "Test2"
    ## EXAMPLE OUTPUT WITH INCLUDESCOPE ##
    [Info] Scope: Test2 Leases Used(In Use/Free/Total): 220/2/252
.NOTES
    Minimum OS: Windows Server 2016
    Requires the DhcpServer module to be installed with the DHCP server feature installed.
    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 (
    $LeaseThreshold,
    [string[]]$ExcludeScope,
    [string[]]$IncludeScope
)

begin {
    function Test-IsElevated {
        # check if running under a Pester test case
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
    }

    try {
        if ($env:leaseThreshold -and $env:leaseThreshold -notlike "null") {
            [int]$LeaseThreshold = $env:leaseThreshold
        }
    }
    catch {
        Write-Host "[Error] LeaseThreshold must be a number"
        exit 2
    }
    
    if ($env:excludeScope -and $env:excludeScope -notlike "null") {
        $ExcludeScope = $env:excludeScope
    }
    if ($env:includeScope -and $env:includeScope -notlike "null") {
        $IncludeScope = $env:includeScope
    }

    # Split the ExcludeScope and IncludeScope parameters into an array
    if (-not [String]::IsNullOrWhiteSpace($ExcludeScope) -and $ExcludeScope -like '*,*') {
        $ExcludeScope = $ExcludeScope -split ',' | ForEach-Object { $_.Trim() } | Where-Object { -not [String]::IsNullOrWhiteSpace($_) } | Sort-Object -Unique
    }
    if (-not [String]::IsNullOrWhiteSpace($IncludeScope) -and $IncludeScope -like '*,*') {
        $IncludeScope = $IncludeScope -split ',' | ForEach-Object { $_.Trim() } | Where-Object { -not [String]::IsNullOrWhiteSpace($_) } | Sort-Object -Unique
    }

    # Check if $ExcludeScope and $IncludeScope contain similar items
    if (-not [String]::IsNullOrWhiteSpace($ExcludeScope) -and -not [String]::IsNullOrWhiteSpace($IncludeScope)) {
        $SimilarItems = $ExcludeScope | Where-Object { $IncludeScope -contains $_ }
        if ($SimilarItems) {
            Write-Host "[Error] The following scopes are in both ExcludeScope and IncludeScope: $($SimilarItems -join ', ')"
            exit 2
        }
    }

    $ShouldAlert = $false
}
process {
    if (-not (Test-IsElevated)) {
        Write-Host "[Error] Access Denied. Please run with Administrator privileges."
        exit 2
    }

    # Check if the DhcpServer module is installed
    if (-not (Get-Module -ListAvailable -Name DhcpServer -ErrorAction SilentlyContinue)) {
        Write-Host "[Error] The DhcpServer module is not installed. Please install the DHCP server feature and the DhcpServer module."
        exit 2
    }

    # Get all DHCP scopes
    $AllScopes = $(
        Get-DhcpServerv4Scope | Select-Object -ExpandProperty Name
        Get-DhcpServerv6Scope | Select-Object -ExpandProperty Name
    )

    # Output an error if the ExcludeScope or IncludeScope parameters contain invalid scope names
    $(
        if ($IncludeScope) { $IncludeScope }
        if ($ExcludeScope) { $ExcludeScope }
    ) | ForEach-Object {
        if ($_ -notin $AllScopes) {
            Write-Host "[Error] Scope: $_ does not exist in the DHCP server. Please check the scope name and try again."
        }
    }

    # IPv4
    # Get all DHCP scopes
    $v4scopes = Get-DhcpServerv4Scope | Where-Object { $_.State }

    # Iterate through each scope
    foreach ($scope in $v4scopes) {
        # Get statistics for the scope
        $Stats = Get-DhcpServerv4ScopeStatistics -ScopeId $scope.ScopeId

        # Get the name of the scope
        $Name = (Get-DhcpServerv4Scope -ScopeId $scope.ScopeId).Name

        # Check if the scope should be excluded
        if (-not [String]::IsNullOrWhiteSpace($ExcludeScope) -and $Name -in $ExcludeScope) {
            continue
        }

        # Check if the scope should be included
        if (-not [String]::IsNullOrWhiteSpace($IncludeScope) -and $Name -notin $IncludeScope) {
            continue
        }

        # Check if the number of free leases is less than the threshold
        if ($Stats.Free -lt $LeaseThreshold ) {
            if ($ShouldAlert -eq $false) {
                # Output once if this is the first scope to trigger an alert
                Write-Host "[Alert] Available DHCP Leases Low. You may want to make modifications to one of the below scopes."
            }
            Write-Host "[Alert] Scope: $Name Leases Used(In Use/Free/Total): $($Stats.InUse)/$($Stats.Free)/$($Stats.InUse+$Stats.Free)"
            $ShouldAlert = $true
        }
        else {
            Write-Host "[Info] Scope: $Name Leases Used(In Use/Free/Total): $($Stats.InUse)/$($Stats.Free)/$($Stats.InUse+$Stats.Free)"
        }
    }

    # IPv6
    # Get all DHCP scopes
    $v6Scopes = Get-DhcpServerv6Scope | Where-Object { $_.State }

    # Iterate through each scope
    foreach ($scope in $v6Scopes) {
        # Get statistics for the scope
        $Stats = Get-DhcpServerv6ScopeStatistics -Prefix $scope.Prefix

        # Get the name of the scope
        $Name = (Get-DhcpServerv6Scope -Prefix $scope.Prefix).Name

        # Check if the scope should be excluded
        if (-not [String]::IsNullOrWhiteSpace($ExcludeScope) -and $Name -in $ExcludeScope) {
            continue
        }

        # Check if the scope should be included
        if (-not [String]::IsNullOrWhiteSpace($IncludeScope) -and $Name -notin $IncludeScope) {
            continue
        }

        # Check if the number of free leases is less than the threshold
        if ($Stats.Free -lt $LeaseThreshold ) {
            if ($ShouldAlert -eq $false) {
                # Output once if this is the first scope to trigger an alert
                Write-Host "[Alert] Available DHCP Leases Low. You may want to make modifications to one of the below scopes."
            }
            Write-Host "[Alert] Scope: $Name Leases Used(In Use/Free/Total): $($Stats.InUse)/$($Stats.Free)/$($Stats.InUse+$Stats.Free)"
            $ShouldAlert = $true
        }
        else {
            Write-Host "[Info] Scope: $Name Leases Used(In Use/Free/Total): $($Stats.InUse)/$($Stats.Free)/$($Stats.InUse+$Stats.Free)"
        }
    }

    exit 0

}
end {
    
    
    
}

 

Description détaillée

Ce script PowerShell nécessite le module DhcpServer et est compatible avec Windows Server 2016 ou une version ultérieure. Voici une explication étape par étape de son fonctionnement :

Paramètres

  • LeaseThreshold: Ce paramètre définit le nombre minimum de baux libres requis pour déclencher une alerte.
  • ExcludeScope: Spécifie les portées DHCP à exclure de la surveillance.
  • IncludeScope: Spécifie les portées DHCP à inclure dans la surveillance.

Configuration initiale

Le script commence par définir une fonction pour vérifier s’il est exécuté avec des privilèges d’administrateur, ce qui est nécessaire pour accéder aux données du serveur DHCP. Il traite ensuite toutes les variables d’environnement pour les paramètres LeaseThreshold, ExcludeScope et IncludeScope, en s’assurant qu’elles sont correctement formatées.

Exclusion et inclusion de champs d’application

Le script divise et traite les paramètres ExcludeScope et IncludeScope, en les convertissant en tableaux. Cela permet de s’assurer qu’il n’y a pas de chevauchement entre les deux listes, ce qui pourrait entraîner des conflits.

Vérification des champs d’application DHCP

Le script récupère tous les champs d’application DHCP disponibles (IPv4 et IPv6). Il filtre ensuite ces champs d’application en fonction des paramètres ExcludeScope et IncludeScope. Pour chaque portée, le script récupère les statistiques, y compris le nombre de baux utilisés et libres.

Les alertes

Si le nombre de baux libres dans une portée est inférieur au LeaseThreshold, le script émet un message d’alerte. Ainsi, les administrateurs sont immédiatement informés de tout problème potentiel concernant la disponibilité des baux DHCP.

Finalisation

Si le script rencontre des erreurs, telles que des modules manquants ou des noms d’étendue non valides, il affiche un message d’erreur approprié et quitte le système.

Cas d’utilisation potentiels

Imaginez un professionnel de l’informatique qui gère le réseau d’une grande entreprise. Il dispose de plusieurs serveurs DHCP répartis sur différents sites. Chaque serveur gère plusieurs champs d’application et il est essentiel de veiller à ce qu’il y ait toujours suffisamment d’adresses IP disponibles pour les nouveaux appareils. En mettant en œuvre ce script, le professionnel de l’informatique peut :

  1. Surveiller proactivement les champs d’application DHCP: Vérifier régulièrement l’état des baux DHCP sans passer en revue manuellement chaque portée.
  2. Recevoir des alertes: Recevoir des notifications instantanées si un champ d’application tombe en dessous d’un seuil spécifié de baux libres, ce qui permet d’intervenir en temps utile.
  3. Allocation efficace des ressources: Ajustez les paramètres DHCP ou ajoutez des adresses IP aux portées si nécessaire, afin d’éviter les perturbations du réseau.

Comparaisons

Comparaison entre surveillance par script et surveillance manuelle

La surveillance manuelle des champs d’application DHCP peut prendre beaucoup de temps et être sujette à des erreurs humaines. Le script automatise ce processus, ce qui permet d’assurer une surveillance cohérente et fiable. En outre, le script peut gérer simultanément plusieurs champs d’application et serveurs, ce qui serait difficile à gérer manuellement.

Script et outils tiers

Bien que des outils tiers offrent des solutions complètes de gestion DHCP, ils peuvent être coûteux et nécessiter une infrastructure supplémentaire. Ce script PowerShell constitue une solution simple et économique pour les entreprises qui souhaitent améliorer leur surveillance DHCP sans investissements importants.

FAQ

Q : Que se passe-t-il si le script n’est pas exécuté avec des privilèges d’administrateur ?

R : Le script affichera un message d’erreur et sortira. Des privilèges d’administrateur sont nécessaires pour accéder aux données du serveur DHCP.

Q : Puis-je utiliser ce script sur des versions plus anciennes de Windows Server ?

R : Le script est conçu pour Windows Server 2016 ou une version ultérieure. Les versions antérieures peuvent ne pas prendre en charge le module DhcpServer requis.

Q : Que se passe-t-il si le module de serveur DHCP n’est pas installé ?

R : Le script affichera un message d’erreur indiquant que le module DhcpServer n’est pas installé. Vous devez installer la fonction de serveur DHCP et le module DhcpServer pour utiliser ce script.

Implications

Une surveillance efficace de la portée du protocole DHCP peut améliorer de manière significative la fiabilité et la sécurité du réseau. En veillant à ce qu’il y ait toujours suffisamment d’adresses IP disponibles, les administrateurs de réseau peuvent éviter les problèmes de connectivité et garantir un fonctionnement sans faille des appareils du réseau. Ce script permet d’identifier les problèmes potentiels avant qu’ils ne s’aggravent, ce qui permet une gestion et un dépannage proactifs.

Recommandations

  • Exécution régulière: Planifiez l’exécution du script à intervalles réguliers à l’aide du planificateur de tâches ou d’un outil similaire afin d’assurer une surveillance continue.
  • Ajustement du seuil: Réglez le paramètre LeaseThreshold en fonction des besoins de votre réseau afin d’éviter les fausses alertes ou les alertes manquées.
  • Gestion du champ d’application: Examinez et mettez régulièrement à jour les paramètres ExcludeScope et IncludeScope pour tenir compte des modifications apportées à votre réseau.

Conclusion

La surveillance des champs d’application DHCP est une tâche essentielle pour maintenir la fiabilité du réseau. Ce script PowerShell fournit un moyen puissant et efficace d’automatiser ce processus, en veillant à ce que les administrateurs soient rapidement alertés des problèmes potentiels. Pour les professionnels de l’informatique et les MSP, ce script peut être un outil précieux dans leur boîte à outils de gestion de réseau.

En outre, l’utilisation d’outils tels que NinjaOne permet d’améliorer la surveillance et la gestion du réseau, offrant ainsi des solutions complètes pour la maintenance de l’infrastructure informatique.

En mettant en œuvre ce script et en suivant les bonnes pratiques, les entreprises peuvent s’assurer que leurs serveurs DHCP sont toujours prêts à répondre aux demandes du réseau, ce qui permet d’éviter les interruptions et de maintenir un bon fonctionnement.

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)).