Установка статического 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
Другие вопросы по тегам