2016-01-25 1 views
0

Je crée des scripts pour automatiser la configuration de Windows Server 2012 dans Powershell 4.0. À l'heure actuelle, j'ai réussi à créer des étendues DHCP, des exclusions et des réservations, mais je veux tester/vérifier les étendues DHCP avant qu'elles ne soient faites. Ce que je veux dire, c'est que je veux d'abord tester ou vérifier si une portée DHCP existe déjà avant d'exécuter la fonction que j'ai écrite (pour faire une nouvelle portée). Si la portée existe déjà, je veux que le script ignore la fonction. Sinon, je veux qu'il exécute la fonction pour créer la portée. La partie spécifique de test/vérification je ne sais pas comment le faire.Vérifiez si la portée DHCP existe

Répondre

1

Utilisez Get-DhcpServerv4Scope pour la liste des champs existants et filtrer la liste via Where-Object (alias ?) le nom ou l'ID que vous souhaitez vérifier:

if (-not (Get-DhcpServerv4Scope | ? { $_.Name -eq 'foo' })) { 
    Add-DhcpServerv4Scope ... 
} 

ou

if (-not (Get-DhcpServerv4Scope | ? { $_.ScopeId -eq '192.168.23.0' })) { 
    Add-DhcpServerv4Scope ... 
} 

Vous pouvez envelopper la vérifier dans une fonction personnalisée

function Test-DhcpServerv4Scope { 
    [CmdletBinding(DefaultParameterSetName='name')] 
    Param(
    [Parameter(Mandatory=$true, ParameterSetName='name')] 
    [string]$Name, 
    [Parameter(Mandatory=$true, ParameterSetName='id')] 
    [string]$ScopeId 
) 

    $p = $MyInvocation.BoundParameters.Keys 

    [bool](Get-DhcpServerv4Scope | Where-Object { 
    $_.$p -eq $MyInvocation.BoundParameters[$p] 
    }) 
} 

et u se comme ceci:

if (-not (Test-DhcpServerv4Scope -Name 'foo')) { 
    Add-DhcpServerv4Scope ... 
} 

ou comme ceci:

if (-not (Test-DhcpServerv4Scope -ScopeId '192.168.23.0')) { 
    Add-DhcpServerv4Scope ... 
} 

Remplacer *-DhcpServerv4Scope avec *-DhcpServerv6Scope si vous avez affaire à des étendues IPv6.

+0

Merci! J'ai juste besoin d'effacer un peu ce que le .BoundParameters.Keys représente mais je vais regarder ça moi-même. Je suppose qu'il est possible d'obtenir les paramètres -name et -scopid d'une variable que je vais obtenir via une autre Cmdlet. Juste pour le rendre un peu plus flexible et je n'ai pas besoin de coder ces paramètres. – Finsho