简体   繁体   中英

Setting Static IP on NICs - Powershell

I am creating a script which will run through a lot of the basic tasks when commissioning a new server. Now most servers have multiple NICs these days and I need to question the user (using the script) what NIC they want to assign the IP to.

At the moment I have:

$NICs = Get-WMIObject Win32_NetworkAdapterConfiguration -ComputerName $env:COMPUTERNAME | where{$_.IPEnabled -eq $true -and $_.DHCPEnabled -eq $true} 

Which will put the NICs into $NICs I believe. However from here I want to print them out to the user, and then somehow assign a value to each NIC, like an index, so the user can type in, "1" or "2" so tell the script what NIC to apply the Ip configuration to which will be done like:

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") 

Any ideas?

If you ensure $NICS is always an array, you can use the array index to specify each NIC. To ensure it is always an array do this:

$NICs = @(Get-WMIObject Win32_NetworkAdapterConfiguration -ComputerName $env:COMPUTERNAME | where{$_.IPEnabled -eq $true -and $_.DHCPEnabled -eq $true})

Then print out the info like so:

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

Then access each NIC like so:

$NICS[$selectedIndex]
$NICs = @(Get-WMIObject Win32_NetworkAdapterConfiguration ...)

will make $NICs an array, which can be accessed by (zero-based) index:

$NICs[0]  # <-- first interface
$NICs[1]  # <-- second interface 
...

The way I would do it. If you have a look to the network connexions panel in the internet connexions. You can see the string the user know for his devices :

在此处输入图片说明

So in a dialog with the user I would give this name retreiving it with win32_NetworkAdapter joinning Win32_NetworkAdapterConfiguration with 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM