将PSCustomObject转换为Hashtable的最简单方法是什么?它的显示方式就像一个带有拆分操作符、大括号和键值对的函数。当我尝试将其转换为[Hashtable]时,它不起作用。我也尝试了.toString(),赋值的变量说它是一个字符串,但什么也不显示--你有什么想法?
发布于 2010-09-18 12:38:19
应该不会太难。下面这样的代码应该能起到作用:
# 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 }发布于 2010-09-18 23:48:38
Keith已经给了你答案,这只是用一行代码做同样的事情的另一种方式:
$psobject.psobject.properties | foreach -begin {$h=@{}} -process {$h."$($_.Name)" = $_.Value} -end {$h}发布于 2015-12-21 00:55:29
下面是一个使用嵌套哈希表/数组的版本(如果您正在尝试使用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
}
}
}https://stackoverflow.com/questions/3740128
复制相似问题