так вот, ваш запрос возвращает несколько таблиц
$result.Tables.Count - это количество таблиц.
Их можно перечислять как
$result.Tables[0], $result.Tables[1] и тд
В каждой из таблиц есть строки
$result.Tables[0].DataRow,. $result.Tables[1].DataRow
Каждый Datarow - это отдельный объект, у него тоже есть свой Count - $result.Tables[0].DataRow.Count
Вы в своём коде берете все строки из всех таблиц сразу и пишете в эксель. Кстати, внутри цикла перебирающего строки, это делать не рекомендуется.
Вам надо пробегать не по строкам, а по таблицам и проверять, если есть данные - писать (и безо всяких for, это прошлый век :) )
То есть что-то вроде:
foreach ($table in $result.Tables) {
if ($table.DataRow.Count) {
$table.DataRow | ... | Export-Excel ...
}
}
Могу наврать с точными названиями свойств, может там просто Rows, сейчас не вспомню, но на один из ваших прошлый вопросов я давал ссылки.
Проще всего выполнять построчно и смотреть что внутри каждого из объектов