function Invoke-DB
{
[CmdletBinding(DefaultParameterSetName = 'Insert')]
param (
[Parameter(Mandatory, ParameterSetName = 'Select')]
[string]$sqlSelect = '',
[Parameter(Mandatory, ParameterSetName = 'Insert')]
[ValidateSet('Insert', 'Update', 'Delete')]
[string]$sqlInsert = ''
)
if ($PSBoundParameters['sqlInsert'])
{
$cmd = New-Object Data.SqlClient.SqlCommand $sqlInsert, $conn
$cmd.ExecuteNonQuery() | Out-Null
}
elseif ($PSBoundParameters['sqlSelect'])
{
$cmd = New-Object Data.SqlClient.SqlCommand $sqlSelect, $conn
$cmd.ExecuteReader() | Out-Null
}
}
$computerName = Resolve-DnsName $ip
$os = Get-WmiObject -Computer $ip -Class Win32_OperatingSystem
$sql = "INSERT INTO computers (ip, computerName, os) VALUES ('$ip', '$computerName', '$os');"
$Server = '.\SQLEXPRESS'
$InitialCatalog = 'master'
$DatabaseName = 'managementDB'
# Connect to SQL server
$conn = New-Object System.Data.Sqlclient.SqlConnection
$conn.ConnectionString = "Data Source=$Server; Initial Catalog=$InitialCatalog; Integrated Security=True;"
$conn.Open()
# Создание БД
$cmd = $conn.CreateCommand()
$cmd.CommandText = "IF NOT EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = '$DatabaseName') CREATE DATABASE [$DatabaseName] COLLATE Cyrillic_General_CI_AS;"
$cmd.ExecuteNonQuery() | Out-Null
# Создание БД
$cmd.CommandText = "USE $DatabaseName; IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'ipaddress' ) CREATE TABLE [dbo].[ipaddress]([ip][varchar](15) NULL UNIQUE) ON [PRIMARY];"
$cmd.ExecuteNonQuery() | Out-Null
$cmd.Dispose();
$conn.Close();
$conn.Dispose();
# получаем диапазон ip-адресов
$ipStart = $ipaddress1.GetAddressBytes()
$ipEnd = $ipaddress2.GetAddressBytes()
$Server = '.\SQLEXPRESS'
$DatabaseName = 'managementDB'
Connect-DB -Server $Server -DatabaseName $DatabaseName
#добавляем диапазон ip-адресов в базу данных
for ($x = $ipStart[3]; $x -le $ipEnd[3]; $x++)
{
$ip = $ipStart[0], $ipStart[1], $ipStart[2], $x -join '.'
$sql = "INSERT INTO ipaddress (ip) VALUES ('$ip'::inet);"
Invoke-DB -sql $sql
}
# функция подключения к базе данных
function Connect-DB
{
[CmdletBinding()]
param (
[Parameter(Mandatory)]
[string]$Server,
[string]$InitialCatalog = 'master',
[string]$DatabaseName
)
$ConnectionString = "Data Source=$Server; Initial Catalog=$DatabaseName; Integrated Security=True;"
$conn = New-Object Data.SqlClient.SqlConnection;
$conn.ConnectionString = $ConnectionString;
$conn.Open();
}
function Invoke-DB
{
[CmdletBinding()]
param (
[Parameter(Mandatory)]
[string]$sql
)
$cmd = New-Object Data.SqlClient.SqlCommand $sql, $conn;
$cmd.ExecuteNonQuery();
}
ERROR: Исключение при вызове "ExecuteNonQuery" с "0" аргументами: "ExecuteNonQuery: Свойство Connection не инициализировано."
ERROR: C:\Users\062User\Documents\SAPIEN\PowerShell Studio\Projects\SFR-Management\SFR-Management.Run.ps1:425 знак:3
ERROR: + $cmd.ExecuteNonQuery();
ERROR: + ~~~~~~~~~~~~~~~~~~~~~~
ERROR: + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
ERROR: + FullyQualifiedErrorId : InvalidOperationException
ERROR:
ERROR: Исключение при вызове "ExecuteNonQuery" с "0" аргументами: "ExecuteNonQuery: Свойство Connection не инициализировано."
ERROR: C:\Users\062User\Documents\SAPIEN\PowerShell Studio\Projects\SFR-Management\SFR-Management.Run.ps1:425 знак:3
ERROR: + $cmd.ExecuteNonQuery();
ERROR: + ~~~~~~~~~~~~~~~~~~~~~~
ERROR: + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
ERROR: + FullyQualifiedErrorId : InvalidOperationException
$buttonOK_Click = {
if (-not [string]::IsNullOrEmpty($ipaddress1) -and -not [string]::IsNullOrEmpty($ipaddress2))
{
# проверка на валидность IP-адресов
$ipObj = [System.Net.IPAddress]::None
if ([System.Net.IPAddress]::TryParse($ipaddress1.Text, [ref]$ipObj) -and [System.Net.IPAddress]::TryParse($ipaddress2.Text, [ref]$ipObj))
{
# если проверка на валидность пройдена, то дальше проверяем на совпадения 3-х октетов
$ipaddress1 = [System.Net.IPAddress]($ipaddress1.Text) # 10.62.39.1
$ipaddress2 = [System.Net.IPAddress]($ipaddress2.Text) # 10.62.39.3
$octets1 = $ipaddress1 -split '\.' # 10 62 39 1
$octets2 = $ipaddress2 -split '\.' # 10 62 39 3
$first3Octets1 = ($octets1 | Select-Object -First 3) -join '.' # 10.62.39
$first3Octets2 = ($octets2 | Select-Object -First 3) -join '.' # 10.62.39
if ($first3Octets1 -eq $first3Octets2)
{
if ([int]$octets1[3] -lt [int]$octets2[3]) # если первый октет меньше второго то едем дальше
{
# получаем диапазон ip-адресов
$ipStart = $ipaddress1.GetAddressBytes()
$ipEnd = $ipaddress2.GetAddressBytes()
Connect-DB
#добавляем диапазон ip-адресов в базу данных
for ($x = $ipStart[3]; $x -le $ipEnd[3]; $x++)
{
$ip = $ipStart[0], $ipStart[1], $ipStart[2], $x -join '.'
$commandDB = "INSERT INTO public.ip_addresses (ip_range) VALUES ('$ip'::inet);"
Write-Host $commandDB
Insert-DB -commandDB $commandDB
}
}
else
{
$textboxError.Text = "Неверно введено значение IP-адреса второго поля. Четвертый октет после последней точки должен быть больше четвертого октета в первом поле."
}
}
else
{
$textboxError.Text = "Первые три октета IP-адресов не совпадают."
}
}
else
{
$textboxError.Text = "Неверно введены IP-адреса. В поле 'От' введите начальное значение IP-адреса. В поле 'До' введите конечное значение IP-адреса."
}
}
else
{
$textboxError.Text = "Поля не заполнены."
}
}
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:429 знак: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:429 знак: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:429 знак:3
ERROR: + $adDB.Fill($dsDB) | out-null
ERROR: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ERROR: + CategoryInfo : NotSpecified: (:) [], MethodException
ERROR: + FullyQualifiedErrorId : MethodCountCouldNotFindBest
$buttonOK_Click = {
if (-not [string]::IsNullOrEmpty($ipaddress1) -and -not [string]::IsNullOrEmpty($ipaddress2))
{
# проверка на валидность IP-адресов
$ipObj = [System.Net.IPAddress]::None
if ([System.Net.IPAddress]::TryParse($ipaddress1.Text, [ref]$ipObj) -and [System.Net.IPAddress]::TryParse($ipaddress2.Text, [ref]$ipObj))
{
# если проверка на валидность пройдена, то дальше проверяем на совпадения 3-х октетов
$ipaddress1 = [System.Net.IPAddress]($ipaddress1.Text) # 10.62.39.1
$ipaddress2 = [System.Net.IPAddress]($ipaddress2.Text) # 10.62.39.3
$octets1 = $ipaddress1 -split '\.' # 10 62 39 1
$octets2 = $ipaddress2 -split '\.' # 10 62 39 3
$first3Octets1 = ($octets1 | Select-Object -First 3) -join '.' # 10.62.39
$first3Octets2 = ($octets2 | Select-Object -First 3) -join '.' # 10.62.39
if ($first3Octets1 -eq $first3Octets2)
{
if ([int]$octets1[3] -lt [int]$octets2[3]) # если первый октет меньше второго то едем дальше
{
# получаем диапазон ip-адресов
$ipStart = $ipaddress1.GetAddressBytes()
[Array]::Reverse($ipStart)
$ipStart = ([System.Net.IPAddress]($ipStart -join '.')).Address
$ipEnd = $ipaddress2.GetAddressBytes()
[Array]::Reverse($ipEnd)
$ipEnd = ([System.Net.IPAddress]($ipEnd -join '.')).Address
Connect-DB
#добавляем диапазон ip-адресов в базу данных
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
}
}
else
{
$textboxError.Text = "Неверно введено значение IP-адреса второго поля. Четвертый октет после последней точки должен быть больше четвертого октета в первом поле."
}
}
else
{
$textboxError.Text = "Первые три октета IP-адресов не совпадают."
}
}
else
{
$textboxError.Text = "Неверно введены IP-адреса. В поле 'От' введите начальное значение IP-адреса. В поле 'До' введите конечное значение IP-адреса."
}
}
else
{
$textboxError.Text = "Поля не заполнены."
}
}
function Insert-DB
{
[CmdletBinding()]
param
(
[Parameter(Mandatory)]
[string]$commandDB,
[string]$connection
)
$adDB = New-Object System.Data.Odbc.OdbcDataAdapter
$adDB.SelectCommand = New-Object System.Data.Odbc.OdbcCommand($commandDB, $connection)
$adDB.Fill($dsDB) | out-null
}
if ([int]$octets1[3] -lt [int]$octets2[3]) # 50 < 55
{
# получаем диапазон ip-адресов
$ipadr1 = $ipaddress1.GetAddressBytes()
[Array]::Reverse($ipadr1)
$ipadr1 = ([System.Net.IPAddress]($ipadr1 -join '.')).Address
$ipadr2 = $ipaddress2.GetAddressBytes()
[Array]::Reverse($ipadr2)
$ipadr2 = ([System.Net.IPAddress]($ipadr2 -join '.')).Address
for ($x = $ipadr1; $x -le $ipadr2; $x++)
{
$ip = ([System.Net.IPAddress]$x).GetAddressBytes()
[Array]::Reverse($ip)
$ip = $ip -join '.'
$commandDB = "INSERT INTO public.ipaddress (ip) VALUES ('$ip'::inet);"
}
$Connection = Connect-DB
Insert-DB -Connection $Connection -Command $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)
$cnDB.Open()
}
function Insert-DB
{
[CmdletBinding()]
param
(
[Parameter(Mandatory)]
[string]$commandDB
)
$adDB = New-Object System.Data.Odbc.OdbcDataAdapter
$adDB.SelectCommand = New-Object System.Data.Odbc.OdbcCommand($commandDB, $cnDB)
$adDB.Fill($dsDB) | out-null
$cnDB.Close()
$dsDB = New-Object System.Data.DataSet
}
if ([int]$octets1[3] -lt [int]$octets2[3]) # 50 < 55
{
# получаем диапазон ip-адресов
$ipadr1 = $ipaddress1.GetAddressBytes()
[Array]::Reverse($ipadr1)
$ipadr1 = ([System.Net.IPAddress]($ipadr1 -join '.')).Address
$ipadr2 = $ipaddress2.GetAddressBytes()
[Array]::Reverse($ipadr2)
$ipadr2 = ([System.Net.IPAddress]($ipadr2 -join '.')).Address
$connection = Connect-DB
for ($x = $ipadr1; $x -le $ipadr2; $x++)
{
$ip = ([System.Net.IPAddress]$x).GetAddressBytes()
[Array]::Reverse($ip)
$ip = $ip -join '.'
$commandDB = "INSERT INTO public.ipaddress (ip) VALUES ('$ip'::inet) returning id;"
}
Insert-DB -Connection $Connection -Command $CommandDB
}
else
{
$textboxError.Text = "Неверно введено значение IP-адреса второго поля. Четвертый октет после последней точки должен быть больше четвертого октета в первом поле."
}
Я уже близок к цели. Можешь подсказать только. Вот код, который я запускаю на своем ПК. Но выводятся два IP адреса 192.168.56.1 и 10.62.39.17
Мне нужен только второй IP адрес. Так как первый IP адрес - это виртуальная сеть VirtualBox, который мне не нужен.