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