如何'flatten'复杂的Powershell对象(哈希表)以输出为CSV条目?



我正在生成一个对象,其中包含一些诊断过程的结果。它具有以下结构:

ProdVersion    : [string]
LastAttempted  : [ordered hashtable]
LastSuccessful : [ordered hashtable]
Pings      : [array of hashtables]
Ports      : [array of hashtables]
Services       : [array of hashtables]
$ServiceProps = [ordered]@{
ServiceName = $sName
Exists = $sExists
Disabled = $sDisabled
Status = $sStatus}

一个这样的对象表示一个CI(服务器(的数据。我想以CSV报告的"线性化"形式输出此对象,格式如下:'名称:val;名称:val;名称:val.…'其中val(如果是集合(项依次用","分隔。

最优雅的方法是什么?我正在寻找一个不绑定到我的特定对象结构的通用解决方案。

更新

现在我正在尝试这样的smth,它可以工作,但输出中不包括最后一个"服务"部分,不知道为什么-

$output = New-Object System.Text.StringBuilder
function expand ($object) {
foreach ($i in $object.keys) {
$t = $object.$i.gettype()
if ($t -in ([System.Object[]], [System.Collections.Specialized.OrderedDictionary])) {
expand $object.$i
} else {
[void]$output.Append("$i=$($object.$i);")
}
}
}

更新2

找出原因-它将$ServiceProps(例如ServiceName(中的键值视为[Object[]]而不是[string],并尝试迭代其.Keys,即$null

对象序列化是您要查找的单词。您可以使用Export-Clixmlcmdlet。它将把对象写入xml文档。另一种选择是使用ConvertTo-Json -Compress。它将输出一行。但是,如果您需要这行完全以指定的格式,那么我想除了编写自己的函数之外,没有其他方法了。

最新更新