使用PowerShell将破折号添加到CSV文件中的MAC地址列表中

时间:2017-03-14 14:32:31

标签: powershell csv

我正在寻找一个在MAC地址的每两位数之后添加“ - ”的脚本。这里已经有一个脚本可以解决这个问题。

$macs = Get-Content C:\Users\metho\Desktop\mac.txt
$output = foreach ($mac in $macs){
    $mac.insert(2,"-").insert(5,"-").insert(8,"-").insert(11,"-").insert(14,"-")
}
$output | Out-File C:\Users\nmetho\Desktop\mac1.txt

我遇到的问题是我使用的CSV文件包含四列,因此上述脚本对我不起作用。

Description, MacAddress, IPAddess, Location

CJ0001, 00351AC0353C, 192.168.2.5, Room1

我希望仅修改MacAddress字段,以便以00-35-1A-C0-35-3C的格式获得“Mac地址”。

我可以使用此脚本来实现我正在寻找的内容,还是需要从头开始?

2 个答案:

答案 0 :(得分:1)

这应该有效:

$macs | ForEach-Object {
  Select Description, @{Name='MacAddress'; Expression={ ($_.MacAddress -split '([A-Z0-9]{2})' | Where-Object {$_}) -join '-' }}, IPAddess, Location
}

打破表达式:

{ `
  ( `
  $_.MacAddress -split '([A-Z0-9]{2})' ` # regex split the mac address up every two alpha-numeric chars
  | Where-Object {$_} `                  # filter to only return non-blank splits
  ) `
  -join '-'                              # join the 2-char pairs with a '-'
}

修改

以下是一个完整的示例,将您的代码与我的代码混合,输入文件,然后输出:

# remove comment before -Header if no header
$csv = Import-Csv -Path C:\Users\metho\Desktop\Macadd.csv # -Header Description, MacAddress, IPAddess, Location
$csv | ForEach-Object { Select HostName, @{Name='MacAddress'; Expression={ ($_.MacAddress -split '([A-Z0-9]{2})' | Where-Object {$_}) -join '-' }} } |
  Export-Csv -Path C:\Users\metho\Desktop\MacAdd_v1.csv -NoTypeInformation

虽然这可以通过不使用变量来简化,如:

  Import-CSV C:\Users\metho\Desktop\Macadd.csv |
  ForEach-Object { Select HostName, @{Name='MacAddress'; Expression={ ($_.MacAddress -split '([A-Z0-9]{2})' | Where-Object {$_}) -join '-' }} } |
  Export-CSV C:\Users\metho\Desktop\MacAdd_v1.csv -NoTypeInformation

答案 1 :(得分:1)

这是经过测试和运作的。根据讨论评论,我已经检查了不是MAC地址预期长度的字符串。如果您在以后运行它,它还将确保它不会添加更多破折号:

Import-CSV 'C:\Users\metho\Desktop\macadd.csv' | ForEach-Object {   
    If ($_.MacAddress.length -eq 12){
        $_.MacAddress = $_.MacAddress.insert(2,"-").insert(5,"-").insert(8,"-").insert(11,"-").insert(14,"-")
    } Else {
        Write-Warning "The MAC Address $($_.MacAddress) is not 12 characters"
    }
    Write-Output $_
} | Export-CSV 'C:\Users\metho\Desktop\macadd_v1.csv' -NoTypeInformation