Как выполнить цикл через CSV-файл с помощью пакета или сценария PowerShell?

У меня есть файл CSV с двумя разными столбцами, один с именами ПК и один с MAC-адресами, как это:

PCxxxx 00-11-22-33-44-55
...
...

эти значения должны быть помещены в следующую команду CLI:

wdsutil /Set-Device /Device:PCxxxx /ID:00-11-22-33-44-55

теперь, поскольку их около 200, я хочу автоматизировать это.

интересно, можно ли это партия? Это было бы довольно сложно, верно? Я думал о массивах, но не думаю, что это можно сделать в пакетном режиме.

может быть, с PowerShell это было бы немного проще.

2 ответов


в пакетном файле:

for /f "tokens=1,2 delims= " %%a in (foo.csv) do (
    wdsutil /Set-Device /Device:%%a /ID:%%b
)

на самом деле, вы можете сделать это как однострочный из cmd напрямую:

for /f "tokens=1,2 delims= " %a in (foo.csv) do wdsutil /Set-Device /Device:%a /ID:%b

в PowerShell вы можете использовать аналогичную идею:

Get-Content foo.csv | ForEach-Object {
  $name,$mac = -split $_
  wdsutil /Set-Device /Device:$name /ID:$mac
}

или используйте командлет импорта CSV, но, учитывая ваш вопрос, у вас нет заголовков столбцов, поэтому вам нужно предоставить их вручную:

Import-CSV -Delim ' ' -Path foo.csv -Header Name,Mac | ForEach-Object {
    wdsutil /Set-Device "/Device:$($_.Name)" "/ID:$($_.Mac)"
}

# First column in csv file must be titled PCName, second column must be titled MacAddress.
Import-Csv myfile.csv | %{ wdsutil /Set-Device /Device:$_.PCName /ID:$_.MacAddress } 

предупреждение: не проверял.