我想在PowerShell中创建一个自定义字典类(它将配置临时存储在特定的第三方应用程序中,并在另一个PowerShell会话中检索它)。从技术上讲,我也可以通过创建一种Set-MyConfigVariable -Key <key> -Value <Value>
和Get-MyConfigVariable -Key <key>
cmdlet来做到这一点,但我想研究一下是否可以使用扩展字典(并在getter
和setter
方法中挂钩)来更友好地使用用户(作者)。
简而言之,在C#中描述的内容如下:How to write a getter and setter for a Dictionary?
Class MyStore: System.Collections.Generic.Dictionary[String,String] {
$h = @{}
[string]$This([String]$Key) {
get { write-host 'getting something'; return $h[$Key] }
set { write-host 'setting something'; $h[$Key] = $Value }
}
}
$MyStore = [MyStore]::new()
$MyStore['key'] = 'value'
$MyStore['key']
上述原型在[string]$This([String]$Key) {
(indexer?),但可能还需要不同的getter和setter实现(使用Update-TypeData
?).
如何在PowerShell中做到这一点(如果可能的话)?
如果对一个类来说不可能,那么可以在单个示例上(使用动态键)完成吗?
1条答案
按热度按时间iqjalb3h1#
PowerShell代码,使用自定义
class
es,从PowerShell 7.3.4开始有以下限制:Add-Member
和ScriptProperty
成员,如this answer.Tip of the hat to Santiago Squarzon所示。C#代码,用
Add-Type
临时编译,提供了一个解决方案:Dictionary[String,String]
派生 * 您的自定义类-正如您所尝试的那样-是有问题的,因为它需要使用new
关键字 * 隐藏 * 基类成员,在PowerShell代码中-至少从PowerShell 7.3.4开始-不完全支持-请参阅GitHub issue #19649。请参见以下示例实现:
输出:
注意事项: