2017-08-31 312 views
1

我無法理解如何追加或對象更新數據如何在Powershell中添加/更新多深度對象?

所以可以說我有看起來像這樣下面我要在架構添加到對象的架構在運行此命令

後數據的對象
$testdata | Format-Custom -Property * -Depth 6 
 
class PSCustomObject 
{ 
    sessions = 
    [ 
     class PSCustomObject 
     { 
     type = current 
     generated = 2017-08-31T09:02:55.251Z 
     windows = 
      [ 
      class PSCustomObject 
      { 
       id = 770 
       incognito = False 
       tabs = 
       [ 
        class PSCustomObject 
        { 
        active = True 
        id = 771 
        incognito = False 
        title = Subscriptions - YouTube 
        url = https://www.youtube.com/feed/subscriptions 
        windowId = 770 
        } 
        class PSCustomObject 
        { 
        active = False 
        id = 776 
        incognito = False 
        title = Overly Sarcastic Productions - YouTube 
        url = https://www.youtube.com/user/RedEyesTakeWarning/videos 
        windowId = 770 
        } 

       ] 

      } 
      class PSCustomObject 
      { 
       id = 773 
       incognito = False 
       tabs = 
       [ 
        class PSCustomObject 
        { 
        active = False 
        id = 774 
        incognito = False 
        title = Technology - Google News 
        url = https://news.google.com/news/headlines/section/topic/TECHNOLOGY?ned=us&hl=en 
        windowId = 773 
        } 
        class PSCustomObject 
        { 
        active = False 
        id = 806 
        incognito = False 
        title = Microsoft PowerShell Is a Hot Hacker Target, But Its Defenses Are Improving | WIRED 
        url = https://www.wired.com/story/microsoft-powershell-security/ 
        windowId = 773 
        } 
        ... 
       ] 
      } 
      ] 
     } 
    ] 
} 

所以可以說,我想一個新的選項卡添加到窗戶與ID 和新選項卡的冠軍雅虎網址https://yahoo.comID

我怎麼會只是增加只是新進入的標籤,而無需重新創建整個對象?

+0

請退後一步,描述您嘗試解決的實際問題,而不是您認爲的解決方案。 –

+0

那麼通常當你追加說......就像一個數組或哈希,你使用'+ ='或'$ hash.add(something,$ something)',我不知道如何添加一個數據對象特殊的對象...因爲我不能去'($ testdata.sessions.windows.Where({$ _。id -eq 770})。tabs)+ = $ newtabobject',因爲這似乎不起作用,當我嘗試它時,儘管它與其他選項卡對象的設置相同 – Ziabytes

+0

如何創建'$ testdata'對象? – Persistent13

回答

0

所以這不是一個真正的答案,但更像是一個工作。

我自己不明白如何修改Powershell中的對象,就像你想要的那樣。通常一個簡單的+=通常適用於大多數事情。

但是,對於您的問題,似乎試圖添加具有特定ID的SPECIFIC對象中的鍵值對的對象直接向上+=是行不通的,因爲您試圖解析你的方式。你只會得到屬性沒有找到什麼的愚蠢錯誤。

我這樣做,如果它是一個靜態列表和訂單/位置WONT在我更新它之前更改,將獲得我希望添加到的特定對象的INDEX。然後,根據索引,將數據對象/散列的一個簡單的+=執行到您希望修改的對象。

類似如下:

首先,你的鍵值對準備新對象或哈希。

$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爲是

現在,毫不誇張地說,簡單的+=到您想要添加/修改的特定窗口的選項卡。

$testdata.sessions.windows[$position].tabs += $newhash 

如果你感到困惑,用[]東西表示選擇後的名單上的位置,像[0]暫時先等等等等。

這應該是它。

注意:在更新數據之前更新數據以及在修改數據之前更改位置的情況下,此功能不起作用。

我意識到這可能不是你正在尋找,但仍然。

希望這會有所幫助。

+1

非常感謝。你是正確的,它並不是我正在尋找的東西,但它有幫助。所以從某種意義上說,我的問題得到了解決,而不是我喜歡的方式。 – Ziabytes