gpt4 book ai didi

Powershell:将句号分隔的字符串转换为对象属性

转载 作者:行者123 更新时间:2023-12-02 23:22:52 25 4
gpt4 key购买 nike

我有一个看起来像这样的字符串:

$string = "property1.property2.property3"

我有一个对象,我们会调用 $object .如果我尝试做 $object.$string它没有将它解释为我想要 property3property2property1$object ,它以为我想要 $object."property1.property2.property3" .

显然,使用 split('.')是我需要寻找的地方,但如果我有未知数量的属性,我不知道该怎么做。我不能静态地做:
$split = $string.split('.')
$object.$split[0].$split[1].$split[2]

这不起作用,因为我不知道字符串中有多少属性。那么我如何将它从 n 缝合在一起字符串中的属性数量?

最佳答案

一个简单的作弊方法是使用 Invoke-Expression .它将构建字符串并以与您自己键入的方式相同的方式执行它。

$string = "property1.property2.property3"
Invoke-Expression "`$object.$string"

你需要逃出第一个 $因为我们不希望它与 $string 同时扩展.典型警告:使用 Invoke-Expression 时谨防恶意代码执行因为它可以做任何你想做的事情。

为了避免这种情况,您必须构建一个递归函数,该函数将获取对象中的当前位置并将其传递给下一个面包屑。
Function Get-NestedObject{
param(
# The object we are going to return a propery from
$object,
# The property we are going to return
$property,
# The root object we are starting from.
$rootObject
)
# If the object passed is null then it means we are on the first pass so
# return the $property of the $rootObject.
if($object){
return $object.$property
} else {
return $rootObject.$property
}
}

# The property breadcrumbs
$string = '"Directory Mappings"."SSRS Reports"'
# sp
$delimetedString = $String.Split(".")

$nestedObject = $null

Foreach($breadCrumb in $delimetedString){
$nestedObject = Get-NestedObject $nestedObject $breadcrumb $settings
}

$nestedObject

有一些明显的地方可以更好地强化和记录该功能,但这应该让您了解您可以做什么。

关于Powershell:将句号分隔的字符串转换为对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45174708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com