alp*_*dev 64 powershell hashtable pscustomobject
将a转换PSCustomObject为a 的最简单方法是Hashtable什么?它显示就像一个带有splat运算符,花括号和看似是键值对的那个.当我尝试将它投射到[Hashtable]它不起作用.我也试过.toString(),分配的变量说它是一个字符串,但没有显示任何 - 任何想法?
Kei*_*ill 82
不应该太难.像这样的东西应该做的伎俩:
# 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 }
Run Code Online (Sandbox Code Playgroud)
Sha*_*evy 27
基思已经给你答案了,这只是另一种方式,用一个班轮做同样的事情:
$psobject.psobject.properties | foreach -begin {$h=@{}} -process {$h."$($_.Name)" = $_.Value} -end {$h}
Run Code Online (Sandbox Code Playgroud)
小智 20
这是一个适用于嵌套哈希表/数组的版本(如果您尝试使用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
}
}
}
Run Code Online (Sandbox Code Playgroud)
我非常懒惰的方法,由 PowerShell 6 中的一项新功能启用:
$myhashtable = $mypscustomobject | ConvertTo-Json | ConvertFrom-Json -AsHashTable
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49901 次 |
| 最近记录: |