Archiv für die Kategorie » Windows «

21 | 06 | 2017

PowerShell: Ein schneller Versuch, ADMX zu parsen

Geschrieben von um 19:45 Uhr

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

$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

Enjoy!

Tags » , , «

2

04 | 03 | 2017

PowerShell als Malware-Engine war gestern, jetzt ist Group Policy dran…

Geschrieben von um 20:22 Uhr

Interessante und extrem beunruhigende Beobachtung (leider schon im Feld) von Darren Mar-Elia: https://sdmsoftware.com/group-policy-blog/security-related/group-policy-malware-delivery-system/

Aber letztendlich gilt auch hier, was wir schon immer gepredigt haben: Nicht darauf verlassen, dass der Hersteller es besser weiß, sondern den Zugriff nach Möglichkeit explizit steuern.

Tags » , , «

+

24 | 01 | 2017

USB, Plug’n’Play und das seltsame Startup- und Shutdown-Verhalten

Geschrieben von um 13:22 Uhr

Hatte heute ein seltsames Verhalten eines Windows 7 Embedded Thin Clients (HP T520) erlebt:

  • Client fährt mit eingestecktem USB-Stick hoch (kein Boot-Stick, nur Daten) und sieht ihn beim Hochfahren (Dateien vom Stick werden im Maschinen-Kontext auf den RAMDrive des Thin Clients kopiert, daher weiß man, dass der Stick gelesen wurde)
  • Nach dem Boot wird der User „User“ automatisch angemeldet. Er sieht den Stick im Explorer nicht (das ist normal)
  • Meldet man „User“ ab und den „Administrator“ an, sieht er den Stick auch nicht – weder im Explorer noch im Geräte-Manager!
  • Zieht man den Stick und steckt ihn wieder, erscheint er sofort im Explorer und im Geräte-Manager
  • Solange der Stick steckt, fährt der Thin Client nicht herunter (bleibt im Status „Herunterfahren…“ stecken). Zieht man den Stick, ist der Thin Client binnen weniger Sekunden aus.
  • Mit einem anderen Stick funktioniert alles wie es soll.

Die Ursache war USB3.0 („der andere Stick“ war noch USB2.0). Die Einstellung im BIOS „Force USB2.0“ heilte das Verhalten. Interessanterweise wurde dieses Verhalten mit einer früheren Tranche von T520ern (aus 2014) nicht beobachtet. Go figure.

Tags » , , , «

+