5 年后,我粘贴在原始答案中的 cmdlet 经历了如此多的更新,以至于它已经完全过时了。因此,我用最新版本的链接替换了代码和自述文件。
除了支持更多的对象类型和更好的格式之外,它现在输出一个表达式 ( ScriptBlock
),其默认显示类型仍然是 aString
并允许使用调用运算符直接调用&
:
$Object = &($Object | ConverTo-Expression)
ConvertTo-Expression
可以使用以下命令从 PowerShell 库下载 cmdlet :
Install-Script -Name ConvertTo-Expression
完整的自述文件(和源代码)可从 GitHub 获得:
https ://github.com/iRon7/ConvertTo-Expression
安装
下载后(Install-Script -Name ConvertTo-Expression
),脚本可以简单地通过点源调用:
. .\ConvertTo-Expression.ps1
您还可以考虑通过将脚本重命名为 PowerShell 模块 ( .psm1
) 文件并将其移动到$env:PSModulePath
. 有关更多详细信息,请参阅:如何编写 PowerShell 脚本模块。
回答
以下是序列化问题中特定示例(分配给$Craig
)的一些可能选项:
ConvertTo-Expression $Craig
@{
parameters =
@{
name = 'parameter 0'
default = 1
values =
1,
2,
3,
4
},
@{
name = 'parameter 1'
default = 'A'
values =
'A',
'B',
'C'
}
name = 'report 0'
}
限制树视图扩展:(
将Expand -0
输出一行并Expand -1
删除不必要的空格)
ConvertTo-Expression $Craig -expand 3
@{
parameters =
@{name = 'parameter 0'; default = 1; values = 1, 2, 3, 4},
@{name = 'parameter 1'; default = 'A'; values = 'A', 'B', 'C'}
name = 'report 0'
}
保留显式类型(强类型):
ConvertTo-Expression $Craig -expand 3 -Strong
[hashtable]@{
parameters = [array](
[hashtable]@{name = [string]'parameter 0'; default = [int]1; values = [array]([int]1, [int]2, [int]3, [int]4)},
[hashtable]@{name = [string]'parameter 1'; default = [string]'A'; values = [array]([string]'A', [string]'B', [string]'C')}
)
name = [string]'report 0'
}
(注意:根据 PowerShell 设计,HashTables 不是按顺序排列的,但如果需要,您可以改用该[Ordered]
类型。)