function ConvertTo-Hashtable {
<#
.Synopsis
Converts an object to a hashtable
.DESCRIPTION
PowerShell v4 seems to have trouble casting some objects to Hashtable.
This function is a workaround to convert PS Objects to [Hashtable]
.LINK
https://github.com/alainQtec/.files/blob/main/src/scripts/Converters/ConvertTo-Hashtable.ps1
.NOTES
Base ref: https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/turning-objects-into-hash-tables-2
#>
PARAM(
# The object to convert to a hashtable
[Parameter(ValueFromPipeline = $true, Mandatory = $true)]
$InputObject,
# Forces the values to be strings and converts them by running them through Out-String
[switch]$AsString,
# If set, empty properties are Included
[switch]$AllowNulls,
# Make each hashtable to have it's own set of properties, otherwise,
# (default) each InputObject is normalized to the properties on the first object in the pipeline
[switch]$DontNormalize
)
BEGIN {
$headers = @()
}
PROCESS {
if (!$headers -or $DontNormalize) {
$headers = $InputObject | Get-Member -type Properties | Select-Object -expand name
}
$OutputHash = @{}
if ($AsString) {
foreach ($col in $headers) {
if ($AllowNulls -or ($InputObject.$col -is [bool] -or ($InputObject.$col))) {
$OutputHash.$col = $InputObject.$col | Out-String -Width 9999 | ForEach-Object { $_.Trim() }
}
}
} else {
foreach ($col in $headers) {
if ($AllowNulls -or ($InputObject.$col -is [bool] -or ($InputObject.$col))) {
$OutputHash.$col = $InputObject.$col
}
}
}
}
END {
return $OutputHash
}
}
8条答案
按热度按时间jjjwad0x1#
不会太难的。像这样的东西应该可以:
oewdyzsn2#
基思已经给了你答案,这只是用一行程序做同样事情的另一种方式:
6xfqseft3#
这里有一个版本,也可以使用嵌套的哈希表/数组(如果你试图使用DSC ConfigurationData来做这件事,这很有用):
oxosxuxt4#
我非常懒惰的方法,由PowerShell 6中的一个新功能启用:
8tntrjer5#
这适用于由ConvertFrom_Json创建的PSCustomObjects。
免责声明:我几乎不懂PowerShell,所以这可能不像它可能的那样干净。但它可以工作(只适用于一个级别)。
3mpgtkmj6#
我的代码:
wpx232ag7#
对于简单的[PSCustomObject]到[Hashtable]转换,Keith's Answer效果最好。
但是如果你需要更多的选项,你可以使用
也许这是矫枉过正,但我希望它帮助
ux6nzvsh8#
今天,将PSCustomObject转换为Hashtable的“最简单方法”是:
或
相反,您可以使用以下命令将Hashtable转换为PSCustomObject:
唯一的障碍是,这些漂亮的选项可能无法在旧版本的PS