【问题标题】:Setting Static IP on NICs - Powershell在 NIC 上设置静态 IP - Powershell
【发布时间】:2013-07-19 21:13:36
【问题描述】:

我正在创建一个脚本,它将在调试新服务器时运行许多基本任务。现在大多数服务器现在都有多个 NIC,我需要询问用户(使用脚本)他们想要将 IP 分配给哪个 NIC。

目前我有:

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

我相信这会将 NIC 放入 $NICs。但是从这里我想将它们打印给用户,然后以某种方式为每个 NIC 分配一个值,例如索引,因此用户可以输入“1”或“2”,以便告诉脚本应用哪个 NIC 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") 

有什么想法吗?

【问题讨论】:

    标签: powershell wmi wmi-query


    【解决方案1】:

    如果您确保 $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
    

    然后像这样访问每个网卡:

    $NICS[$selectedIndex]
    

    【讨论】:

    • 是的,看起来我还没有完成那一点。 :-) 尝试更新版本。
    • 嗯 - 我得到空白输出,奇怪。
    【解决方案2】:
    $NICs = @(Get-WMIObject Win32_NetworkAdapterConfiguration ...)
    

    将使$NICs 成为一个数组,可以通过(从零开始的)索引访问:

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

    【讨论】:

      【解决方案3】:

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

      所以在与用户的对话中,我会给出这个名字,用win32_NetworkAdapter 将它加入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
      

      【讨论】:

        猜你喜欢
        • 2023-03-05
        • 2020-06-09
        • 1970-01-01
        • 1970-01-01
        • 2013-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-19
        相关资源
        最近更新 更多