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,子网掩码为/24或255.255.255.0,则代码应获取子网地址值192.168.100.0。
您可以使用该类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 地址
| 归档时间: |
|
| 查看次数: |
17459 次 |
| 最近记录: |