Установка статического IP на сетевых картах - Powershell
Я создаю сценарий, который будет выполнять множество основных задач при вводе в эксплуатацию нового сервера. Сейчас большинство серверов имеют несколько сетевых карт, и мне нужно спросить пользователя (используя скрипт), какой сетевой карте он хочет назначить IP.
На данный момент у меня есть:
$NICs = Get-WMIObject Win32_NetworkAdapterConfiguration -ComputerName $env:COMPUTERNAME | where{$_.IPEnabled -eq $true -and $_.DHCPEnabled -eq $true}
Который поместит сетевые карты в $NICs
Я верю. Однако отсюда я хочу распечатать их для пользователя, а затем каким-то образом назначить значение для каждого сетевого адаптера, например, индекс, чтобы пользователь мог ввести "1" или "2", поэтому сообщите сценарию, какой сетевой адаптер применить. Конфигурация Ip, к которой будет сделано подобное:
If($ipQuestion -eq "Y") {
$ipAddr = Read-Host "Enter IP Address: "
$subnet = Read-Host "Enter Subnet: "
$dns = Read-Host "Enter DNS: "
Write-Host "Multiple DNS servers?" -ForegroundColor Green
$multipleDNSServersQuestion = Read-Host
If($multipleDNSServersQuestion -eq 'Y'){
$dns2 = Read-Host "Enter Secondary DNS: "
}
$dGateway = Read-Host "Enter Default Gateway: "
}
$NIC.EnableStatic($ipAddr, $subnet)
$NIC.SetGateways($dGateway)
$NIC.SetDNSServerSearchOrder($dns, $dns2)
$NIC.SetDynamicDNSRegistration("TRUE")
Есть идеи?
3 ответа
Если вы убедитесь, что $NICS всегда является массивом, вы можете использовать индекс массива для указания каждого NIC. Чтобы убедиться, что это всегда массив, сделайте так:
$NICs = @(Get-WMIObject Win32_NetworkAdapterConfiguration -ComputerName $env:COMPUTERNAME | where{$_.IPEnabled -eq $true -and $_.DHCPEnabled -eq $true})
Затем распечатайте информацию так:
PS> $NICS = @(Get-WMIObject Win32_NetworkAdapterConfiguration)
PS> $NICS | Foreach {$i=-1}{$i++;$_} | ft @{n='index';e={$i}},Description,ServiceName
index Description ServiceName
----- ----------- -----------
0 WAN Miniport (L2TP) Rasl2tp
1 WAN Miniport (SSTP) RasSstp
2 WAN Miniport (IKEv2) RasAgileVpn
3 WAN Miniport (PPTP) PptpMiniport
4 WAN Miniport (PPPOE) RasPppoe
5 WAN Miniport (IP) NdisWan
6 WAN Miniport (IPv6) NdisWan
7 WAN Miniport (Network Monitor) NdisWan
8 Microsoft Kernel Debug Network Adapter kdnic
9 RAS Async Adapter AsyncMac
10 Broadcom NetXtreme Gigabit Ethernet b57nd60a
11 Microsoft ISATAP Adapter tunnel
12 Microsoft Teredo Tunneling Adapter tunnel
13 Microsoft 6to4 Adapter tunnel
14 Microsoft ISATAP Adapter tunnel
Затем получите доступ к каждому NIC следующим образом:
$NICS[$selectedIndex]
$NICs = @(Get-WMIObject Win32_NetworkAdapterConfiguration ...)
сделаю $NICs
массив, к которому можно получить доступ (с нуля) по индексу:
$NICs[0] # <-- first interface
$NICs[1] # <-- second interface
...
Так, как я бы это сделал. Если вы посмотрите на панель сетевых подключений в интернет-подключений. Вы можете увидеть строку, которую пользователь знает для своих устройств:
Таким образом, в диалоге с пользователем я бы дал это имя, получая его с win32_NetworkAdapter
joinning Win32_NetworkAdapterConfiguration
с Index
,
$NICs = Get-WMIObject Win32_NetworkAdapterConfiguration -ComputerName $env:COMPUTERNAME | where{$_.IPEnabled -eq $true -and $_.DHCPEnabled -eq $true}
$NICs | % {$i = (Get-WmiObject win32_NetworkAdapter -Filter "index=$($_.index)").NetConnectionID; $_} | ft @
{n='index';e={$i}},Description,ServiceName
index Description ServiceName
----- ----------- -----------
NET1 Intel(R) 82567LM Gigabit Network Conne... e1yexpress