首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PSCustomObject到哈希表

PSCustomObject到哈希表
EN

Stack Overflow用户
提问于 2010-09-18 10:22:51
回答 6查看 76.4K关注 0票数 83

PSCustomObject转换为Hashtable的最简单方法是什么?它的显示方式就像一个带有拆分操作符、大括号和键值对的函数。当我尝试将其转换为[Hashtable]时,它不起作用。我也尝试了.toString(),赋值的变量说它是一个字符串,但什么也不显示--你有什么想法?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-09-18 12:38:19

应该不会太难。下面这样的代码应该能起到作用:

代码语言:javascript
复制
# Create a PSCustomObject (ironically using a hashtable)
$ht1 = @{ A = 'a'; B = 'b'; DateTime = Get-Date }
$theObject = new-object psobject -Property $ht1

# Convert the PSCustomObject back to a hashtable
$ht2 = @{}
$theObject.psobject.properties | Foreach { $ht2[$_.Name] = $_.Value }
票数 106
EN

Stack Overflow用户

发布于 2010-09-18 23:48:38

Keith已经给了你答案,这只是用一行代码做同样的事情的另一种方式:

代码语言:javascript
复制
$psobject.psobject.properties | foreach -begin {$h=@{}} -process {$h."$($_.Name)" = $_.Value} -end {$h}
票数 33
EN

Stack Overflow用户

发布于 2015-12-21 00:55:29

下面是一个使用嵌套哈希表/数组的版本(如果您正在尝试使用DSC ConfigurationData来执行此操作,则此版本非常有用):

代码语言:javascript
复制
function ConvertPSObjectToHashtable
{
    param (
        [Parameter(ValueFromPipeline)]
        $InputObject
    )

    process
    {
        if ($null -eq $InputObject) { return $null }

        if ($InputObject -is [System.Collections.IEnumerable] -and $InputObject -isnot [string])
        {
            $collection = @(
                foreach ($object in $InputObject) { ConvertPSObjectToHashtable $object }
            )

            Write-Output -NoEnumerate $collection
        }
        elseif ($InputObject -is [psobject])
        {
            $hash = @{}

            foreach ($property in $InputObject.PSObject.Properties)
            {
                $hash[$property.Name] = ConvertPSObjectToHashtable $property.Value
            }

            $hash
        }
        else
        {
            $InputObject
        }
    }
}
票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3740128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档