Задать вопрос
  • С помощью C# как получить список компьютеров из Active Directory по диапазону IP адресов?

    @atm87 Автор вопроса
    Спасибо большое за советы и помощь.
    Я уже близок к цели. Можешь подсказать только. Вот код, который я запускаю на своем ПК. Но выводятся два IP адреса 192.168.56.1 и 10.62.39.17
    Мне нужен только второй IP адрес. Так как первый IP адрес - это виртуальная сеть VirtualBox, который мне не нужен.
    string HostName = Dns.GetHostName();
                        Console.WriteLine("Host Name of machine =" + HostName); //WS06203955700001
                        IPAddress[] ipaddress = Dns.GetHostAddresses(HostName);
                        Console.Write("IPv4 of Machine is "); //192.168.56.1
                        foreach (IPAddress ip4 in ipaddress.Where(ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork))
                        {
                            Console.WriteLine(ip4.ToString()); //10.62.39.17
                        }
    Написано
  • С помощью C# как получить список компьютеров из Active Directory по диапазону IP адресов?

    @atm87 Автор вопроса
    Не подскажешь как?
    по имени компа запрашивать IP-адрес (DNS Lookup) и сравнивать с требуемым диапазоном.
    Написано
  • Почему не появляется скрытый comboBox?

    @atm87 Автор вопроса
    сергей кузьмин, Работает! Спасибо.
    Написано
  • Почему не появляется скрытый comboBox?

    @atm87 Автор вопроса
    А всё же, как лучше?)
    Написано
  • Почему не появляется скрытый comboBox?

    @atm87 Автор вопроса
    Свойство Enabled пробовал. Тоже самое...
    Написано
  • Как в зависимости от параметра в функции отработать кусок кода?

    @atm87 Автор вопроса
    Подумал вот так, но появляется ошибка "Invoke-DB : Не удается проверить аргумент для параметра "sqlInsert". Аргумент "INSERT INTO computers (ip, computername, os, OSArchitecture, username, domain) VALUES ('10.62.39.55', 'WS062245, 'Microsoft Windows 7 Профессиональная ', '32-bit', '062RRU\062SG', '062.R.RU');" не принадлежит набору "Insert;Update;Delete", заданному атрибутом ValidateSet. Укажите аргумент, который принадлежит данному набору, после чего повторите выполнение команды.":

    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
    	}
    }
    Написано
  • Как занести в таблицу БД наименование компьютера, наименование ОС сопоставимому IP-адресу компьютера?

    @atm87 Автор вопроса
    Спасибо большое, но как мне это занести в цикл, в строку INSERT ? Чтобы вставить в БД.

    Или создавать несколько переменных? Но это думаю не правильно.
    $computerName = Resolve-DnsName $ip
    $os = Get-WmiObject -Computer $ip -Class Win32_OperatingSystem
    $sql = "INSERT INTO computers (ip, computerName, os) VALUES ('$ip', '$computerName', '$os');"
    Написано
  • Как узнать пользователя за каким компьютером работает из active directory?

    @atm87 Автор вопроса
    Эта команда вернет имя учетной записи текущего пользователя. Но как мне узнать не свою уч. запись, а других пользователей? Как мне послать эту команду на их ПК?

    [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
    Написано
  • Как добавить создание таблицы в базу данных sql server?

    @atm87 Автор вопроса
    Думаю вот так:
    $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();
    Написано
  • Как в powershell записать диапазон ip-адресов в базу данных postgresql?

    @atm87 Автор вопроса
    Сделал!!!
    Объявил переменную $conn глобальной.

    $global:conn = New-Object Data.SqlClient.SqlConnection;
    $global:conn.ConnectionString = "Data Source=$Server; Initial Catalog=$DatabaseName; Integrated Security=True;"
    $global:conn.Open();
    Написано
  • Как в powershell записать диапазон ip-адресов в базу данных postgresql?

    @atm87 Автор вопроса
    Я думаю, что нужно переменную $conn из первой функции, передать во вторую функцию, чтобы было соединение с БД.
    Написано
  • Как в powershell записать диапазон ip-адресов в базу данных postgresql?

    @atm87 Автор вопроса
    Вот такой код сейчас у меня в файле SubnetForm.ps1:
    # получаем диапазон 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
        }

    Во втором файле Globals.ps1 вот такой код:
    # функция подключения к базе данных
    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
    Написано
  • Как в powershell записать диапазон ip-адресов в базу данных postgresql?

    @atm87 Автор вопроса
    Про Fill я так и не понял...
    На этом так и стою без каких-либо продвижений.
    Написано
  • Как в powershell записать диапазон ip-адресов в базу данных postgresql?

    @atm87 Автор вопроса
    Спасибо большое.
    Изменил код:
    $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
    Написано
  • Как в powershell записать диапазон ip-адресов в базу данных postgresql?

    @atm87 Автор вопроса
    Суть в том, что мне нужно добавить диапазон ip адресов в таблицу базу данных.
    Написано
  • Как в powershell записать диапазон ip-адресов в базу данных postgresql?

    @atm87 Автор вопроса
    Вот полный код:

    $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 = "Поля не заполнены."
    	}
    }
    Написано
  • Как занести диапазон ip адресов в таблицу базу данных Postgresql?

    @atm87 Автор вопроса
    Смысл в том, что мне в базу данных нужно просто добавить диапазон ip адресов.
  • Как занести диапазон ip адресов в таблицу базу данных Postgresql?

    @atm87 Автор вопроса
    Спасибо тебе огромное. Добавил в функцию параметр [string]$connection
    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
    				}

    Теперь появляется другая ошибка......
    65707291906fd213495645.jpeg
  • Как занести диапазон ip адресов в таблицу базу данных Postgresql?

    @atm87 Автор вопроса
    MaxKozlov,
    Я добавил функцию Insert-DB
    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-адреса второго поля. Четвертый октет после последней точки должен быть больше четвертого октета в первом поле."
    				}


    Появляется ошибка:
    65705edd3ef22203119263.jpeg

    Если стереть параметр -Connection, то программа предлагает следующие параметры:
    65705f3abfdd7313783766.jpeg