PowerShell kullanarak XML dosyalarında değerler nasıl değiştirilir / oluşturulur?


24

PowerShell kullanarak değiştirmek / XML dosyalarında değerler oluşturmak mümkün olup olmadığını bilmek istiyorum. Temelde ilgileniyorum:

  • XML dosyasındaki değerleri değiştirin veya yoksa bunları oluşturun (yani öğeyi aramam, yoksa yaratmam ve değeri değiştirmem gerekir)
  • Aşağıdaki gibi aynı XML dosyasında farklı XML sözdizimi ile ilgilenin:

Sözdizimi 1:

<Ayarları>
  <setting id = "Konum2" değeri = "Barselona, ​​İspanya" />
  <setting id = "Location2id" value = "zmw: 00000.1.08181" />
</ Ayarları>

Sözdizimi 2:

<Ayarları>
    <Musicplayer>
        <Bindirmeli> 0 </ Bindirmeli>
        <Queuebydefault> false </ queuebydefault>
    </ Musicplayer>
</ Ayarları>

Sözdizimi 3:

<Ayarları>
    <Skinsettings>
        <setting type = "bool" name = "skin.confluence.HomepageHideRecently AddedVideo"> yanlış </setting>
    </ Skinsettings>
</ Ayarları>

Herhangi bir yardım çok takdir edilecektir.

Teşekkürler.

Yanıtlar:


36

PowerShell, XML dosyalarıyla çalışmayı tamamen destekler.

Örneğin, sağladığınız ilk bulanıklaştırmayı alır ve settings.xml"C: \ blah" klasöründe bir XML dosyasına yapıştırırsak , her ayarın kimliğini şu şekilde alabilirsiniz:

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.setting.id

Hangi döndürür:

Location2
Location2id

Ve

$myXML.settings.setting.value

İadeler:

Barcelona, Spain
zmw:00000.1.08181

XML dosya içeriklerini Sözdizimi # 2'de verdiğiniz bulanıklaştırma ile değiştirirsek:

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.musicplayer.crossfade

İadeler:

0

Okumak için crossfadedeğiştirin (2 olarak) ve geri kaydedin:

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.musicplayer.crossfade = 2
$myXML.Save("C:\blah\settings.xml")

Yorumlardan sonra düzenle:

XML öğelerini değiştirmek (Barselona örneğinde olduğu gibi) biraz daha zordur, çünkü içerdiği verileri değil XML yapısını düzenlersiniz.

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.ChildNodes.Item(0).value = "New York, USA"
$myXML.Save("C:\blah\settings.xml")

Kaplama ayarları örneği için aşağıdakini deneyin:

$myXML.settings.skinsettings.setting."#text" = "true"

Bu kaynaklara göz atın:


Cevap için teşekkürler. Önerilerinizi okudum ve Barcelona'dan New York'a ilk blobdaki id = "Location2" nin değerini başarıyla güncellemeye çalışıyorum. Üçüncü damla ile aynı ("gerçek" olarak değişmeye çalışıyor). Bu tür değerleri nasıl bulabilir / değiştirebilirim?
Serieofilo

Aşağıdaki kullanarak değiştirmek istediğiniz düğümü seçmeye çalışıyorum $MyXML.SelectSingleNode("/settings/skinsettings/setting[@type='bool' and @name='skin.confluence.HomepageHideRecentlyAddedVideo']")ama, nasıl "false" değerini "true" olarak değiştirebilirim. Yoksa yoksa böyle bir düğümü nasıl oluşturabilirim?
Serieofilo

1
Düzenlememe göz atın. Biraz daha bilgi ekledim. :)
Ƭᴇcʜιᴇ007
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.