Как в powershell записать диапазон ip-адресов в базу данных postgresql?

Есть файл SubnetForm.ps1 в котором следующий код:

$ipStart = "10.62.39.1"
$ipEnd = "10.62.39.3"

Connect-DB

for ($x = $ipStart; $x -le $ipEnd; $x++)
    {
        $ip = ([System.Net.IPAddress]$x).GetAddressBytes()
        [Array]::Reverse($ip)
        $ip = $ip -join '.'
        $commandDB = "INSERT INTO public.ip_addresses (ip_range) VALUES ('$ip'::inet);"
        Write-Host $commandDB
        Insert-DB -commandDB $commandDB
    }

Есть второй файл в котором имеется функция соединения с БД и записи в БД:

# функция соединения с БД
function Connect-DB
{
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory)]
        [string]$dbServer = 'localhost',
        [string]$dbName = 'postgres',
        [string]$dbUser = 'postgres',
        [string]$dbPass = 'postgres',
        [string]$port = '5432'
    )
    
    $connect = "Driver={PostgreSQL UNICODE(x64)};Server=$dbServer;Port=$port;Database=$dbName;Uid=$dbUser;Pwd=$dbPass;"
    $cnDB = New-Object System.Data.Odbc.OdbcConnection($connect)
    $dsDB = New-Object System.Data.DataSet
    $cnDB.Open()
}

function Insert-DB
{
    [CmdletBinding()]
    param (
        $commandDB
    )
    $adDB = New-Object System.Data.Odbc.OdbcDataAdapter
    $adDB.SelectCommand = New-Object System.Data.Odbc.OdbcCommand($commandDB, $cnDB)
    $adDB.Fill($dsDB) | out-null
}

При запуске кода появляются ошибки:

INSERT INTO public.ip_addresses (ip_range) VALUES ('10.62.39.1'::inet);
ERROR: Обнаружено несколько неоднозначных перегрузок для "Fill", число аргументов: "1".
ERROR: C:\Users\062User\Documents\SAPIEN\PowerShell Studio\Projects\SFR-Management\SFR-Management.Run.ps1:430 знак:3
ERROR: +         $adDB.Fill($dsDB) | out-null
ERROR: +         ____________________________
ERROR:     + CategoryInfo          : NotSpecified: (:) [], MethodException
ERROR:     + FullyQualifiedErrorId : MethodCountCouldNotFindBest
ERROR:
INSERT INTO public.ip_addresses (ip_range) VALUES ('10.62.39.2'::inet);
ERROR: Обнаружено несколько неоднозначных перегрузок для "Fill", число аргументов: "1".
ERROR: C:\Users\062User\Documents\SAPIEN\PowerShell Studio\Projects\SFR-Management\SFR-Management.Run.ps1:430 знак:3
ERROR: +         $adDB.Fill($dsDB) | out-null
ERROR: +         ____________________________
ERROR:     + CategoryInfo          : NotSpecified: (:) [], MethodException
ERROR:     + FullyQualifiedErrorId : MethodCountCouldNotFindBest
ERROR:
INSERT INTO public.ip_addresses (ip_range) VALUES ('10.62.39.3'::inet);
ERROR: Обнаружено несколько неоднозначных перегрузок для "Fill", число аргументов: "1".
ERROR: C:\Users\062User\Documents\SAPIEN\PowerShell Studio\Projects\SFR-Management\SFR-Management.Run.ps1:430 знак:3
ERROR: +         $adDB.Fill($dsDB) | out-null
ERROR: +         ____________________________
ERROR:     + CategoryInfo          : NotSpecified: (:) [], MethodException
ERROR:     + FullyQualifiedErrorId : MethodCountCouldNotFindBest

Ответы (1 шт):

Автор решения: Dyakov Alexander

Честно говоря, не понимаю, как в данном случае должен работать $x++, так как оно работает только с числами, а $ipstart в данном случае строка

[System.Net.IPAddress]$ipStart = "10.62.39.1"
[System.Net.IPAddress]$ipEnd = "10.62.39.3"
for ($x = $ipStart.Address; $x -le $ipEnd.Address; $x = $x+(1 -shl 24)){
    $ip = ([System.Net.IPAddress]$x).GetAddressBytes()
    [Array]::Reverse($ip)
    $ip = $ip -join '.'
#ну и далее, что там нужно сделать с этим ip
}

Ещё возможно переменную $dsDB стоит определять во второй функции, раз она там используется а в первой не используется, также не уверен, что $cnDB из первой функции будет доступна во второй подробнее можно почитать в документации microsoft об областях действия переменных

→ Ссылка