我正在嘗試將 PowerShell Here-String 轉換為 Json 檔案。這是我需要轉換的樣本大小。我將需要轉換幾十個可能很長的覆寫檔案,并且手動執行此操作不是我想要完成的。
$a = @'
override['abc_os_config']['local_administrators']['default_administrators']['abc.com'] = %w {}
override['abc_os_config']['local_administrators']['default_administrators']['devad.abc.com'] = %w {}
override['abc_os_config']['local_administrators']['default_administrators']['qad.abc.com'] = %w {}
override['CIS_Remediation_Windows']['security_options']['lanman_authentication_level'] = 3
'@
$b = $a.Replace('override', '').Replace("'", '').Replace('[', '\').Replace(']', '').Replace(' =',':')
$b.Split('\') | ConvertTo-Json -Depth 100
生成什么:
[
"",
"abc_os_config",
"local_administrators",
"default_administrators",
"abc.com: %w {}\n",
"abc_os_config",
"local_administrators",
"default_administrators",
"devad.abc.com: %w {}\n",
"abc_os_config",
"local_administrators",
"default_administrators",
"qad.abc.com: %w {}\n",
"CIS_Remediation_Windows",
"security_options",
"lanman_authentication_level: 3"
]
應該生成什么:
{
"abc_os_config": {
"local_administrators": {
"default_administrators": {
"abc.com": "%w {}",
"devad.abc.com": "%w {}",
"qad.abc.com": "%w {}"
}
}
},
"CIS_Remediation_Windows": {
"security_options": {
"lanman_authentication_level": "3"
}
}
}
uj5u.com熱心網友回復:
Set-TreeValue在對原始資料進行一些預處理后,這是使用我的函式的解決方案:
# Create sample input
$a = @'
override['abc_os_config']['local_administrators']['default_administrators']['abc.com'] = %w {}
override['abc_os_config']['local_administrators']['default_administrators']['devad.abc.com'] = %w {}
override['abc_os_config']['local_administrators']['default_administrators']['qad.abc.com'] = %w {}
override['CIS_Remediation_Windows']['security_options']['lanman_authentication_level'] = 3
'@
# Split input text into an array of lines
$textLines = $a -split '\r?\n'
# Create an ordered hashtable
$result = [ordered] @{}
foreach( $line in $textLines ) {
# Split current line into path and value
$path, $value = $line -split "'\]\s*=\s*"
# Remove unwanted stuff from the path
$path = $path -replace "override\['"
# Add current value to the tree, creating any nested hashtables as necessary
Set-TreeValue -HashTable $result -Path $path -Value $value -PathSeparator "'\]\['"
}
# Specify a large enough depth as default value of 2 would skip deeper nested data
$result | ConvertTo-Json -Depth 99
輸出:
{
"abc_os_config": {
"local_administrators": {
"default_administrators": {
"abc.com": "%w {}",
"devad.abc.com": "%w {}",
"qad.abc.com": "%w {}"
}
}
},
"CIS_Remediation_Windows": {
"security_options": {
"lanman_authentication_level": "3"
}
}
}
如何處理每一行:
例如。走線
override['abc_os_config']['local_administrators']['default_administrators']['abc.com'] = %w {}
- 將當前行拆分為路徑和值:
$path = "override['abc_os_config']['local_administrators']['default_administrators']['abc.com" $value = "%w {}" - 從路徑中洗掉不需要的東西:
$path = "abc_os_config']['local_administrators']['default_administrators']['abc.com" - 在
Set-TreeValue:- 將路徑拆分為組件,
']['用作分隔符(反斜杠轉義,因為函式需要正則運算式)abc_os_config local_administrators default_administrators abc.com - 創建任何嵌套的哈希表并分配值
- 將路徑拆分為組件,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/527922.html
下一篇:HTML介紹
