我正在比較兩個 xml 檔案,這些檔案包含我們要更新為相同的目錄和檔案的記錄。我有替換“=>”和“<=”側指示器的自定義訊息,但在我將物件匯出到的檔案中,我看不到訊息或指示器列。當名稱很長時,側面指示器是否放在其他地方?我只想能夠看到差異來自哪個檔案。這是我在寫入的 txt 檔案中看到的內容。
<Snapshots timestamp="10/19/2021 08:01:20">
<Snapshots timestamp="10/26/2021 09:10:15">
<Directory path="v195" />
<File path="V169\seamless-mob-satinfo-v169" checksum="3857365E7BE8DB0933C57E17B69A250A7DD3A67C45A3F4E095E23797367E1BD6A7AF9F76FFF25B6016B9040C68561A8FF3076F4A195B89BAC74FEE7834106047" />
<File path="v195\seamless-global-satinfo-v195" checksum="E68E8284A28C52EF43C447B446C31306D00FA1487CF9CDD630D39B507A403F18180210BA4B3F28218A501FFC2631BFD3D89A7F5C1A3CD0ABE09EB35DB806DD41" />
<Directory path="A319\Version 7.10.1.58" />
<File path="A319\Version 7.10.1.58\AAL_A319_4Wap_Production_7.10.1.58.tar.xz.enc" checksum="E44A154612CA668A720AB6AA57295832EB6D9B4A296A4410C73F6EF32165E0C3963CFA4922CF4CB4B50DC6F625BDEA0350BA2BFA30B42A274419C3908308C36E" />
<Directory path="A321\Version 7.10.1.58" />
<File path="A321\Version 7.10.1.58\AAL_A321_5Wap_Production_7.10.1.58.tar.xz.enc" checksum="39807D865C2429919A6F8635E82D12AB295313AF86F367EF43B6EC5A39620AE55F3764E5DCDDAF9448087BF8634776DCBBD9DACE7027458820DE432018DC09DC" />
<Directory path="A321NX\Version 7.10.1.58" />
<File path="A321NX\Version 7.10.1.58\AAL_A21N_5Wap_Production_7.10.1.58.tar.xz.enc" checksum="7059A222B8F14ECBE365157CBC24EC5573238A136B86446F3766B53EEF699DC86787C28EB246648866BAA20B28A3D6EFA59B5275CB31145E6E8BF35EAE2630D7" />
<Directory path="B737MAX8\Version 7.10.1.58" />
<File path="B737MAX8\Version 6.5.1.3\AAL_B38M_5Wap_Production_6.5.1.3.tar.xz.enc" checksum="06EB98A7D5993449B09707F730EBEBBA3F8E53731A9C8040D7298924F2427D8A72C14E61D8E43AB7477ECF7CEC4C5D67A1385DF95130D5C9141E6AF048AF42E3" />
<File path="B737MAX8\Version 7.10.1.58\AAL_B38M_5Wap_Production_7.10.1.58.tar.xz.enc" checksum="7E83CF06AC84A16343149492ABDDF1893220AC109B079153A3E6905E4C8512DB22DFFDD08912ECE5B8C2CCF22CFF49814B5F8C97BB0164BF28826E0B918A19B2" />
<Directory path="B737NG\Version 7.10.1.58" />
<File path="B737NG\Version 7.10.1.58\AAL_B738_5Wap_Production_7.10.1.58.tar.xz.enc" checksum="DC4804FC8C030963BFF75B74431B5E680E403EEE92613FE620779692249C49AD58F056A4FCC557DF4B8EFBE6F1EBF165CF130D956428EBE8C20C5CD6EB504835" />
<Directory path="B787\Version 7.5.1.9" />
<File path="B787\Version 7.5.1.9\AAL_B788_6Wap_Production_7.5.1.9.tar.xz.enc" checksum="E68BE59CEA9C557B8AE42A1FA705DA5C5C5ACCE7124F60952DCD689689699A4A61CC162DC52D5AD24A9D867DF439D8204A8B1F1945A87681BB2EC06D17F9D012" />
<File path="Version 7.10.1.79\system_software_load_kit_prod_7.10.1.79.tar" checksum="9E62D7C8EDDC736B9B4E03A1E70599DA3DE536E2A890091E038209B3C28FFAC3F49809FCF57BDCF29A1B09FB8F4332B136C3ADF3B6CFDDC1BEC7982219F43374" />
我正在嘗試使用的代碼是這樣的。
$NAS = Get-Content C:\temp\Gold_Copy.xml
$Snapshot = Get-Content C:\temp\QJ07312433_10_19_2021_snapshot.xml
(Compare-Object -ReferenceObject $NAS -DifferenceObject $Snapshot -PassThru |
ForEach-Object {
if ($_.SideIndicator -eq '=>') {
$_.SideIndicator = 'Not in NAS'
} elseif ($_.SideIndicator -eq '<=') {
$_.SideIndicator = 'Not in Snapshot'
}
$_
}) > C:\temp\diff.txt
uj5u.com熱心網友回復:
您正在使用Compare-Object的-PassThru開關,它將(不同的)輸入物件作為其原始型別傳遞,同時使用實體ETS屬性裝飾它們。.SideIndicatorNoteProperty
使用字串作為輸入物件,這些修飾在許多背景關系中都會被忽略,特別是當您保存到檔案時,例如使用>.
你必須輸出的兩條資訊-字串值和.SideIndicator值-分開。
您可以在一個[pscustomobject]實體中重新打包這些值,這也允許您將側面指示器放入第一個屬性中,如下面的簡化示例所示(請注意,沒有嚴格的理由再使用-PassThru):
Compare-Object ('foo', 'bar') ('foo', 'baz') -PassThru |
ForEach-Object {
[pscustomobject] @{
Source = @{ '=>' = 'Not in NAS'; '<=' = 'Not in snapshot'}[$_.SideIndicator]
Line = $_
}
}
以上產生以下結果:
Source Line
------ ----
Not in NAS baz
Not in snapshot bar
請注意,如果您將其按原樣保存到帶有 的檔案中>,您將在檔案中準確地獲得此用于顯示的表示。
因此,如果您稍后需要以編程方式處理檔案,最好使用結構化文本格式,例如 CSV,例如,通過管道傳輸到Export-Csv.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/337525.html
上一篇:SQL:遞回更新表中的xml列
