2017-08-31 6 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 とと新しいタブのタイトルに新しいタブを追加したいとしましょうヤフーだろうとURLだろう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が+=である特定のオブジェクト内にキー値のペアを持つオブジェクトを追加しようとしているような問題は、あなたの方法を解析しようとしているため動作しません。あなたは唯一の愚かなエラーを得るつもりですプロパティが見つかりませんまたは何か。

私がそれを行う方法は、静的リストであり、更新する前に注文/位置WONTが変更された場合、追加する特定のオブジェクトのインデックスを取得することです。そして、あなたのデータオブジェクト/ハッシュの単純な+=を、インデックスに基づいて変更したいオブジェクトに変換します。次のような

まず、あなたのキーと値のペアを使用して新しいオブジェクトまたはハッシュを準備します。

$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

関連する問題