2013-07-19 53 views
0

我正在创建一个脚本,它将在调试新服务器时运行许多基本任务。现在大多数服务器现在都有多个NIC,我需要向用户提问(使用脚本)他们想要为其分配IP的NIC。在网卡上设置静态IP - Powershell

目前我有:

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

这将给网卡为$NICs我相信。然而,从这里我想打印出来给用户,然后以某种方式为每个NIC分配一个值,比如索引,这样用户可以键入“1”或“2”,以便告诉脚本要应用哪个NIC

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

任何想法:IP配置到会喜欢做些什么呢?

回答

0
$NICs = @(Get-WMIObject Win32_NetworkAdapterConfiguration ...) 

会让$NICs一个数组,可以通过(从零开始)索引访问:

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

如果你确保$ NICS始终是一个数组,你可以使用数组索引指定每个网卡。为了确保它始终是一个数组做这样的:

$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] 
+0

FormatTable输出似乎并不工作 – PnP

+0

是的,看起来我没有完成这一点。 :-)尝试更新的版本。 –

+0

不知道这是否工作:) – PnP

0

的方式我会做到这一点。如果你看看互联网连接中的网络连接面板。你可以看到用户知道该字符串为他的设备:

enter image description here

所以在与用户的对话我想给这个名字retreiving它win32_NetworkAdapter joinning Win32_NetworkAdapterConfigurationIndex

$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