Допустимо выводить любой тип объекта, который лучше всего использовать для представления того, что вы пишете, - набор данных абсолютно подходит. Единственное потенциальное предостережение заключается в том, что версия 2 PowerShell может работать на сокращенной версии .NET Framework (например, на Server Core), поэтому, если это потенциальный сценарий для ваших командлетов, вам нужно проявить осторожность, чтобы убедиться, что выводимый вами объект существует в каждой системе, где может использоваться ваш командлет.
Все это говорит о том, что конвейер работает лучше всего, когда он содержит коллекции объектов; DataSet не является коллекцией как таковой. Другими словами, вы хотите, чтобы нижестоящие командлеты могли получать по одному объекту за раз по конвейеру, чтобы эти командлеты не должны были вручную перечисляться через объект. Я не очень много знаю о том, что именно вы делаете, - вполне может быть, что DataSet полностью уместен, - но я бы предпочел видеть цикл командлетов внутри DataSet, создавать свои собственные пользовательские объекты (чтобы каждый столбец в таблице становится свойством) и выводит эти объекты в конвейер. Это просто увеличивает количество нижестоящих командлетов, которые могут потреблять то, что вы выводите.
Простой тест - передать вывод командлета в Export-CSV. Если это работает (и, вероятно, не с DataSet), то вы делаете правильные вещи , как правило, . Теперь вам может потребоваться создать командлет, который выводит DataSet, и вы только намерены для некоторых других написанных вами командлетов (которые используют DataSets) для работы с этим выводом. В этом нет ничего плохого. Максимальная гибкость - это отдельные объекты, поскольку она позволяет всем основным командлетам PowerShell работать с вашим выводом.
Надеюсь, это поможет.