我正在修改 Chrome 書簽檔案的 powershell 中的腳本。這就是我想做的。
- 讀取檔案并決議 Json(完成)
- 檢查是否添加了某個檔案夾,如果沒有,添加它。
- 再次將物件決議為 Json,并保存一個新的書簽檔案。(我知道怎么做)
這就是我將其轉換為物件的方式:
$BkmrkJson = Get-Content $GoogleBkmrk | ConvertFrom-Json
這就是我向當前“兒童(網址或書簽)”添加新物件的方式。
$BkmrkJson.roots.bookmark_bar.children = New-Object -TypeName psobject -Property @{children=@();date_added="";date_modified="";guid="";id="";name="HV2";type="folder"}
我的主要問題是,當我添加它時,它不尊重屬性的順序。通常的順序是“children, date_added, date_modified, guid, id, name, type”。

我在空白中添加了一些值,因為 Chrome 會自動添加新值,在我添加該值或子項后,我再次將 psobject 決議為 Json。
$MyFinalJson = ConvertTo-Json $BkmrkJson -Depth 9
但是當我創建檔案時,它沒有正確制作。所以我的主要問題是,如何正確地將新物件添加到已決議的物件中,因此當我再次決議它時,可以正確識別新物件。
uj5u.com熱心網友回復:
哈希表(@{ ... }_ _ _ New-Object_ -Property_ _丟失的。
但是,PowerShell v3 提供了用于構造自定義物件((aka ))的語法糖,在這種情況下,條目的順序,即結果屬性的順序保證反映定義順序,即如果您將哈希表轉換為:[pscustomobject][psobject][pscustomobject]
$BkmrkJson.roots.bookmark_bar.children =
[pscustomobject] @{
children=@(); # Note: ";" only strictly needed in *single-line* defs.
date_added="";
date_modified="";
guid="";
id="";
name="Humach V2";
type="folder"
}
請注意,如果您確實想堅持使用哈希表(字典),您可以將哈希表文字“轉換”為[ordered],這也可以保證保留輸入順序;具體來說,這個語法糖創建了一個有序的哈希表,即一個System.Collections.Specialized.OrderedDictionary實體,它也實作了IDictionary介面,但是 (a) 按定義順序列舉其條目,并且 (b) 允許通過位置索引訪問條目,作為使用鍵作為指數; 例如:
$orderedHashTable = [ordered] @{ zebra = 26; quebec = 17; alpha = 1}
$orderedHashTable.Keys # -> 'zebra', 'quebec', 'alpha'
# Access by key.
$orderedHashTable['quebec'] # -> 17
# Access by positional index
$orderedHashTable[0] # -> 26 (key 'zebra')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/489050.html
下一篇:角度數字范圍(打字稿)
