PowerShell:将 IP 地址转换为子网

Jee*_*Jee 5 ip powershell networking

我能够使用 ff 提取计算机的主机 IP 地址:

$IPAddr = Get-NetIPConfiguration -InterfaceAlias "Ethernet" | select IPv4Address 
Run Code Online (Sandbox Code Playgroud)

如何根据子网掩码(如/24/20/16等)获取其对应的子网地址?

因此,如果主机 IP 地址为192.168.100.45,子网掩码为/24255.255.255.0,则代码应获取子网地址值192.168.100.0

Bil*_*art 8

您可以使用该类IPAddress。例子:

[IPAddress] (([IPAddress] "192.168.100.45").Address -band ([IPAddress] "255.255.255.0").Address)
Run Code Online (Sandbox Code Playgroud)

这将输出一个IPAddress包含 IP 地址的对象192.168.100.0

要将位计数转换为等效的位掩码字符串,您可以使用如下函数:

function ConvertTo-IPv4MaskString {
  param(
    [Parameter(Mandatory = $true)]
    [ValidateRange(0, 32)]
    [Int] $MaskBits
  )
  $mask = ([Math]::Pow(2, $MaskBits) - 1) * [Math]::Pow(2, (32 - $MaskBits))
  $bytes = [BitConverter]::GetBytes([UInt32] $mask)
  (($bytes.Count - 1)..0 | ForEach-Object { [String] $bytes[$_] }) -join "."
}
Run Code Online (Sandbox Code Playgroud)

使用这个函数,你可以写:

[IPAddress] (([IPAddress] "192.168.100.45").Address -band ([IPAddress] (ConvertTo-IPv4MaskString 24)).Address)
Run Code Online (Sandbox Code Playgroud)

这会输出一个IPAddress包含 IP 地址的对象192.168.100.0

其他几个函数可能有用:

function Test-IPv4MaskString {
  param(
    [Parameter(Mandatory = $true)]
    [String] $MaskString
  )
  $validBytes = '0|128|192|224|240|248|252|254|255'
  $MaskString -match `
    ('^((({0})\.0\.0\.0)|'      -f $validBytes) +
    ('(255\.({0})\.0\.0)|'      -f $validBytes) +
    ('(255\.255\.({0})\.0)|'    -f $validBytes) +
    ('(255\.255\.255\.({0})))$' -f $validBytes)
}

function ConvertTo-IPv4MaskBits {
  param(
    [parameter(Mandatory = $true)]
    [ValidateScript({Test-IPv4MaskString $_})]
    [String] $MaskString
  )
  $mask = ([IPAddress] $MaskString).Address
  for ( $bitCount = 0; $mask -ne 0; $bitCount++ ) {
    $mask = $mask -band ($mask - 1)
  }
  $bitCount
}
Run Code Online (Sandbox Code Playgroud)

ConvertTo-IPv4MaskBits是 的倒数ConvertTo-IPv4MaskString,用于Test-IPv4MaskString验证掩码是否是有效的 IPv4 掩码。

我不久前写的一篇文章中有更多详细信息:

今日 IT 专业人员 - 在 PowerShell 中使用 IPv4 地址