如何在Powershell中附加/更新多深度对象?
我很难理解如何在对象中追加或更新数据 假设我有一个对象,其中包含的数据类似于下面的模式,在运行此命令后,我想在模式中添加该对象如何在Powershell中附加/更新多深度对象?,powershell,object,append,updating,Powershell,Object,Append,Updating,我很难理解如何在对象中追加或更新数据 假设我有一个对象,其中包含的数据类似于下面的模式,在运行此命令后,我想在模式中添加该对象 $testdata | Format-Custom -Property * -Depth 6 类PSCustomObject { 会话= [ 类PSCustomObject { 类型=电流 生成=2017-08-31T09:02:55.251Z 窗口= [ 类PSCustomObject { id=770 隐姓埋名 制表符= [ 类PSCustomObject { 活
$testdata | Format-Custom -Property * -Depth 6
类PSCustomObject
{
会话=
[
类PSCustomObject
{
类型=电流
生成=2017-08-31T09:02:55.251Z
窗口=
[
类PSCustomObject
{
id=770
隐姓埋名
制表符=
[
类PSCustomObject
{
活动=真
id=771
隐姓埋名
title=订阅-YouTube
url=https://www.youtube.com/feed/subscriptions
windowId=770
}
类PSCustomObject
{
活动=错误
id=776
隐姓埋名
title=过度讽刺的作品-YouTube
url=https://www.youtube.com/user/RedEyesTakeWarning/videos
windowId=770
}
]
}
类PSCustomObject
{
id=773
隐姓埋名
制表符=
[
类PSCustomObject
{
活动=错误
id=774
隐姓埋名
title=技术-谷歌新闻
url=https://news.google.com/news/headlines/section/topic/TECHNOLOGY?ned=us&hl=en
windowId=773
}
类PSCustomObject
{
活动=错误
id=806
隐姓埋名
title=微软PowerShell是黑客的热门目标,但其防御能力正在提高
url=https://www.wired.com/story/microsoft-powershell-security/
windowId=773
}
...
]
}
]
}
]
}
因此,假设我想在窗口中添加一个id为770的新选项卡
新标签的标题将是yahoo,url将是,id将是9001
如何在不必重新创建整个对象的情况下将新条目添加到选项卡中?因此,这不是一个真正的答案,更像是一种变通方法 我自己也不明白如何像您希望的那样修改Powershell中的对象。通常,一个简单的
+=
通常适用于大多数事情
但是,对于您的问题,似乎试图直接在具有特定id的特定对象中添加具有键值对的对象+=
,这是行不通的,因为您正在尝试解析它。您只会得到一个愚蠢的错误,属性找不到或其他什么
如果它是一个静态列表,并且在我更新它之前顺序/位置不会改变,那么我的方法是获取我希望添加到的特定对象的索引。然后对您的数据对象执行一个简单的+=
,根据索引对您希望修改的对象进行哈希运算
例如:
首先,用键值对准备新对象或散列
$newhash = @{}
$newhash.Add("title","yahoo")
$newhash.Add("url", "https://yahoo.com")
$newhash.Add("id", "9001")
接下来,使用.IndexOf()
查找要修改/添加到的对象的索引,如id 770
$position = $testdata.sessions.windows.id.IndexOf(770)
这将告诉您特定id为770的对象在对象列表中的位置
现在,按照字面意思,对要添加/修改的特定窗口的选项卡执行简单的+=
$testdata.sessions.windows[$position].tabs += $newhash
如果您感到困惑,请在表示选择其在列表中的位置的内容之后使用[]
,例如[0]是第一个,依此类推
应该是这样
注意:这不适用于数据在更新之前更新,位置在修改之前更改的情况
我知道这可能不是你想要的,但仍然是
希望这能有所帮助。所以这不是一个真正的答案,但更像是一种变通方法 我自己也不明白如何像您希望的那样修改Powershell中的对象。通常,一个简单的
+=
通常适用于大多数事情
但是,对于您的问题,似乎试图直接在具有特定id的特定对象中添加具有键值对的对象+=
,这是行不通的,因为您正在尝试解析它。您只会得到一个愚蠢的错误,属性找不到或其他什么
如果它是一个静态列表,并且在我更新它之前顺序/位置不会改变,那么我的方法是获取我希望添加到的特定对象的索引。然后对您的数据对象执行一个简单的+=
,根据索引对您希望修改的对象进行哈希运算
例如:
首先,用键值对准备新对象或散列
$newhash = @{}
$newhash.Add("title","yahoo")
$newhash.Add("url", "https://yahoo.com")
$newhash.Add("id", "9001")
接下来,使用.IndexOf()
查找要修改/添加到的对象的索引,如id 770
$position = $testdata.sessions.windows.id.IndexOf(770)
这将告诉您特定id为770的对象在对象列表中的位置
现在,按照字面意思,对要添加/修改的特定窗口的选项卡执行简单的+=
$testdata.sessions.windows[$position].tabs += $newhash
如果您感到困惑,请在指示选择其在列表中的位置的内容之后使用[]
,如[0]