【问题标题】:How to convert a powershell hashtable as an object如何将 powershell 哈希表转换为对象
【发布时间】:2022-09-29 18:35:00
【问题描述】:

PowerShell 中的某些哈希表(例如使用 Import-PowerShellDataFile 导入的哈希表)如果改为 PSCustomObject 会更容易导航。

@{
    AllNodes = @(
        @{
            NodeName = \'SRV1\'
            Role = \'Application\'
            RunCentralAdmin = $true
        },
        @{
            NodeName = \'SRV2\'
            Role = \'DistributedCache\'
            RunCentralAdmin = $true
        },
        @{
            NodeName = \'SRV3\'
            Role = \'WebFrontEnd\'
            PSDscAllowDomainUser = $true
            PSDscAllowPlainTextPassword = $true
            CertificateFolder = \'\\\\mediasrv\\Media\'
        },
        @{
            NodeName = \'SRV4\'
            Role = \'Search\'
        },
        @{
            NodeName = \'*\'
            DatabaseServer = \'sql1\'
            FarmConfigDatabaseName = \'__FarmConfig\'
            FarmContentDatabaseName = \'__FarmContent\'
            CentralAdministrationPort = 1234
            RunCentralAdmin = $false
        }
    );
    NonNodeData = @{
        Comment = \'No comment\'
    }
}

导入后将成为哈希表的哈希表

$psdnode = Import-PowerShellDataFile .\\nodefile.psd1

$psdnode

Name                           Value
----                           -----
AllNodes                       {System.Collections.Hashtable, System.Collect...
NonNodeData                    {Comment}

$psdnode.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Hashtable                                System.Object

当按属性名称导航时,数据结构会很奇怪。

    标签: powershell hashtable pscustomobject


    【解决方案1】:

    我昨天发现的一个非常简单的方法是对 JSON 进行“双重转换”。

    $nodes = Import-PowerShellDataFile .\nodes.psd1 | ConvertTo-Json | ConvertFrom-Json
    
    $nodes
    
    AllNodes
    --------
    {@{NodeName=SRV1; RunCentralAdmin=True; Role=Application}, @{NodeName=SRV2; RunCentralAdm...}
    
    $nodes.GetType()   
    
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     False    PSCustomObject                           System.Object
    

    【讨论】:

      猜你喜欢
      • 2015-01-04
      • 2014-09-04
      • 2018-07-18
      • 2011-06-29
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 2017-11-24
      • 2017-04-04
      相关资源
      最近更新 更多