使用CSV文件重命名多个nics

时间:2015-06-02 23:46:54

标签: powershell csv

我似乎无法想象这个数组/循环组合。我希望运行一个脚本来获取所有活动的NIC,然后根据CSV文件重命名它们。之后,我创建了一个NIC团队并再次利用CSV文件来设置静态网络信息。

我使用以下方法获取所有活动的网页:

$Adapter = Get-NetAdapter | where {$_.status -eq "up"}

CSV文件标题采用以下格式:

host    newname   ipaddress   subnet    gateway    dns

newname列的值为admin1a;admin1b

这是一个可行的例子,但会产生错误:

Foreach ($entry in $DC1_NICS) {
    $NewName = $entry.NewName.split(";")
    Foreach ($item in $NewName) {
        Foreach ($nic in $Adapter) {
            Rename-NetAdapter -Name $Nic.Name -NewName $item
        }
    }
}

所以,我有两个可以拆分的名称,admin1aadmin1b但是我似乎无法正确命名NIC,要么只重命名一个NIC,要么两者都做,然后那里是其他错误。

1 个答案:

答案 0 :(得分:2)

问题是你的嵌套ForEach循环,因为它采用了第一个名称,然后对于每个NIC,它尝试将该NIC命名为该名称,然后它移动到第二个名称,对于每个NIC,它尝试将其命名为,所以假设您有一个带有2个NIC的服务器,并且您的CSV提供名称Admin1和Admin2。它循环遍历名称,并且每次都运行内部循环:

将NIC1重命名为Admin1
将NIC2重命名为Admin1

然后它对第二个名称Admin2:

执行相同的操作

将NIC1重命名为Admin2
将NIC2重命名为Admin2

这就是问题的症结所在......你需要遍历两个网卡和新名称。在这种情况下,您需要一个For循环。基于NIC的数量,我们希望您在CSV中指定了足够的名称。

Foreach ($entry in $DC1_NICS) {
    $Adapter = Get-NetAdapter | where {$_.status -eq "up"}
    $NewName = $entry.NewName.split(";")
    For($i = 0;$i -lt $Adapter.count;$i++){
        Rename-NetAdapter -Name $Adapter[$i].Name -NewName $NewName[$i]
    }
}

因此第一个NIC获得第一个名称,第二个NIC获得第二个名称,如果有第三个NIC,它将获得第三个名称。这并不能解决这样的事实,即它看起来像是为多个服务器设计的,而您只是在主机服务器上执行该功能,但它解决了您特别询问的问题。