检查DHCP范围是否存在

时间:2016-01-25 11:50:30

标签: powershell windows-server-2012 dhcp powershell-v4.0

我正在制作脚本以在Powershell 4.0中自动执行Windows Server 2012配置。现在我设法创建DHCP作用域,排除和预留,但我想在它们制作之前测试/检查DHCP作用域。

我的意思是我首先想要在运行我编写的函数(创建一个新范围)之前测试或检查DHCP范围是否已经存在。如果范围已存在,我希望脚本跳过该功能。如果不是,我希望它运行该函数来创建范围。 测试/检查的具体部分我不知道该怎么做。

2 个答案:

答案 0 :(得分:1)

使用Get-DhcpServerv4Scope列出现有范围,并通过Where-Object(别名?)过滤列表,以获取要验证的名称或ID:

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

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

您可以将支票包装在自定义功能

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]
  })
}

并像这样使用它:

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

或者像这样:

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

如果您正在处理IPv6范围,请将*-DhcpServerv4Scope替换为*-DhcpServerv6Scope

答案 1 :(得分:0)

如果您尝试通过CimSession进行远程检查,您将获得如下所示的布尔快速回答:

If((get-dhcpserverv4scope -CimSession $CimSession).ScopeId -contains "1.10.20.0" ) 
{... Then do this}
else { do this }