考虑一下json对象:
@"
{
""Logging"": {
""LogLevel"": {
""Default"": ""Warning""
}
},
""AllowedHosts"": ""*"",
""ConnectionStrings"": {
""ConnectionString1"": """",
""ConnectionString2"": """",
""ConnectionString3"": """"
}}";
我想在Powershell中编写一个函数,该函数将使用json并搜索某些属性并返回其路径。例如,如果函数名称为ReturnHierarchyPath(json,propertyName)
当我将其称为ReturnHierarchyPath(json,“ ConnectionString1”)时,返回值应为“ ConnectionStrings.ConnectionString1”
我在C#中实现了此功能,但我想知道在Powershell脚本中是否可行?
这是C#代码的示例:https : //dotnetfiddle.net/N5ccWY
在您的C#示例中,您依靠LINQ进行了一些繁重的工作。
为此,我认为最简单的方法是将JSON转换为Powershell对象,然后在存储构建路径的同时递归评估所有属性。
在[CmdletBinding()]
和冗长的东西都没有neccessary,但我觉得它真的很有用,能够看到执行写这样的函数时如何流动。
我认为这几乎可以满足您的要求:
Function ReturnHierarchy {
[CmdletBinding()]
Param(
[PSObject]$Object,
[string]$PropertyName,
[string[]]$Path = @()
)
if (!$Object) { return }
return $Object.PSObject.Properties.Name | % {
Write-Verbose "Checking property $(($Path + $_) -join ".")"
ReturnHierarchy -Object $Object.$_ -PropertyName $PropertyName -Path ($Path + $_)
if ($_ -like $PropertyName) {
return ($Path + $_) -join "."
}
}
}
$obj = @"
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"ConnectionString1": "",
"ConnectionString2": "",
"ConnectionString3": ""
}
}
"@ | ConvertFrom-Json
ReturnHierarchy -Object $obj -PropertyName "ConnectionString1" -Verbose
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句