Как выполнить цикл через 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 }
предупреждение: не проверял.