Попытка вернуть только IPv4-адрес от имени хоста - PullRequest
0 голосов
/ 10 декабря 2018

Итак, мой код выглядит следующим образом

Write-Host "TECH ID's `n Ador: 1`n Len: 2 `n Colleen: 3 `n Angel: 4 `n Simon: 5 `n Brian: 6`n Jennifer : 7 `n Tina 8 `n"
$tech_name = Read-Host -Prompt "Please enter Tech ID or IP"
Write-Host "Please Wait, Do not click or type anything."
& "M:\Forms\1 FS Remote\FS_remoteassistance.exe"
Sleep 3

$ping = New-Object System.Net.NetworkInformation.Ping
$wshell = New-Object -ComObject wscript.shell;
$wshell.AppActivate("C:\Windows\system32\cmd.exe")
Sleep 2
if ($tech_name -eq "brian" -or $tech_name -eq "6" ){
    $wshell.SendKeys($($ping.Send("xxxxx").Address).IPAddressToString)
    $wshell.SendKeys("~")
}
Elseif ($tech_name -eq "angel" -or $tech_name -eq "4"){
    $wshell.SendKeys($($ping.Send("xxxxx").Address).IPAddressToString)
    $wshell.SendKeys("~")
    }
Elseif ($tech_name -eq "len" -or $tech_name -eq "2"){
    $wshell.SendKeys($($ping.Send("xxxxx").Address).IPAddressToString)
    $wshell.SendKeys("~")
    }
Elseif ($tech_name -eq "colleen" -or $tech_name -eq "3"){
    $wshell.SendKeys($($ping.Send("xxxxx").Address).IPAddressToString)
    $wshell.SendKeys("~")
    }
Elseif ($tech_name -eq "ador" -or $tech_name -eq "1"){
    $wshell.SendKeys($($ping.Send("xxxxx").Address).IPAddressToString)
    $wshell.SendKeys("~")
    }
Elseif ($tech_name -eq "simon" -or $tech_name -eq "5"){
    $wshell.SendKeys([System.Net.Dns]::GetHostAddresses("")[0])
    $wshell.SendKeys("~")
    }
Elseif ($tech_name -eq "7"){
    $wshell.SendKeys($($ping.Send("xxxxx").Address).IPAddressToString)
    $wshell.SendKeys("~")
    }
Elseif ($tech_name -eq "8"){
    $wshell.SendKeys($($ping.Send("xxxxxx").Address).IPAddressToString)
    $wshell.SendKeys("~")
    }
Else{
    $wshell.SendKeys($tech_name)
    $wshell.SendKeys("~")
    }

Итак, цель этого сценария - взять имя хоста и вернуть адрес ipv4, чтобы клиенты могли запускать программу и подключаться к техническим специалистам, не зная своего IP-адреса.,Проблема в том, что мне нужно только отправить адрес ipv4, но на некоторых компьютерах он отправляет ipv6, а на других - ipv4.Есть мысли?

1 Ответ

0 голосов
/ 10 декабря 2018

Я не знаю, почему вы используете два разных вызова для получения IP-адресов, но это вернет IPv4 для указанной системы ...

[System.Net.Dns]::GetHostAddresses($env:COMPUTERNAME).
    Where({$_.AddressFamily -eq 'InterNetwork'}).
    IPAddressToString

заменит $env:COMPUTERNAME вашей цельюИмя системы и это Отта даст вам то, что вам нужно.[ ухмылка ]

для вышеприведенного требуется ps4 + для использования метода массива .Where().вот тот, который использует конвейер и метод Where-Object.Это должно работать на PS2, но я не могу проверить это.

([System.Net.Dns]::GetHostAddresses($env:COMPUTERNAME) |
    Where-Object {$_.AddressFamily -eq 'InterNetwork'}).
    IPAddressToString
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...