Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 27.12.2017
Сообщений: 25

Поиск команды для вытягивания ipv4

10.01.2018, 08:53. Показов 2364. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, мне снова нужна помощь знатоков )
Пытался вытащить ipv4 через PS как переменную для дальнейших манипуляций, но вот незадача, какие команды не пробую, ip компьютера вылетает вместе с ipv6, как пример пробовал такой найденный скрипт:

PowerShell
1
2
3
4
5
6
7
8
9
Get-WmiObject Win32_NetworkAdapter -Filter 'NetConnectionStatus=2' |
    ForEach-Object {
      $result = 1 | Select-Object Name, IP, MAC
      $result.Name = $_.Name
      $result.MAC = $_.MacAddress
      $config = $_.GetRelated('Win32_NetworkAdapterConfiguration') 
      $result.IP = $config | Select-Object -expand IPAddress
      $result
    }
Но получаю что-то вроде:

Name IP MAC
---- -- ---
Realtek PCIe GBE Family Controller {192.168.0.162, fe80::f090:bf3:57d0:8672} F0:79:59:8D:89:5B

В чем и вопрос, как вытащить из компьютера ТОЛЬКО ipv4 192.168.0.162?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.01.2018, 08:53
Ответы с готовыми решениями:

Получить IPv4-адрес и использовать его в качестве аргумента для команды NETSH
Приветствую! Начну издалека. Недавно захотел настроить себе подключение по IPv6 через tunnelbroker, но вот незадача - мой интернет...

Функция для вытягивания данных из закрытых книг
Всем привет! Появилась потребность написать пользовательскую функцию в VBA для вытягивания данных из определенных ячеек. ...

Регулярка для вытягивания адреса изображения со страницы сайта.
здравствуйте. что-то не получается написать регулярку для вытягивания адреса изображения со страницы сайта. адрес изображения на...

19
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
10.01.2018, 10:17
Лучший ответ Сообщение было отмечено AsterCody как решение

Решение

Цитата Сообщение от AsterCody Посмотреть сообщение
В чем и вопрос, как вытащить из компьютера ТОЛЬКО ipv4
Если позволяет версия PS:

PowerShell
1
(Get-NetIPAddress -AddressFamily IPv4).IPAddress
Добавлено через 21 минуту
Цитата Сообщение от AsterCody Посмотреть сообщение
какие команды не пробую, ip компьютера вылетает вместе с ipv6, как пример пробовал такой найденный скрипт
В случае Get-WmiObject нужно просто отфильтровывать не IPv4, например:

PowerShell
1
gwmi Win32_NetworkAdapterConfiguration -filter 'IPEnabled="True"' | Select -expand IPAddress | ?{$_ -Match '(\d\.)'}
Или, если добавить фильтр к вашему примеру:

Кликните здесь для просмотра всего текста
PowerShell
1
2
3
4
5
6
7
8
9
Get-WmiObject Win32_NetworkAdapter -Filter 'NetConnectionStatus=2' |
    ForEach-Object {
      $result = 1 | Select-Object Name, IP, MAC
      $result.Name = $_.Name
      $result.MAC = $_.MacAddress
      $config = $_.GetRelated('Win32_NetworkAdapterConfiguration') 
      $result.IP = $config | Select-Object -expand IPAddress | ?{$_ -Match '(\d\.)'}
      $result
    }
1
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
10.01.2018, 10:22
Есть кстати NET-вариант

PowerShell
1
$localIP=([system.net.dns]::GetHostByName([system.net.dns]::GetHostName()).AddressList[0]).IPAddressToString
1
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
10.01.2018, 10:32
Цитата Сообщение от v_svitere Посмотреть сообщение
Есть кстати NET-вариант
А почему именно AddressList[0]? Ведь адресов может быть несколько:

PowerShell
1
2
3
([system.net.dns]::GetHostByName([system.net.dns]::GetHostName()).AddressList[0]).IPAddressToString
''
([system.net.dns]::GetHostByName([system.net.dns]::GetHostName()).AddressList).IPAddressToString
Code
1
2
3
4
169.254.201.79
 
169.254.201.79
10.10.10.2
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
10.01.2018, 10:36
KDE777,
А почему именно AddressList[0]? Ведь адресов может быть несколько:
Это в качестве примера.

Добавлено через 2 минуты
Можно написать, что-то типа функции с проверкой длины AddressList
0
Любознательный
 Аватар для YuS_2
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
10.01.2018, 10:41
del
уже есть...
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
10.01.2018, 10:52
Цитата Сообщение от v_svitere Посмотреть сообщение
Можно написать, что-то типа функции с проверкой длины AddressList
Не понял зачем?

Просто AddressList[0] - в моём случае возвращает IP доп. адаптера, у которого к тому же APIPA

[system.net.dns]::GetHostByName([system.net.dns]::GetHostName()) - интересный способ, но понять у какого адаптера сколько и каких IP невозможно...
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
10.01.2018, 10:59
KDE777,
Да, на этот способ действительно накладываются вышеописанные вами ограничения.

В принципе если известно, что сетевой адаптер один, то его можно использовать, также мне думается, что этот подход можно довести до ума и с отличным от одного количества адаптеров.

Не понял зачем?
Здесь все зависит, от того что в итоге хотим получить
что-то типа функции
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
10.01.2018, 11:08
Цитата Сообщение от v_svitere Посмотреть сообщение
В принципе если известно, что сетевой адаптер один, то его можно использовать
У одного адаптера может быть десяток IP
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
10.01.2018, 11:27
KDE777,
У одного адаптера может быть десяток IP
Это верно, в этом случае мы и получим все 10 IP-адресов с одного адаптера

Я не брал в расчет, предложенные вами подводные камни этой задачи)
Также вполне возможно, их нет и у ТС, то есть берем в расчет простую орг-ю сети 1 сет. адаптер - 1 адрес IPv4

Если условия отличаются - WMI, you welcome!
Ну или углубляться в NET.
0
0 / 0 / 0
Регистрация: 27.12.2017
Сообщений: 25
10.01.2018, 11:57  [ТС]
Теперь такой вопрос, у меня есть компьютеры с 9 разными ip адресами и конфиг на каждом из них в котором прописан сервер к которому они обращаются, серверов тоже 9, каждому айпишнику нужен свой сервер, как можно это сделать?
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
10.01.2018, 12:01
Цитата Сообщение от AsterCody Посмотреть сообщение
Теперь такой вопрос, у меня есть компьютеры с 9 разными ip адресами и конфиг на каждом из них в котором прописан сервер к которому они обращаются, серверов тоже 9, каждому айпишнику нужен свой сервер, как можно это сделать?
Для начала - у вас работает такой вариант?

PowerShell
1
Get-NetIPAddress -AddressFamily IPv4
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
10.01.2018, 12:30
KDE777, Можно кстати использовать комбинационный вариант, который полезет в WMI, только если полученный через system.net.dns объект содержит несколько адресов.
Ну это так, примерно выглядит

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function GET-IPadress 
{
    $localIP=([system.net.dns]::GetHostByName([system.net.dns]::GetHostName()).AddressList).IPAddressToString
    if($localIP.count -gt 1)
    {   
        [array]$arr=$null
        $adapters=(gwmi Win32_NetworkAdapterConfiguration -filter 'IPEnabled="True"')
        foreach ($adapter in $adapters)
        {
            $IP=$adapter.IPAddress|?{$_ -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'}
            $NewPS = New-Object PSObject 
            $NewPS | Add-Member -Type NoteProperty -Name "Description" -Value $adapter.description
            $NewPS | Add-Member -Type NoteProperty -Name "IPv4" -Value $IP
            $arr+=$newPS 
        }
    return $arr
        
    }
    else
    {
        return $localIP
    }
}
Добавлено через 12 минут
AsterCody,
Теперь такой вопрос, у меня есть компьютеры с 9 разными ip адресами и конфиг на каждом из них в котором прописан сервер к которому они обращаются, серверов тоже 9, каждому айпишнику нужен свой сервер, как можно это сделать?
На основе оператора switch
PowerShell
1
2
3
4
Switch (value) {
condition 1 {action}
condition 2 {action}
condition n {action}}
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
10.01.2018, 12:41
Цитата Сообщение от v_svitere Посмотреть сообщение
Можно кстати использовать комбинационный вариант, который полезет в WMI, только если полученный через system.net.dns объект содержит несколько адресов
Если всё равно используем Get-WmiObject, тогда вообще зачем [system.net.dns]? Связка Wmi классов из Win32_NetworkAdapter и Win32_NetworkAdapterConfiguration (показанная в начальном примере) и так отлично справляется с этой задачей.

'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' - во первых, всё равно не проверяет корректность IPv4 адреса, а во вторых, мы уже анализируем поле IPAddress из настроек адапретра, т.е. это не произвольный текст и значит, чтобы отсечь IPv6 достаточно чего-то более простого, например -match '(\d\.)' или даже -notMatch ':'
1
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
10.01.2018, 12:45
KDE777,
Если всё равно используем Get-WmiObject, тогда вообще зачем [system.net.dns]?
Так вызов WMI будет выполнен только в витке IF, имхо, если есть возможность НЕ использовать WMI, то лучше это сделать.

'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
-notMatch ':'
Согласен.
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
10.01.2018, 13:13
Лучший ответ Сообщение было отмечено AsterCody как решение

Решение

Цитата Сообщение от KDE777 Посмотреть сообщение
Теперь такой вопрос, у меня есть компьютеры с 9 разными ip адресами и конфиг на каждом из них в котором прописан сервер к которому они обращаются, серверов тоже 9, каждому айпишнику нужен свой сервер, как можно это сделать?
Например, создаёте файл ip_list.txt, где первая колонка IP нужных вам клиентов, а вторая IP нужных им серверов:

Кликните здесь для просмотра всего текста

10.10.10.11 = 10.10.20.11
10.10.10.12 = 10.10.20.12
10.10.10.13 = 10.10.20.13
10.10.10.14 = 10.10.20.14
10.10.10.15 = 10.10.20.15
10.10.10.16 = 10.10.20.16
10.10.10.17 = 10.10.20.17
10.10.10.18 = 10.10.20.18
10.10.10.19 = 10.10.20.19


Тогда, если вам доступен Get-NetIPAddress скрипт будет выглядеть так:

PowerShell
1
2
$ip_list = gc C:\Temp\ip_list.txt -raw | ConvertFrom-StringData
foreach ($IPAddress in (Get-NetIPAddress -AddressFamily IPv4).IPAddress) { if ($IP = $ip_list[$IPAddress]){ac C:\Temp\config.cfg "Server = $IP"} }
1
0 / 0 / 0
Регистрация: 27.12.2017
Сообщений: 25
10.01.2018, 13:42  [ТС]
Так, склеил всё, но столкнулся с проблемой, если я указываю ПОЛНЫЙ ip компьютера, замена строки в файле происходит, если пытаюсь указать ip через звездочку, то ничего не происходит.

Пример неправильной команды:

PowerShell
1
2
3
4
$ip = gwmi Win32_NetworkAdapterConfiguration -filter 'IPEnabled="True"' | Select -expand IPAddress | ?{$_ -Match '(\d\.)'}
$conf = 'C:\work\zabbix\conf\zabbix_agentd.win.conf'
Switch ($ip) {
"192.168.0*" {(Get-Content $conf) -replace "Server=","Server=192.168.1.184" | Set-Content $conf}
Пример правильно работающей команды:

PowerShell
1
2
3
4
$ip = gwmi Win32_NetworkAdapterConfiguration -filter 'IPEnabled="True"' | Select -expand IPAddress | ?{$_ -Match '(\d\.)'}
$conf = 'C:\work\zabbix\conf\zabbix_agentd.win.conf'
Switch ($ip) {
"192.168.0.167" {(Get-Content $conf) -replace "Server=","Server=192.168.1.184" | Set-Content $conf}
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
10.01.2018, 13:50
Лучший ответ Сообщение было отмечено AsterCody как решение

Решение

Цитата Сообщение от AsterCody Посмотреть сообщение
если пытаюсь указать ip через звездочку, то ничего не происходит.
Потому, что для этого нужно добавить к Switch ключ -Wildcard

PowerShell
1
Switch -Wildcard ($ip)
1
 Аватар для volodin661
6795 / 2292 / 348
Регистрация: 10.12.2013
Сообщений: 7,918
10.01.2018, 16:30
Цитата Сообщение от KDE777 Посмотреть сообщение
Если позволяет версия PS
Если версия pwsh не позволяет,
значит НАДО обновить до последней версии, переборов пользовательскую стыдливость и застенчивость.
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
10.01.2018, 18:14
Цитата Сообщение от volodin661 Посмотреть сообщение
Если версия pwsh не позволяет, значит НАДО обновить до последней версии
К сожалению, для Get-NetIPAddress (и прочих Net TCP/IP Cmdlets) одним обновлением PS не обойтись, т.к. нужна ещё и ОС от Win8 и выше
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.01.2018, 18:14
Помогаю со студенческими работами здесь

Напишите программу, которая считывает IPv4 адрес и проверяет ее валидность. Форма записи IPv4 адреса – x.x.x.x
Напишите код для программы Пример: Напишите программу, которая считывает IPv4 адрес и проверяет ее валидность. Форма записи IPv4 адреса...

Поиск команды для разработки игры
Всем доброго времени суток! Некоторое время назад загорелся идеей создать игру. Программированием занимаюсь два года, в основном работаю на...

Поиск установленной программы WinRAR и её запуск с выполнением определённой команды для распаковки архива
Здравствуйте, подскажите пожалуйста как распаковать zip или rar файл c сохранением структуры каталогов в папку где лежит архив? ...

Регулярное выражение для IPv4 и IPv6
Может кто-нибудь помочь с регулярным выражением который может распознавать IPv4 и IPv6

Консольное приложение для смены настроек сети (ipv4)
Всем привет. Помогите в разработке консольного приложения для смены настроек сети (ip адреса, маски, шлюза и днс) необходимо: 1. Что бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru