powershell - 是否可以在构造函数中引用另一个属性?
问题描述
背景
它以 cmdlet 作为Save hash table in PowerShell object notation (PSON)的答案开始。同时演变为ConvertTo-Expression。将 PowerShell 对象序列化为 PowerShell 表达式的 cmdlet。
由于重复的属性引用,有点涉及-Depth
类似本机 cmdlet(ConvertTo-Xml和ConvertTo-Json)的问题,我想知道这个问题是否可以在 PowerShell 表达式中很好地解决。
例子
$Object = @{
Name = "Parent"
Child = @{
Name = "Child"
}
}
$Object.Child.Parent = $Object
在此示例中,该.Child.Parent
属性引用 back $Object
,表示$Object.Child.Parent.Child.Parent.Name
返回Parent
。
目前,$Object | ConvertTo-Expression
返回ScriptBlock
类似:
@{
'Child' = @{
'Parent' = $_
'Name' = 'Parent'
}
'Name' = 'Parent'
}
要重建(重复出现的)属性引用,我可能会返回如下表达式:
[ScriptBlock]::Create(
@'
$_ = @{
'Child' = @{
'Parent' = $_
'Name' = 'Parent'
}
'Name' = 'Parent'
}
$_.Child.Parent = $_
$_
'@
)
(类似于示例中最初构造对象的方式。)
Restoreing (invoking, deserializing) 这个表达式采用如下内容:
$Expression = [ScriptBlock]::Create(... # The above result
$Object = &$Expression
$Object.Child.Parent.Name
但是这样的输出会极大地混淆结果的可读性。
问题
是否有任何其他方法(例如使用$This
、aScriptProperty
或...)来恢复PowerShell对象中的引用属性?
是否可以在施工时引用另一个属性?(我知道对象本身并不完整,但父引用可能已经存在。此外,我可以通过像延迟初始化
这样的操作来想象引用不需要存在。)
解决方案
推荐阅读
- vb.net - 我想创建一个渐变色
- python - Python 3 - 关键错误 = 8
- reporting-services - SSRS:odbc 数据源的数据集错误
- asp.net-core - aspnet core 和 AzureAD:有没有办法拦截身份验证?
- swift - 从 App Delegate 执行 Segue - Swift
- datepicker - 从引导日期选择器中仅选择日期和月份?
- html - 父元素未使用子文本区域正确调整大小
- java - 无法卸载 JDK 10 – 内部错误 2318
- java - 在事件 JavaFX 上创建新的透明舞台
- java - Java- 运算符顺序