PowerShell’dan XML’e Dönüştürücü
PowerShell nesnelerini veya hashtable’ları yapıştır. Temiz XML geri al.
Bu araç ne işe yarar
Bir PowerShell yapılandırmasını bir XML dosyasına sokman gerektiyse — bir DSC kaynağı için, bir MSBuild görevi için, bir app.config şablonu için ya da bir SoapUI fixture’ı için — bu işin nasıl gittiğini biliyorsundur. Ya ConvertTo-Xml çalıştırıp çirkin <Object Type="..."> sarmalayıcılarını elle temizlersin, ya da Export-CliXml’e uzanıp PowerShell dışında kimsenin okumayı bilmediği bir CLIXML payload alırsın. PowerShell’i buraya yapıştır, normal bir XML parser’ın kabul edeceği iyi biçimli XML’i geri al — <Property Name="..."> gürültüsü yok, CLIXML tip etiketleri yok, sadece veri.
Araç, PowerShell kodunun gerçekten kullandığı şekilleri anlar. Bir PSCustomObject, her özelliğe göre adlandırılmış alt elemanlara sahip bir eleman olur. @{ Name = "Ava" } hashtable’ı aynı şekilde davranır. @(...) ile oluşturulan bir dizi, her öğe için bir alt eleman içeren konteyner elemanına dönüşür. Bir üst nesne içindeki iç içe [PSCustomObject] değerleri, string’leştirilmiş topaklar olarak değil iç içe elemanlar olarak gelir. Boolean’lar ($true, $false) ve sayılar çıktıda kendi yerel tiplerini korur; $null, alan sessizce düşmek yerine şekil tahmin edilebilir kalsın diye boş kendi kendini kapatan bir eleman olur.
Dilin bazı tuhaflıkları, bir insanın bekleyeceği gibi ele alınır. Çift tırnaklı stringler, $var gibi interpolasyon işaretleri genişletilmeden geçer — ne yapıştırdıysan onu birebir koruruz. Here-string’ler (@" ... "@) çok satırlı metin içeriği olarak işlenir. [datetime]"2026-04-21" şeklinde yazılmış tarihler ISO-8601 string’leri olarak yayılır. Tire içeren özellik adlarına güvenli bir eleman adı verilir (PowerShell, bir hashtable içinde "User-Agent" = "..." yazmana izin verir ki bu ham XML tag’ı olarak yasa dışıdır — çıktının parse edilmeye devam etmesi için dönüştürürüz). Şekil, girdiye sadık kalır; XML kullanılabilir kalır.
Nasıl kullanılır
Üç adım. İster tek bir hashtable yapıştır, ister koca bir yapılandırma script’i — aynı şekilde çalışır.
PowerShell’ini yapıştır (ya da örneği dene)
Script’ini soldaki editöre bırak. Tek bir [PSCustomObject]@{...}, iç içe bir hashtable, nesnelerden oluşan bir @(...) dizisi ya da komple bir config bloğu — hepsi olur. Önce gerçekçi bir Order payload’uyla oynamak istersen Örneği Yükle’ye tıkla.
Önceden yorumları ayıklaman, param() bloklarını çıkarman ya da script’i temizlemen gerekmiyor. Elindeki neyse yapıştır. Sadece nesne literallerini okur, gerisini yok sayarız.
Dönüştür’e bas
Yeşil Dönüştür düğmesine tıkla. Araç PowerShell yapısını gezer, her özelliği ve her dizi öğesini korur ve XML’i tek seferde kurar. Çalışırken kısa bir yükleme göstergesi görürsün.
XML’i kopyala
Sağdaki panel, standart uyumlu herhangi bir parser’ın kabul edeceği girintili XML’le dolar. DSC yapılandırmana, MSBuild dosyana ya da gereken başka yere bırak.
Gerçekten işe yaradığı anlar
DSC yapılandırma payload’ları yazmak
Bir düğüm yapılandırmasını tanımlayan bir PowerShell hashtable’ın var ve DSC dışı bir tüketici ya da dokümantasyon için XML versiyonuna ihtiyacın var. Yapıştır, dönüştür, bitti — ConvertTo-Xml çıktısına dadılık etmeye son.
Azure DevOps pipeline değişken dosyaları
Pipeline’lar zaman zaman bir değişken grubunu XML olarak bekler. Zaten baktığın PowerShell hashtable’ını yapıştır, doğrudan <code>variables.xml</code>’e giren XML’i al — elle düzenleme yok.
Windows olay günlüğü payload’larını dışa aktarma
PowerShell’de bir olay kaydını PSCustomObject olarak kurup XML alan bir loglama pipeline’ına göndermen gerektiğinde, özel bir serileştirici yazmaktan seni kurtarır. İç içe şekil değişmeden geçer.
app.config / web.config başlangıç şablonları
Bir PowerShell ayar hashtable’ını, elle düzenleyebileceğin başlangıç noktası olan bir <code>app.config</code>’a çevir. Sıfırdan üretmekten daha hızlı ve anahtarları script’lerinle senkron tutar.
Sık sorulan sorular
Bu, nesneme ConvertTo-Xml çalıştırmaktan ne kadar farklı?
ConvertTo-Xml, her şeyi genel bir <Object Type="..."><Property Name="..."> zarfına sarar — PowerShell’den okunur ama başka her yerde çirkin. Bu araç özellik adlarını gerçek XML elemanları olarak yayar, yani çıktı bir insanın elle yazacağı XML’e benzer. <Property Name> dolaylamacası yok, tip özniteliği kirliliği yok.
Export-CliXml gibi CLIXML üretir mi?
Hayır — ve asıl nokta da bu. Export-CliXml, PowerShell’e geri dönüş için tasarlanmış PowerShell’e özgü bir format olan CLIXML üretir. XML’i PowerShell olmayan bir sisteme (bir Java servisi, bir config okuyucu, XSD ile doğrulanan bir pipeline) teslim etmen gerekiyorsa CLIXML yanlış şekildir. Bu araç onun yerine sade, okunur XML verir.
Komple bir .ps1 dosyası mı yapıştırabilirim yoksa sadece nesne literalleri mi?
Elindeki neyse yapıştır. Script bir değişkene atanmış tek bir nesne literalı içeriyorsa, çıkan o olur. Üst seviyede birden çok hashtable veya PSCustomObject varsa, her biri kendi elemanı olarak yayılır. İşlev gövdeleri, param() blokları, import’lar ve Write-Host satırları yok sayılır — yalnızca veri şekilleri önemlidir.
$null, $true, $false ve boş diziler nasıl ele alınıyor?
$null, alanın yok olması yerine şeklin tutarlı kalması için boş kendi kendini kapatan bir eleman olur. $true ve $false, birebir true ve false string’lerine dönüşür. Boş bir @() boş bir konteyner elemanı olur. Böylece bazı alanlar ayarsız olsa bile downstream araçlar her zaman aynı yapıyı görür.
Geçerli XML adı olmayan hashtable anahtarları — tireler, boşluklar, önce sayı gelenler — ne olacak?
"User-Agent" ya da "2024-Q1" gibi anahtarlar PowerShell hashtable’ında geçerlidir ama ham XML eleman adı olarak geçerli değildir. Bunları güvenli bir biçime yeniden yazarız (anlamlı olduğu yerde orijinalini öznitelik olarak saklarız), böylece çıktı parse edilmeye devam eder. Bu, tüketicin için önemliyse, oluşturulan etiketlere önce bir göz at.
Kodum saklanıyor mu?
Kod dönüştürme için arka uca gönderilir ve saklanmaz — payload’u loglamayız. Script gerçekten hassasa (üretim kimlik bilgileri, iç yollar), herhangi bir çevrimiçi araçta yapacağın gibi yapıştırmadan önce temizle.
İhtiyaç duyabileceğin diğer araçlar
PowerShell’dan XML’e bulmacanın bir parçası. Bu araçlar onunla iyi gider: