Import-CSV 关心我有重复的成员,但我需要重复的成员

Import-CSV cares that I have duplicate members, but I need the duplicates

我正在编写一个简单的 powershell 脚本来打开我生成的 CSV,并将每个元素推送到 telnet 会话中以配置设备。但是,由于我有重复的成员,我的脚本甚至不会启动!如果有人对此有指导,请告诉我。

这是powershell,我不是很熟悉,我只是用旧代码来测试它是否有效。

$CSVFile = Import-CSV "C:\Users\Alexander\Documents\AMSProvisioning\code.CSV"

foreach ($Line in $CSVFile){
    $GroupArray = $Line.split(",")
    foreach ($code in $GroupArray){
        "$code has been created!"
    }
}   

这是 CSV 文件。它只是一个命令列表,通常会手动输入到 configure/provision 设备的开关中。这也是一个测试 CSV 文件。

configure Equipment ont interface 1/1/1/3/1 sw-ver-plannd UNPLANNED sernum ALCL:7788h67a,"configure Equipment ont interface 1/1/1/3/1 desc1 ""Alex Manley""","configure Equipment ont interface 1/1/1/3/1 desc2 ""185 Alexander St""",configure equipment ont interface 1/1/1/3/1 admin-state down,configure equipment ont slot 1/1/1/3/1/1 planned-card-type 10_100base plndnumdataports 4 plndnumvoiceports 0 admin-state up,configure ethernet ont 1/1/1/3/1/1/[1...4] auto-detect auto,configure interface port uni:1/1/1/3/1/1/[1...4] admin-up,exit all,configure qos interface 1/1/1/3/1/1/[1...4] upstream-queue 0 bandwidth-profile name:BE_20Mb bandwidth-sharing uni-sharing,configure qos interface 1/1/1/3/1/1/[1...4] queue 0 shaper-profile name:100Mb_DOWN,configure bridge port 1/1/1/3/1/1/[1...4] max-unicast-mac 8,configure bridge port 1/1/1/3/1/1/[1...4] vlan-id 134 tag untagged,configure bridge port 1/1/1/3/1/1/[1...4] pvid 134 default-priority 0,configure interface port uni:1/1/1/3/1/1/[1...4] admin-up,exit all,configure equipment ont interface 1/1/1/3/1 admin-state up

我转而使用 get-content,而不是 Importing-CSV,因为它几乎执行我需要的相同功能。不好意思打扰大家,但非常感谢您的帮助!

好的,从没有 header 的意义上说,这不是真正的 CSV。老实说,您并不真的希望它成为 CSV,您只希望它成为一系列命令。您要使用 Get-Content 而不是 Import-CSV。这不会创建具有属性的 object,但您可以用逗号拆分字符串并获得一个您可以处理的数组。类似于:

$commands = Get-Content 'C:\Users\Alexander\Documents\AMSProvisioning\code.CSV' |
    ForEach-Object{$_.Split(',')}

第一部分将 CSV 作为字符串数组导入。然后对于每一行,它在逗号上拆分该行,创建一个单独的命令数组。所有命令都分配给 $code.

如果您需要每一行都是它自己的一组代码,并且有一组代码集,您可以将每一行变成一个 object,并让每个 object 有一个 属性 那是用逗号分隔的那一行的数组。类似于:

$commands = Get-Content 'C:\Users\Alexander\Documents\AMSProvisioning\code.CSV' |
    ForEach{New-Object PSObject -Prop @{'Code'=$_.split(',')}}

这样 $commands[0].code($commands 的第一条记录)将是从 CSV 文件的第一行导出的命令数组。我不记得如何制作一个数组的数组,这可能对你来说是理想的,但这应该工作得很好。