Когда я начал изучать, как это сделать, просматривая видео, я узнал об интерфейсных индексах IP-адресов. Я узнал, что не могу установить IP-адрес, не зная сначала InterfaceIndex IP-адреса. Это казалось разным на каждом компьютере, на который я смотрел, и казалось случайным. Затем я узнал, что вы можете использовать псевдоним IP-адреса. При новой установке Windows казалось, что псевдоним IP-адреса Ethernet0 будет константой, на которую я мог положиться. Итак, с моими примитивными навыками PowerShell я подумал, что смогу дотянуться до IP-адреса ПК и проверить, соответствует ли он тому, что должен быть. Если это не так, сотрите все, что есть Ethernet0, и создайте новый IP-адрес с псевдонимом Ethernet0. Конечно, в первый раз, когда я сделал это, это сработало отлично, и я пошел дальше. У меня был статический IP-адрес под названием Ethernet0 с указанным IP-адресом. Я только что зашел и посмотрел, и у меня есть 2 доступных сетевых адаптера. Один называется «Ethernet», а другой — «Ethernet2». Ни один из них не имеет статического IP-адреса. Я предполагаю, что ПК хочет установить случайные псевдонимы после перезагрузки? Я немного смущен тем, что произошло. Конечно, когда я снова запускаю свой метод, я получаю сообщение об ошибке «Нет InterfaceAlias, равного ethernet0», поэтому мой код не работает. Я, очевидно, далеко от того, как я должен подходить к этому. Я хочу выполнить новую установку и запустить сценарий конфигурации, чтобы настроить все без какого-либо взаимодействия с графическим интерфейсом. Я не работаю в среде корпоративного домена и должен создать свой собственный процесс. Пожалуйста, помогите мне развить мою мудрость PowerShell, поскольку я всего лишь падаван.
function SetIp {
$ipv4 = (Test-Connection -ComputerName $env:COMPUTERNAME -Count 1) .IPV4Address.IpAddressToString
if ($ipv4 -eq "my.ip.add.res") {
Write-Host "Do Nothing as the IP has already been set"
}
else {
Remove-NetIPAddress -InterfaceAlias ethernet0
New-NetIPAddress -IPAddress my.ip.add.res -InterfaceAlias ethernet0 -PrefixLength 16
Write-Host "IP Address has been set"
}
}
Вы можете увидеть всю доступную информацию об объектах NetIPInterface
с помощью Get-NetIPInterface | Select * -First 1
. Некоторые полезные свойства: ConnectionState
, AddressFamily
или Dhcp
. Например, попробуйте что-то вроде этого, чтобы найти действительные:
Get-NetIPInterface | Where {
$_.ConnectionState -eq 'Connected' -and
$_.AddressFamily -eq 'IPV4' -and
$_.InterfaceAlias -like 'Eth*' -and
# check if in your local subnet
($_.DHCP -eq 'Enabled' -or ($_|Get-NetIPAddress).IPv4Address -like '1.2.3.*')
}
Однако вы можете столкнуться с самыми разными вещами, поэтому все зависит от того, насколько контролируется ваша среда:
Если вам нужно попросить пользователя ввести данные, вы можете сделать это с помощью gridview:
$Selected = Get-NetIPInterface |
? {$_.AddressFamily -eq 'IPV4' -and $_.InterfaceAlias -notlike 'Loopback*'} |
Select IFIndex,InterfaceAlias,ConnectionState |
# Ask the user to select the interface
Out-GridView -Title 'Please select the correct interface' -OutputMode Single
Set-NetIPInterface -InterfaceIndex $Selected.ifIndex -AddressFamily IPv4 ## etc...
Тем не менее, просто настроить DHCP для решения этой проблемы почти всегда будет проще. Резервирование DHCP, как правило, так же хорошо, как статические IP-адреса для пользовательских машин.
Сейчас я обдумываю идею о том, что я мог бы просто заставить пользователя искать доступные NICS, находить IFIndex и вручную устанавливать его через взаимодействие с пользователем в Powershell. Я думаю, поскольку это немного сложнее, чем простая команда set ip. Я на что-то здесь?