Powershell 使用CSV文件重命名多个NIC
我似乎无法理解这个数组/循环组合。我希望运行一个脚本,将获得所有活动NIC,然后根据CSV文件重命名它们。之后,我创建了一个NIC团队,并再次利用CSV文件来设置静态网络信息 我使用以下方法获取所有活动NIC:Powershell 使用CSV文件重命名多个NIC,powershell,csv,Powershell,Csv,我似乎无法理解这个数组/循环组合。我希望运行一个脚本,将获得所有活动NIC,然后根据CSV文件重命名它们。之后,我创建了一个NIC团队,并再次利用CSV文件来设置静态网络信息 我使用以下方法获取所有活动NIC: $Adapter = Get-NetAdapter | where {$_.status -eq "up"} CSV文件标题的格式如下: host newname ipaddress subnet gateway dns newname列的值为admin1a
$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重命名,要么两个都重命名,然后会出现其他错误。问题在于嵌套的ForEach
循环,因为它使用第一个名称,然后,对于每个NIC,它尝试将该NIC命名为该名称,然后移动到第二个名称,对于每个NIC,它尝试将其命名为该名称,因此假设您有一个带有2个NIC的服务器,您的CSV将给出名称Admin1和Admin2。它循环遍历名称,并每次运行内部循环:
将NIC1重命名为Admin1将NIC2重命名为Admin1 然后对第二个名称Admin2执行相同的操作: 将NIC1重命名为Admin2
将NIC2重命名为Admin2 这就是问题的症结所在。。。您需要遍历NIC和新名称。在这种情况下,您需要一个
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,它将获得第三个名称。这并不能解决这样一个事实,即它看起来是为多台服务器设计的,并且您只在主机服务器上执行该功能,但它解决了您特别询问的问题。向我们展示整个CSV文件,或者至少是一个示例。@WalterMitty不应该在意整个CSV的外观。问题不在于他的CSV,而在于他的ForEach循环。很快就会有答案。这似乎是可行的,但$i的结束计数是3,因此它迭代了3次而不是两次,因此在第三次运行时发送错误,因为name变量没有任何内容。我怀疑$I-le$adapter.count应该阻止另一个进入for循环,对吗?啊,对,对不起。这应该是
-lt
,而不是-le
。我将在稍后更新答案以反映这一点。(-lt
为“小于”,而-le
为“小于或等于”,因此当其变为相等时,此操作将停止,而不是在其相等时最后运行一次)