检查 DHCP 作用域是否存在

Check if DHCP scope exists

我正在编写脚本以在 Powershell 4.0 中自动执行 Windows Server 2012 配置。现在我设法创建了 DHCP 作用域、排除项和保留项,但我想 test/check 在创建 DHCP 作用域之前。

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

使用 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

如果您尝试远程检查,例如通过 CimSession,您可能会得到像这样的快速布尔值答案:

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