如何使用嵌套值创建PSCustomObject

时间:2017-05-24 21:04:21

标签: powershell

我正在尝试创建一个带有嵌套值的PSCustomObject,并且我有一段非常艰难的时间,我看到了很多哈希表和pscustom对象的例子,但只有非常基本的数据集。

我正在尝试创建一个具有服务器名称属性的pscustom对象,然后创建另一个具有服务数组及其当前运行状态的属性。

我能够创建服务及其运行状态的哈希表,但是当我尝试使用has表创建一个对象时,它不能很好地工作:

哈希表包含服务名称及其运行状态(已停止或正在运行)

    $hashtable

    $myObject = [PSCustomObject]@{
    Name     = "$server"
    Services = "$hashtable"
    }

我对任何事情都很开放,我有很多关于如何从JSON或XML转换项目的示例,并且希望能够使用这些项目,但仍然有能够在第一次格式化数据时遇到同样的问题的地方。

编辑:对于这篇文章的一些含糊不清感到抱歉。正如一些人已经提到的,问题是哈希表周围的双重问题。一切都在运作

1 个答案:

答案 0 :(得分:1)

正如@ t1meless在注释中指出的那样,当您将变量括在双引号中时,它将尝试将该值转换为字符串。对于Hashtable对象,不是从对象提供任何信息,而是返回“System.Collections.Hashtable”。如果删除双引号,它将按照您的意图存储哈希表的值。

以下是从服务器提取服务信息并将值存储在自定义对象中的完整示例。请注意,$server仍然可以保留在引号中,因为它是一个字符串,但由于它已经是一个字符串,因此这是不必要的。

$myObject = Foreach ($Server in $Servers) {
    $hashtable = @{}
    Get-Service -ComputerName $Server | ForEach-Object { $hashtable.Add($_.name,$_.Status}

    [PSCustomObject]@{
        Name     = "$Server"
        Services = $hashtable
    }
}