PSCustomObject到哈希表

将PSCustomObject转换为Hashtable最简单的方法是什么? 它与splat操作符,花括号以及似乎是关键值对一样显示。 当我尝试将其转换为[Hashtable]时,它不起作用。 我也尝试.toString()和分配的variables说,它的一个string,但什么都没有显示 – 任何想法?

不应该太难 像这样的事情应该做的伎俩:

# 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 } 

Keith已经给了你答案,这只是另一种方式,

 $psobject.psobject.properties | foreach -begin {$h=@{}} -process {$h."$($_.Name)" = $_.Value} -end {$h} 

这里有一个与嵌套的hashtables /数组一起工作的版本(如果你想用DSC ConfigurationData来做到这一点,这是非常有用的):

 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 } } } 

这适用于由ConvertFrom_Json创build的PSCustomObjects。

 Function ConvertConvertFrom-JsonPSCustomObjectToHash($obj) { $hash = @{} $obj | Get-Member -MemberType Properties | SELECT -exp "Name" | % { $hash[$_] = ($obj | SELECT -exp $_) } $hash } 

免责声明:我几乎不了解PowerShell,所以这可能不是那么干净。 但它的作品(只有一个级别)。