如何在 Powershell 中定义嵌套对象数组?
How can I define nested object arrays in Powershell?
我有一个我需要识别和删除的密码列表,非开发人员维护此列表的最简单方法是通过类似于以下的声明:
$bannedCiphers = @{
"RC4 128/128"=@{
"IsPermitted" = $false
"AffectedCiphers" = @{
"SSL_RSA_WITH_RC4_128_MD5",
"SSL_RSA_WITH_RC4_128_SHA",
"TLS_RSA_WITH_RC4_128_MD5",
"TLS_RSA_WITH_RC4_128_SHA"
}
}
}
尽管我在为 Powershell 中的嵌套对象创建正确语法时遇到了问题。
创建具有上述嵌套属性的对象的正确方法是什么?
这应该可以解决问题...
$bannedCiphers = @{
"RC4 128/128"= @{
"IsPermitted" = $false
"AffectedCiphers" = @(
"SSL_RSA_WITH_RC4_128_MD5",
"SSL_RSA_WITH_RC4_128_SHA",
"TLS_RSA_WITH_RC4_128_MD5",
"TLS_RSA_WITH_RC4_128_SHA"
)
}
}
此外,$bannedCiphers
哈希表可以很容易地转换为 JSON(并返回)
拉...
$bannedCiphers | ConvertTo-Json
...输出:
{
"RC4 128/128":{
"IsPermitted":false,
"AffectedCiphers":[
"SSL_RSA_WITH_RC4_128_MD5",
"SSL_RSA_WITH_RC4_128_SHA",
"TLS_RSA_WITH_RC4_128_MD5",
"TLS_RSA_WITH_RC4_128_SHA"
]
}
}
如果您的数据以 JSON 格式开始,您可以将其导入 PowerShell,如:
$myJsonData = @"
{
"RC4 128/128":{
"IsPermitted":false,
"AffectedCiphers":[
"SSL_RSA_WITH_RC4_128_MD5",
"SSL_RSA_WITH_RC4_128_SHA",
"TLS_RSA_WITH_RC4_128_MD5",
"TLS_RSA_WITH_RC4_128_SHA"
]
}
}
"@
$myNestedCiphers = $myJsonData | ConvertFrom-Json
我想我会重新post这个答案并使用自定义对象示例进一步阐明我的代码。
没有pscustomobject的原始解决方案:
$bannedCiphers = @{
"RC4 128/128"= @{
"IsPermitted" = $false
"AffectedCiphers" = @(
"SSL_RSA_WITH_RC4_128_MD5",
"SSL_RSA_WITH_RC4_128_SHA",
"TLS_RSA_WITH_RC4_128_MD5",
"TLS_RSA_WITH_RC4_128_SHA"
)
}
"Another RC4"= @{
"IsPermitted" = $false
"AffectedCiphers" = @(
"Cipher1",
"Cipher2",
"Cipher3",
"Cipher4"
)
}
}
此解决方案的输出将产生 $bannedCiphers 输出:
Name Value
---- -----
Another RC4 {IsPermitted, AffectedCiphers}
RC4 128/128 {IsPermitted, AffectedCiphers}
我创建自定义对象的解决方案:
$bannedCiphers2 = [pscustomobject]@{
"RC4 128/128"= @{
"IsPermitted" = $false
"AffectedCiphers" = @(
"SSL_RSA_WITH_RC4_128_MD5",
"SSL_RSA_WITH_RC4_128_SHA",
"TLS_RSA_WITH_RC4_128_MD5",
"TLS_RSA_WITH_RC4_128_SHA"
)
}
"Another RC4"= @{
"IsPermitted" = $false
"AffectedCiphers" = @(
"Cipher1",
"Cipher2",
"Cipher3",
"Cipher4"
)
}
}
我的解决方案的输出将产生 $bannedCiphers2 输出:
RC4 128/128 Another RC4
----------- -----------
{IsPermitted, AffectedCiphers} {IsPermitted, AffectedCiphers}
原文:
$bannedCiphers | Select-Object *
IsReadOnly : False
IsFixedSize : False
IsSynchronized : False
Keys : {Another RC4, RC4 128/128}
Values : {System.Collections.Hashtable, System.Collections.Hashtable}
SyncRoot : System.Object
Count : 2
对比:
$bannedCiphers2 | Select-Object *
RC4 128/128 Another RC4
----------- -----------
{IsPermitted, AffectedCiphers} {IsPermitted, AffectedCiphers}
您还可以在 class 中创建嵌套列表。
class cChild{
[string] $id
[string] $field1
}
class cParent{
[string] $id
[string] $field1
[cChild[]] $child_list
}
一个或多个子 class 可以作为变量 $child_list 嵌套在父中。 类 为从 json.
解析的可接受数据设置边界
我有一个我需要识别和删除的密码列表,非开发人员维护此列表的最简单方法是通过类似于以下的声明:
$bannedCiphers = @{
"RC4 128/128"=@{
"IsPermitted" = $false
"AffectedCiphers" = @{
"SSL_RSA_WITH_RC4_128_MD5",
"SSL_RSA_WITH_RC4_128_SHA",
"TLS_RSA_WITH_RC4_128_MD5",
"TLS_RSA_WITH_RC4_128_SHA"
}
}
}
尽管我在为 Powershell 中的嵌套对象创建正确语法时遇到了问题。
创建具有上述嵌套属性的对象的正确方法是什么?
这应该可以解决问题...
$bannedCiphers = @{
"RC4 128/128"= @{
"IsPermitted" = $false
"AffectedCiphers" = @(
"SSL_RSA_WITH_RC4_128_MD5",
"SSL_RSA_WITH_RC4_128_SHA",
"TLS_RSA_WITH_RC4_128_MD5",
"TLS_RSA_WITH_RC4_128_SHA"
)
}
}
此外,$bannedCiphers
哈希表可以很容易地转换为 JSON(并返回)
拉...
$bannedCiphers | ConvertTo-Json
...输出:
{
"RC4 128/128":{
"IsPermitted":false,
"AffectedCiphers":[
"SSL_RSA_WITH_RC4_128_MD5",
"SSL_RSA_WITH_RC4_128_SHA",
"TLS_RSA_WITH_RC4_128_MD5",
"TLS_RSA_WITH_RC4_128_SHA"
]
}
}
如果您的数据以 JSON 格式开始,您可以将其导入 PowerShell,如:
$myJsonData = @"
{
"RC4 128/128":{
"IsPermitted":false,
"AffectedCiphers":[
"SSL_RSA_WITH_RC4_128_MD5",
"SSL_RSA_WITH_RC4_128_SHA",
"TLS_RSA_WITH_RC4_128_MD5",
"TLS_RSA_WITH_RC4_128_SHA"
]
}
}
"@
$myNestedCiphers = $myJsonData | ConvertFrom-Json
我想我会重新post这个答案并使用自定义对象示例进一步阐明我的代码。
没有pscustomobject的原始解决方案:
$bannedCiphers = @{
"RC4 128/128"= @{
"IsPermitted" = $false
"AffectedCiphers" = @(
"SSL_RSA_WITH_RC4_128_MD5",
"SSL_RSA_WITH_RC4_128_SHA",
"TLS_RSA_WITH_RC4_128_MD5",
"TLS_RSA_WITH_RC4_128_SHA"
)
}
"Another RC4"= @{
"IsPermitted" = $false
"AffectedCiphers" = @(
"Cipher1",
"Cipher2",
"Cipher3",
"Cipher4"
)
}
}
此解决方案的输出将产生 $bannedCiphers 输出:
Name Value
---- -----
Another RC4 {IsPermitted, AffectedCiphers}
RC4 128/128 {IsPermitted, AffectedCiphers}
我创建自定义对象的解决方案:
$bannedCiphers2 = [pscustomobject]@{
"RC4 128/128"= @{
"IsPermitted" = $false
"AffectedCiphers" = @(
"SSL_RSA_WITH_RC4_128_MD5",
"SSL_RSA_WITH_RC4_128_SHA",
"TLS_RSA_WITH_RC4_128_MD5",
"TLS_RSA_WITH_RC4_128_SHA"
)
}
"Another RC4"= @{
"IsPermitted" = $false
"AffectedCiphers" = @(
"Cipher1",
"Cipher2",
"Cipher3",
"Cipher4"
)
}
}
我的解决方案的输出将产生 $bannedCiphers2 输出:
RC4 128/128 Another RC4
----------- -----------
{IsPermitted, AffectedCiphers} {IsPermitted, AffectedCiphers}
原文:
$bannedCiphers | Select-Object *
IsReadOnly : False
IsFixedSize : False
IsSynchronized : False
Keys : {Another RC4, RC4 128/128}
Values : {System.Collections.Hashtable, System.Collections.Hashtable}
SyncRoot : System.Object
Count : 2
对比:
$bannedCiphers2 | Select-Object *
RC4 128/128 Another RC4
----------- -----------
{IsPermitted, AffectedCiphers} {IsPermitted, AffectedCiphers}
您还可以在 class 中创建嵌套列表。
class cChild{
[string] $id
[string] $field1
}
class cParent{
[string] $id
[string] $field1
[cChild[]] $child_list
}
一个或多个子 class 可以作为变量 $child_list 嵌套在父中。 类 为从 json.
解析的可接受数据设置边界