Import-Csv
и ForEach-Object
ваши друзья здесь:
Import-Csv -Header Host,Ip,User,Pw foo.csv | ForEach-Object {
plink -l $_.User -pw $_.Pw $_.Ip lsvdisk -delim ',' -nohdr
}
Обратите внимание, что мы должны заключить в кавычки ,
, чтобы он передавался как один параметр. ¹
В блоке сценария ForEach-Object
$_
находится текущий объект, который имеет свойства из файла CSV.Мы должны были указать пользовательские заголовки для импорта, поскольку в вашем файле их нет.Если ваш файл выглядит не так, измените его соответствующим образом.
Это даст вам много выходных данных, из которых, возможно, имя хоста больше не доступно.В зависимости от того, как выглядит вывод, может иметь смысл разобрать его и обернуть в красивые объекты, но я не знаю, как выглядит вывод.Простой способ просто захватить выходные данные и связать их с именем хоста будет следующим:
Import-Csv -Header Host,Ip,User,Pw foo.csv | ForEach-Object {
$output = plink -l $_.User -pw $_.Pw $_.Ip lsvdisk -delim ',' -nohdr
New-Object PSObject -Property @{
Host = $_.Host
Output = $output
}
}
Чтобы префиксировать каждую строку вывода именем хоста, вы можете снова зациклить вывод:
Import-Csv -Header Host,Ip,User,Pw foo.csv | ForEach-Object {
$host = $_.Host
plink -l $_.User -pw $_.Pw $_.Ip lsvdisk -delim ',' -nohdr | ForEach-Object {
"${host}: $_"
}
}
¹ Если в командной строке есть много вещей, которые PowerShell хочет интерпретировать сам, часто проще использовать %--
, чтобы прекратить синтаксический анализ для остальной части строки после этого, который затем пропускает остальную частьдословно к внешним командам.