我似乎无法想象这个数组/循环组合。我希望运行一个脚本来获取所有活动的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
}
}
}
所以,我有两个可以拆分的名称,admin1a
和admin1b
但是我似乎无法正确命名NIC,要么只重命名一个NIC,要么两者都做,然后那里是其他错误。
答案 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,它将获得第三个名称。这并不能解决这样的事实,即它看起来像是为多个服务器设计的,而您只是在主机服务器上执行该功能,但它解决了您特别询问的问题。