Как установить постоянный статический IP-адрес в Windows 10 с помощью PowerShell для автоматизированного процесса сборки ОС?

Когда я начал изучать, как это сделать, просматривая видео, я узнал об интерфейсных индексах 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"
    }
}

Сейчас я обдумываю идею о том, что я мог бы просто заставить пользователя искать доступные NICS, находить IFIndex и вручную устанавливать его через взаимодействие с пользователем в Powershell. Я думаю, поскольку это немного сложнее, чем простая команда set ip. Я на что-то здесь?

RyBoneCoder 16.12.2022 18:17
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете увидеть всю доступную информацию об объектах 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.*')
}

Однако вы можете столкнуться с самыми разными вещами, поэтому все зависит от того, насколько контролируется ваша среда:

  • Wi-Fi и/или Ethernet подключены
  • Второй Ethernet или док-станция для ноутбука создает новые сетевые интерфейсы
  • Программное обеспечение VPN создает новый интерфейс Ethernet

Если вам нужно попросить пользователя ввести данные, вы можете сделать это с помощью 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-адреса для пользовательских машин.

Другие вопросы по теме