24.06.2017, 20:56 (Dieser Beitrag wurde zuletzt bearbeitet: 24.06.2017, 20:56 von mumpel.)
Hallo!
Wie kann man ADMX-Files auslesen und in eine Tabelle schreiben? Unter ADMX auslesen gibt es zwar einen Code (Powershell), aber der arbeitet extrem fehlerhaft (alles durcheinander und vieles nicht dort wo es sein müsste). Bei MS gibt es zwar "ADMX Guids" als Excceldateien, aber denen fehlt der für mich wichtige Reg-Type, Reg-Value nicht separat (nur mit ganzem Pfad) und ist nur auf englisch. Und der Gruppenrichtlinieneditor (gpedit) ist auch nicht hilfreich, da der auch nicht alles anzeigt was ich wissen möchte/muss.
Der folgende Code wäre zwar ein Ansatz, aber wenn man nicht weiss was man angeben muss... ;)
Code:
Sub Test()
Set xmlDoc = CreateObject("Microsoft.XMLDOM") xmlDoc.Async = "False" xmlDoc.Load ("C:\Windows\PolicyDefinitions\outlk16.admx") Set colNodes = xmlDoc.SelectNodes("/policyDefinitions/policies/policy") For Each objNode In colNodes Debug.Print objNode.Attributes.getNamedItem("name").NodeValue Debug.Print objNode.Attributes.getNamedItem("key").NodeValue Next End Sub
Ausgelesen werden sollen: Beschreibung (PolicyDescription), Titel (PolicyTitel), Typ (Reg-Type), Wertname (Reg-Value), Pfad (Reg-Path)
ich würde gerne etwas positiv zu der Frage beitragen, aber mangels Kenntnissen nur eine kleine Ergänzung:
In den Tiefen des Windows-Systems gibt es die Datei "adsutil.vbs", die ähnlich verschlüsselt/kompeliert ist wie die angesproche ADMX-Datei (lesbar mit dem Gruppenrichtlinien-Editor? nicht in meiner home-edition enthalten. Bisher kannte ich *.vbs Dateien nur als lesbaren VB-Code.
25.06.2017, 12:09 (Dieser Beitrag wurde zuletzt bearbeitet: 25.06.2017, 12:09 von mumpel.)
(25.06.2017, 11:46)Fennek schrieb: (...) die ähnlich verschlüsselt/kompeliert ist wie die angesproche ADMX-Datei (...)
Das ist nicht vergleichbar. Die adsutil.vbs ist verschlüsselt/kompiliert, somit für Menschen nicht lesbar. Die ADMX-Dateien sind XML-Dateien, können also auch von Menschen gelesen werden.
Das Problem hier ist dass die ADMX-Dateien alleine nicht reichen. Man benötigt auch noch die ADML-Dateien, OPAX-Dateien und OPAL-Dateien. Alles zusammen auslesen und in eine Exceldatei oder Access-Datenbank zu schreiben, und zwar ohne das dabei Müll herauskommt (wie der Code auf der von mir verlinkten Seite), ist sehr schwer und für mich unmöglich.
Ich weiss nicht genau welche Werte du haben willst, denn deine Bezeichnungen stimmen nicht überein miet wie das in der Datei genennt wird. Vielleicht hilft das dir:
Code:
Sub M_snb() sn = Filter(Split(StrConv(CreateObject("scripting.filesystemobject").opentextfile("G:\OF\__outlk16.admx").readall, 128), vbLf), "<policy")
For j = 0 To UBound(sn) c00 = "" sp = Split(sn(j), "=") For jj = 1 To UBound(sp) c00 = c00 & vbLf & Split(sp(jj - 1))(UBound(Split(sp(jj - 1)))) & vbTab & IIf(jj = 1 Or jj = 2 Or jj = 6, vbTab, "") & Split(sp(jj))(0) Next MsgBox c00 Next End Sub
Benötigt werden nur die Inhalte von "class", "key" und "valueName". Das funktioniert über "Microsoft.XMLDOM" schon. Das Problem ist dass die zugehörigen Inhalte (PolicyTitle, PolicyDescription, Reg-Type) in den anderen Dateien steht, und hier die Zusammenhänge herzustellen ist schwer. Der PS-Code von "Evgenij" macht das, aber fehlerhaft.
25.06.2017, 18:38 (Dieser Beitrag wurde zuletzt bearbeitet: 25.06.2017, 18:40 von mumpel.)
Den Reg-Typ muss man wohl selber setzen ("Reg-DWord (1)" für "boolean", "REG_Dword" für "decimal". Bei "text" muss man unterscheiden zwischen "normal" und "expandable", um "Reg_SZ" oder "REG_EXPAND_SZ" zu setzen).
"PolicyTitle" und "PolicyDescription" ist das was z.B. in den ADML-Dateien bei "string id" steht.
Das ganze ist aber doch nicht so leicht. Und vielleicht zu komplex für VBA?
Da bleibt wohl doch nur gpedit, und dort "raten" welcher Typ es sein könnte, wird aber leider nicht bei allen Einträgen angezeigt. Bei Office dürfte ohnehin nur REG-DWORD (decimal) und REG_SZ (text) in Frage kommen, "REG_EXPAND-SZ" ist doch eher selten.
Hier mal der Original-PS-Code (der leider einiges falsch macht).
25.06.2017, 21:12 (Dieser Beitrag wurde zuletzt bearbeitet: 25.06.2017, 21:17 von snb.)
Warum hast du das alles nicht vom Anfang an erwähnt ???
So stellt man doch keine Fragen ins Forum? Wir können das alles doch nicht raten ohne Glaskugel ??
Es ist ganz einfach in VBA; aber ohne komplette Infos ist das unmöglich in jeder Sprache. Das sind doch keine vernünfyige Hinweise ?
Z.B. steht in der ADML-Datei bei string Id
Code:
<string id="L_AllowSelectionFloaties">Minisymbolleiste für Auswahl anzeigen</string> <string id="L_Aqua">Aquamarin</string> <string id="L_Arabic">Arabisch</string> <string id="L_Black">Schwarz</string> <string id="L_Blue">Blau</string> <string id="L_DoNotDownloadPhotosFromTheActiveDirectory">Fotos aus Active Directory nicht herunterladen</string> <string id="L_DoNotDownloadPhotosFromTheActiveDirectoryExplain">Diese Richtlinieneinstellung steuert, ob Benutzerfotos (wenn verfügbar) aus Active Directory heruntergeladen werden.
Wenn Sie diese Richtlinieneinstellung aktivieren, werden Fotos nicht heruntergeladen.
Wenn Sie diese Richtlinieneinstellung deaktivieren oder nicht konfigurieren, werden Fotos heruntergeladen.</string> <string id="L_Empty"> </string> <string id="L_Fuchsia">Fuchsie</string> <string id="L_Gray">Grau</string> <string id="L_Greek">Griechisch</string> <string id="L_Green">Grün</string> <string id="L_Hebrew">Hebräisch</string> <string id="L_HideAppsStoreButtonInHomeTabRibbon">Schaltfläche "Office Store" ausblenden</string> <string id="L_HideAppsStoreButtonInHomeTabRibbonExplain">Mit