Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 使用CSV文件重命名多个NIC_Powershell_Csv - Fatal编程技术网

Powershell 使用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

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

我使用以下方法获取所有活动NIC:

$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
为“小于或等于”,因此当其变为相等时,此操作将停止,而不是在其相等时最后运行一次)