Hier ein bißchen Code, um alle Einstellungen aus ADMXen inklusive Registry-Pfad und -Typ zu exportieren. Ein paar Typen könnten noch fehlen …
Achtung! In Zeilen 10 und 11 frißt der Syntax Highlighter den Typ (quadratische Klammer auf)xml(quadratische Klammer zu) unmittelbar vor der runden Klammer. Noch weiß ich nicht, wie ich ihn überredet bekomme, das anzuzeigen. Bis dahin hier der Quelltext zum Download: admx_parser
[sourcecode language=“powershell“]
$language = "de-DE"
$root = "C:\Windows\PolicyDefinitions"
$output = @()
$admx_files = Get-ChildItem $root -Filter "*.admx"
foreach ($admx in $admx_files) {
$admx_file = Split-Path $admx -Leaf
$adml = "C:\Windows\PolicyDefinitions\$($language)\$($admx_file.TrimEnd(‚x‘))l"
if (Test-Path $adml) {
$admx_data =
(Get-Content $admx.FullName)
$adml_data =
(Get-Content $adml -Encoding UTF8)
$adml_strings = $adml_data.policyDefinitionResources.resources.stringTable.GetEnumerator()
$policies = $admx_data.policyDefinitions.policies
foreach ($pol in $policies.policy) {
$dn_string = $pol.displayName.Substring(9, ($pol.displayName.Length – 10))
$et_string = $pol.explainText.Substring(9, ($pol.explainText.Length – 10))
$policy_name = ($adml_strings.Where({$_.id -eq $dn_string})).’#text‘
$adml_strings.Reset()
$policy_desc = ($adml_strings.Where({$_.id -eq $et_string})).’#text‘
$adml_strings.Reset()
if ($pol.elements.HasChildNodes) {
$els = $pol.elements.GetEnumerator()
foreach ($el in $els) {
$reg_value = "$($pol.Key)\$($el.valueName)"
switch ($el.Name) {
‚boolean‘ { $reg_type = ‚REG_DWORD (1)‘ }
‚decimal‘ { $reg_type = ‚REG_DWORD‘ }
‚text‘ {
if ($el.expandable) {
$reg_type = ‚REG_EXPAND_SZ‘
} else {
$reg_type = ‚REG_SZ‘
}
}
‚enum‘ {
$ex = $el.FirstChild.FirstChild.FirstChild.Name
switch ($ex) {
‚decimal‘ { $reg_type = ‚REG_DWORD‘ }
‚text‘ {
if ($el.expandable) {
$reg_type = ‚REG_EXPAND_SZ‘
} else {
$reg_type = ‚REG_SZ‘
}
}
}
}
‚list‘ {
$reg_type = ‚REG_SZ (list)‘
$reg_value = $el.Key
}
default {
Write-Host $el.Name -ForegroundColor Cyan
$reg_type = $el.Name
$reg_value = $el.Key
}
}
$out_item = New-Object PSObject -Property @{‚RegPath‘ = $reg_value; ‚RegType‘ = $reg_type; ‚PolicyTitle‘ = $policy_name; ‚PolicyDescription‘ = $policy_desc; ‚ADMXFile‘ = $admx_file}
$output += $out_item
}
} else {
$reg_value = "$($pol.Key)\$($pol.valueName)"
$reg_type = ‚REG_DWORD (1)‘
$out_item = New-Object PSObject -Property @{‚RegPath‘ = $reg_value; ‚RegType‘ = $reg_type; ‚PolicyTitle‘ = $policy_name; ‚PolicyDescription‘ = $policy_desc; ‚ADMXFile‘ = $admx_file }
$output += $out_item
}
}
} else {
Write-Host "ADML in $language not found: $adml" -ForegroundColor Yellow
}
}
$output | Export-CSV c:\temp\admx.csv -Encoding UTF8[/sourcecode]
Enjoy!
Hallo!
Zum Klammerproblem:
Schon versucht die Klammern mit UNICODE zu maskieren? Dann sollten sie als Text angezeigt werden.
Gruß, René (alias mumpel)
Moin,
ja, habe ich. Im Fließtext klappt es, im Syntax Highlighter nicht.