Всю голову уже сломал. При нажатии на кнопку "OK" в таблицу базу данных должен записаться диапазон ip адресов согласно данным из переменных $ipaddress1 = "10.62.39.50" и $ipaddress2 = "10.62.39.55"
То есть, должно быть вот так:
При запуске кода, данные в таблицу не заносятся. Появляется ошибка:
function Connect-DB
{
[CmdletBinding()]
param
(
[string]$dbServer = 'localhost',
[string]$dbName = 'postgres',
[string]$dbUser = 'postgres',
[string]$dbPass = 'postgres',
[string]$port = '5432'
)
$szConnect = "Driver={PostgreSQL UNICODE(x64)};Server=$dbServer;Port=$port;Database=$dbName;Uid=$dbUser;Pwd=$dbPass;"
$cnDB = New-Object System.Data.Odbc.OdbcConnection($szConnect)
$dsDB = New-Object System.Data.DataSet
$cnDB.Open()
$adDB = New-Object System.Data.Odbc.OdbcDataAdapter
$adDB.SelectCommand = New-Object System.Data.Odbc.OdbcCommand($commandDB, $cnDB)
$adDB.Fill($dsDB)
$cnDB.Close()
}
$ipaddress1 = "10.62.39.50"
$ipaddress2 = "10.62.39.55"
if (-not [string]::IsNullOrEmpty($ipaddress1) -and -not [string]::IsNullOrEmpty($ipaddress2))
{
Write-Host "Успех"
# проверка на валидность IP адресов
$ipObj = [System.Net.IPAddress]::None
if ([System.Net.IPAddress]::TryParse($ipaddress1, [ref]$ipObj) -and [System.Net.IPAddress]::TryParse($ipaddress2, [ref]$ipObj))
{
Write-Host "Проверка на валидность пройдена"
# если проверка на валидность пройдена, то дальше проверяем на совпадения 3-х октетов
$ipaddress1 = [System.Net.IPAddress]($ipaddress1) # 10.62.39.50
Write-Host $ipaddress1
$ipaddress2 = [System.Net.IPAddress]($ipaddress2) # 10.62.39.55
Write-Host $ipaddress2
$octets1 = $ipaddress1 -split '\.' # 10 62 39 50
Write-Host $octets1
$octets2 = $ipaddress2 -split '\.' # 10 62 39 55
Write-Host $octets2
$first3Octets1 = ($octets1 | Select-Object -First 3) -join '.' # 10.62.39
Write-Host $first3Octets1
$first3Octets2 = ($octets2 | Select-Object -First 3) -join '.' # 10.62.39
Write-Host $first3Octets2
if ($first3Octets1 -eq $first3Octets2)
{
if ([int]$octets1[3] -lt [int]$octets2[3]) # 50 < 55
{
# получаем диапазон ip-адресов
$ipadr1 = $ipaddress1.GetAddressBytes()
[Array]::Reverse($ipadr1)
$ipadr1 = ([System.Net.IPAddress]($ipadr1 -join '.')).Address
Write-Host $ipadr1
$ipadr2 = $ipaddress2.GetAddressBytes()
[Array]::Reverse($ipadr2)
$ipadr2 = ([System.Net.IPAddress]($ipadr2 -join '.')).Address
Write-Host $ipadr2
for ($x = $ipadr1; $x -le $ipadr2; $x++)
{
$ip = ([System.Net.IPAddress]$x).GetAddressBytes()
[Array]::Reverse($ip)
$ip = $ip -join '.'
Write-Host $ip
$commandDB = "INSERT INTO public.ipaddress (ip) VALUES ('$ip'::inet) returning id;"
Connect-DB($commandDB)
}
}
}
else
{
$textboxError = "Первые три октета IP адресов не совпадают."
}
}
else
{
$textboxError = "Неверно введены IP адреса. В поле 'От' введите начальное значение IP адреса. В поле 'До' введите конечное значение IP адреса."
}
}
Думаю, что нужно править код в цикле, но не знаю как. Уже 2-ой день бьюсь