none
XML - datei mit Powershell bearbeiten und ein Abschnitt löschen RRS feed

  • Frage

  • Hallo Community,

    ich habe ein kleines Problem wo ich keine Lösung finde!

    Ich habe eine XML Datei. wo ich den Abschnitt "PromptedSubscribers" löschen muss.

    ***XML - Datei *****************************************************************

    <?xml version="1.0" encoding="UTF-8"?>
    -<DocItemSet xmlns="urn:schema:Microsoft.Rtc.Management.Xds.AppLayer.2008">
    +<DocItem OwnerPool="ServerID" Owner="ServerID" Signature="SIGID" ItemId="ItemID" Name="urn:confs:UserID">
    +<DocItem OwnerPool="ServerID" Owner="ServerID" Signature="SIGID" ItemId="ItemID" Name="urn:confs:UserID">
    -<DocItem OwnerPool="ServerID" Owner="ServerID" Signature="SIGID" ItemId="ItemID" Name="urn:confs:UserID">
    -<Data>
    -<HomedResource xmlns="http://schemas.microsoft.com/RtcServer/2002/11/dbimpexp" <Infos>
     +<ContactGroups>
     +<Contacts>
     -<PromptedSubscribers>
     <PromptedSubscriber> </PromptedSubscriber>
     <PromptedSubscriber> </PromptedSubscriber>
     <PromptedSubscriber> </PromptedSubscriber>
     <PromptedSubscriber/>
     <PromptedSubscriber> </PromptedSubscriber>
     <PromptedSubscriber> </PromptedSubscriber>
     </PromptedSubscribers>

    +<Containers>
    -<Delegates>
    <Delegate

    *********************************************************************

    hier ist ein Teil das Scriptes

    ## XML datei Bearbeiten
    $xmlDoc = New-Object XML
    $xmlDoc.Load($extractFile)
    $xmlDoc.DocumentElement.DocItem.SyncRoot.SyncRoot.data.homedresource.PromptedSubscribers.PromptedSubscriber
    $xmlDoc.DocumentElement.DocItem.SyncRoot.SyncRoot.data.homedresource.Remove("PromptedSubscribers")

    nach dem Ausführen erhalte ich diese Fehlermeldung

    Ausnahme beim Aufrufen von "Remove" mit 1 Argument(en):  "Die Liste hatte eine feste Größe."
    In Zeile:1 Zeichen:1
    + $xmlDoc.DocumentElement.DocItem.SyncRoot.SyncRoot.data.homedresource. ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : NotSupportedException

    Wie kann ich diesen Abschnitt löschen??

    Gruß

    Stefan

    Montag, 7. Dezember 2015 14:24

Antworten

  •  Hi,
    ich kann oben nicht klar erkennen welchen Pfad der Knoten hat, den du löschen willst, daher ein Beispiel anhand einer generischen XML-Struktur:
     
    <?xml version="1.0" encoding="UTF-16"?>
    <Knoten1>
      <Unterknoten1>
        <Element></Element>
      </Unterknoten1>
      <Unterknoten2>
        <Element></Element>
      </Unterknoten2>
    </Knoten1>
     
    Wenn du hier jetzt Unterknoten1 löschen wollen würdest, geht das so:
     
    $node = $xmlDoc.Knoten1.SelectSingleNode("Unterknoten1")
    $node.ParentNode.RemoveChild($node)
     
    Benutze doch bitte in Zukunft den "Codeblock-Einfügen"-Button für Code und Xml Dateien.
     
     Grüße, Denniver

    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Montag, 7. Dezember 2015 15:31
    Moderator

Alle Antworten

  •  Hi,
    ich kann oben nicht klar erkennen welchen Pfad der Knoten hat, den du löschen willst, daher ein Beispiel anhand einer generischen XML-Struktur:
     
    <?xml version="1.0" encoding="UTF-16"?>
    <Knoten1>
      <Unterknoten1>
        <Element></Element>
      </Unterknoten1>
      <Unterknoten2>
        <Element></Element>
      </Unterknoten2>
    </Knoten1>
     
    Wenn du hier jetzt Unterknoten1 löschen wollen würdest, geht das so:
     
    $node = $xmlDoc.Knoten1.SelectSingleNode("Unterknoten1")
    $node.ParentNode.RemoveChild($node)
     
    Benutze doch bitte in Zukunft den "Codeblock-Einfügen"-Button für Code und Xml Dateien.
     
     Grüße, Denniver

    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Montag, 7. Dezember 2015 15:31
    Moderator
  • Hallo Stefan,

    hier hast du noch ein CookBook an der Hand, welches dir auch noch zukünftlich weiterhelfen kann. Link


    Best regards,

    David das Neves

    Technology Specialist - Consulting Services
    Computacenter AG & Co. oHG - Munich

    Blog    
    Creating Powershell GUIs with XAML? Take a look! PSGUI

    Donnerstag, 10. Dezember 2015 14:31
  • Hallo Denniver,

    leider hat das nicht funktioniert. Ich bekomme immer die FehlerMeldung

    Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
    In Zeile:1 Zeichen:1
    + $node = $xml.DocumentElement.DocItem.SyncRoot.SyncRoot.data.homedreso ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : InvokeMethodOnNull

    das ist die XML-Datei

    $data = @'
    <?xml version="1.0" encoding="utf-8"?>
    <DocItemSet xmlns="urn:schema:Microsoft.Rtc.Management.Xds.AppLayer.2008">
      <DocItem>
        <Data>
          <HomedResource>
            <Conferences>
            </Conferences>
          </HomedResource>
        </Data>
      </DocItem>
      <DocItem>
        <Data>
          <HomedResource>
            <Containers>
              <Container>
                <Publication>
                  <Data></Data>
                </Publication>
              </Container>
            </Containers>
          </HomedResource>
        </Data>
      </DocItem>
      <DocItem>
        <Data>
          <HomedResource>
            <ContactGroups>
              <ContactGroup Number="1" DisplayName="fg==" />
            </ContactGroups>
            <Contacts>
              <Contact>
              </Contact>
            </Contacts>
            <PromptedSubscribers>
              <PromptedSubscriber>
                <Context></Context>
              </PromptedSubscriber>
              <PromptedSubscriber>
                <Context></Context>
              </PromptedSubscriber>
              <PromptedSubscriber>
                <Context></Context>
              </PromptedSubscriber>
            </PromptedSubscribers>
            <Containers>
            </Containers>
            <Delegates>
            </Delegates>
          </HomedResource>
        </Data>
      </DocItem>
      <DocItem>
        <Data>
          <HomedResource>
            <Certificates>
            </Certificates>
          </HomedResource>
        </Data>
      </DocItem>
    </DocItemSet>
    '@

    hier noch die Powershell Befehle

    $xmldoc =  New-Object -TypeName XML
    $xmldoc.LoadXml($data)
    
    $node = $xmldoc.DocumentElement.DocItem.SyncRoot.SyncRoot.data.homedresource.PromptedSubscribers.SelectSingleNode("PromptedSubscriber")
    $node.parentnode.RemoveChild($node)

    Gruß

    Stefan


    Freitag, 11. Dezember 2015 07:17