Без сомнения, есть более элегантные способы сделать это, но вы можете перевернуть двоичные значения следующим образом:
'11111111.11111111.11111111.00000000'.Replace("1", "x").Replace("0", "1").Replace("x", "0")
Результат:
00000000.00000000.00000000.11111111
Другой способ выполняя это:
$ip = '255.255.255.0'
$mask = ($ip -split '\.' | ForEach-Object {255 - [byte]$_} ) -join '.'
Еще один способ - преобразовать строку адреса IP4 в ее десятичное значение
unsigned , использовать
-bnot
для этого значения и преобразовать обратно в IP-адрес .
$ip = '255.255.255.0'
# convert to UInt32
# This is now obsolete: $ipValue = [uint32] ([System.Net.IPAddress]$ip).Address
# so we do it like this:
$a = [uint32[]]$ip.split('.')
$ipValue = [uint32]($a[3] -shl 24) + ($a[2] -shl 16) + ($a[1] -shl 8) + $a[0]
# use -bnot and convert back to IP address string:
$mask = [System.BitConverter]::GetBytes(-bnot $ipValue) -join '.'
# or use: $mask = [string]([System.Net.IPAddress](-bnot $ipValue)).IPAddressToString
$mask
Результат:
$ip --> '255.255.255.0' --> 11111111.11111111.11111111.00000000
$mask --> '0.0.0.255' --> 00000000.00000000.00000000.11111111