Используйте командлет Get-Content, чтобы поместить оба содержимого файла в массив, а затем вывести отдельные значения по позиции массива. Вы, вероятно, захотите некоторую логику, чтобы проверить, соответствует ли размер массива, и пользовательскую обработку, если это не так. В приведенном выше примере вы в основном помещаете для каждого цикла в другой цикл foreach, который дает вам поведение, которое вы видите.
$computers = GC "C:\server.txt"
$iplist = GC "C:\ip.txt"
for ($i = 0; $i -lt $iplist.Count ; $i++) {
Write-host ("{0} - {1}" -f $computers[$i],$iplist[$i])
}
Или, если вы состоите в браке с использованием логики foreach для одного списка, чтобы все было так, словно вместо базовой итерации с циклом for, вы можете добавить счетчик в цикл foreach. Затем вы можете посмотреть индекс вашего массива уже проанализированного массива iplist. Это в основном делает то же самое, хотя ..
$computers = "C:\server.txt"
$iplist = GC "C:\ip.txt"
get-content $computers | % {$counter = 0} {
Write-host ("{0} - {1}" -f $_,$iplist[$counter])
$counter++
}
Только для ясности, обратите внимание на эту строку:
"get-content $ computers |%"
% на самом деле является псевдонимом ForEach-Object, поэтому вы получаете foreach внутри вывода foreach, который вы видите.