Вот мое мнение, FWIW. Сначала обменяйте этот объект на упорядоченную хеш-таблицу до конца.
function new-test {($computername)
$oPc = new-object collections.specialized.ordereddictionary
$oPc.computername = $computername
}
Это версия V2. В V3 вы сможете сделать
$opc = [ordered]@{}
$oPc.computername = $computername
Затем измените свои функции, чтобы взять это из конвейера. При каждом тесте добавьте его имя в таблицу вместе с результатом:
$oPc.TestBrokeWMI = "Fail"
Это намного проще, чем добавить элемент к объекту.
Затем передайте весь объект по конвейеру.
Для тестов, которые имеют зависимости, проверьте, есть ли в хэш-таблице ключ для зависимости и значение «Пропущено».
Создайте функцию для использования в конце для преобразования хеш-таблицы в объект, чтобы у вас было что-то удобное для работы с форматированием или экспортом Опять же, в V3 вы сможете просто сделать
new-object -property $oPc
и он будет работать с заказанным хеш-таблицей. Вы захотите использовать упорядоченную хеш-таблицу, чтобы тесты оставались в том порядке, в котором они были выполнены в результирующем объекте.
Тогда ваш тестовый стек начинает выглядеть так:
'Computer1' | New-Test |
Test-BrokenWmi | Get-BrokenWmi | Fix-BrokenWmi |
Test-ServiceNotStarted | TestServiceStart |
| New-TestResult