@kotjj

Как в powershell вывести ip адрес интерфейсов и вставить его в файл?

Здравствуйте, помогите пожалуйста составить скрипт, который будет парсить ip адреса сетевых интерфейсов windows и выводить их в конфигурационный файл, первую часть скрипта нашёл примерно такую:
(gwmi Win32_NetworkAdapterConfiguration | ? { $_.IPAddress -ne $null }).ipaddress | Out-File файл.txt

В выведенном файле имею 4 строчки с ip адресами всех адаптеров (индекс интерфейсов 1,2,3,4)
А нужно чтобы файл имел следующий вид:
auth none
log
socks -n -a -i127.0.0.1 -e10.0.0.* -p8001
socks -n -a -i127.0.0.1 -e10.0.0.* -p8002
socks -n -a -i127.0.0.1 -e10.0.0.* -p8003
socks -n -a -i127.0.0.1 -e10.0.0.* -p8004

Где жирный шрифт мне необходимо вставить выведенные ip адреса из скрипта. Как я понял из составления скриптов, необходимо записать каждый ip в переменную и вставить в нужное место выводимого файла, но как это сделать никак не пойму, помогите разобраться
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
@BeatHazard
Приветствую, накидал такой скриптик, вроде делает то что надо но не совсем понял с индексами интерфейсов, вам надо чтобы было -p800* где * - индекс интерфейса с IP? если так то могу позже подправить скрипт, или можете сделать это самостоятельно и скрипт ведь должен дергать только активные интерфейсы с IP адресом? Я делал так, если надо по другому пишите, поправлю. И IP адрес я брал только IPv4 если надо IPv6 так же пишите.

$Names = Get-NetAdapter | Where-Object {$_.status -eq "Up"}
$AllIP = Foreach ($Name in $Names)
{(Get-NetIPAddress | where-object {$_.InterfaceAlias -eq $name.name}).IPv4Address}
$toFile = @("auth none","log")
$n = 1
$toFile += foreach ($IP in $AllIP)
{if ($IP -ne $null)
{"socks -n -a -i127.0.0.1 -e$ip -p800$n"
$n +=1}}
$toFile | Out-File "C:\test\test.txt"
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@AAT666
Не очень понятно насчет индексов интерфейсов - они всегда только такие ? 1,2,3, 4 ?! Может все-таки берутся из системы ?..
И насчет IP адресов интерфейсов - только 1 адрес на интерфейс ?..

Если так, то:

"auth none","log" | Out-File файл.txt
$a=1
gwmi Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true | %{Out-File файл.txt -InputObject "socks -n -a -i127.0.0.1 -e$($_.ipaddress) -p800$a" -Append;++$a}
Ответ написан
@MaxKozlov
Не очень понятно, в каком порядке должно идти. В соответствии с номерами интерфейсов или как придётся.
И что делать с IPV6 если есть.
Но в целом, как-то так.
# 1 вариант получения адресов, в конце отфильтровываем ipv6
$ip = (gwmi Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true).IPAddress -match '\d+\.\d+\.'
# 2 вариант получения адресов, отфильтровываем ipv6 и 127.0.0.1
$ip = (Get-NetIPAddress | ? {$_. AddressFamily -eq 'IPv4' -and $_.IPAddress -ne '127.0.0.1' }).IPAddress

# Формирование строки
$port = 8001
$lines = $ip | Foreach-Object {
   "socks -n -a -i127.0.0.1 -e$_ -p$port"
   $port++
}

# Вывод в файл
'auth none', 'log', $lines | Out-File -Encoding Ascii -FilePath 'd:\111'
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Mindbox Москва
от 80 000 до 120 000 ₽
deeplay Новосибирск
от 100 000 до 150 000 ₽
29 нояб. 2020, в 19:24
95000 руб./за проект
29 нояб. 2020, в 18:43
10000 руб./за проект
29 нояб. 2020, в 16:24
30000 руб./за проект