Zuletzt geändert von Sabrina V. am 2025/06/27 07:37

Zeige letzte Bearbeiter
1 {{aagon.floatingbox/}}
2
3 Im ACMP können Sie schnell und einfach Abfragen erstellen, ohne über den Aufbau und die Struktur der Daten in der Datenbank Bescheid wissen zu müssen. Mithilfe der normalen Abfragen können Sie intuitiv und praktisch eine Abfrage zusammenstellen, indem Sie das Feld eines Namens suchen und es per Drag-and-Drop in das Abfragefenster ziehen. Sie benötigen keine weiteren Angaben darüber, wo beispielsweise die Einträge in der Datenbank gespeichert sind oder wie man diese miteinander in Beziehung setzt, da ACMP diese Arbeiten für Sie erledigt. Diese Herangehensweise ist sehr komfortabel, kommt aber bei komplexeren Abfragewünschen an seine Grenzen. Hier kommen die //erweiterten Abfragen //ins Spiel.
4
5 {{aagon.infobox}}
6 Mit den erweiterten Abfragen können Sie grundsätzlich alle Daten abfragen, die sich in der ACMP-Datenbank befinden. Dafür benötigen Sie sowohl Wissen über das Datenbankschema als auch die Bedeutung der Daten. Zusätzlich ist mehr Wissen über SQL-Strukturen erforderlich.
7 {{/aagon.infobox}}
8
9 Manche Datenbankfelder sind entweder im normalen Modus gar nicht oder nicht einfach miteinander kombinierbar. Der erweiterte Modus unterstützt Sie dabei, diese abzubilden, denn hierbei gilt: alles, was Sie mit SQL machen können, ist auch mit den erweiterten Abfragen möglich.
10 Durch die Abfrage wird eine Vorfilterung der Daten vorgenommen und ein natives SQL geschrieben, welches in der Datenbank ausgeführt wird. Dank diesem Modus können Sie komplexere Abfragen erstellen, bei denen Tabellen miteinander kombiniert werden. Dabei kann es schnell für Einsteiger unübersichtlich und komplex werden. Außerdem besteht die Gefahr, dass man erweiterte Abfragen baut, die viele Ressourcen auf Server- und Consolenseite verbrauchen, wodurch z.B. die Console zur Aufbereitung der Daten längere Zeit in Anspruch nimmt.
11
12 {{aagon.infobox}}
13 Sollten Sie gewisse Felder oder Tabellen für die erweiterte Abfrage ermitteln wollen, können Sie dies über die normale Abfrage und den zugehörigen Filtern machen. Ziehen Sie sich hierzu das zu ermittelnde Feld in den ODER Bereich und klicken Sie mit der rechten Maustaste auf das Feld und öffnen Sie den Punkt Kopieren im Kontextmenü. Hierdurch erhalten Sie die SQL Abfrage für den hinterlegten Filter. Im unteren Bereich der Where-Klausel finden Sie dann den Feld- und Tabellennamen.
14 {{/aagon.infobox}}
15
16 {{figure}}
17 [[image:64_Erweiterte Abfrageverwaltung_Feld- und Tabellennamen ermitteln_762.png||data-xwiki-image-style-alignment="center"]]
18
19 {{figureCaption}}
20 Feld- und Tabellennamen ermitteln
21 {{/figureCaption}}
22 {{/figure}}
23
24 Erstellen Sie eine erweiterte Abfrage, indem Sie in der Abfrageverwaltung in der Ribbonleiste auf //Hinzufügen// klicken. In dem sich öffnenden Wizard müssen Sie einen Zielordner und einen Namen für die Abfrage angeben und die Checkbox //Erweiterte Abfrage erzeugen// auswählen. Die Oberfläche des erweiterten Abfragemodus wechselt. Optional können Sie zusätzlich eine Beschreibung eingeben. Wählen Sie anschließend aus zweierlei Modi, um mit der erweiterten Abfrage zu beginnen: Standard oder Experte:
25
26 * Erweiterte Abfragen - Standard: SELECT mit Assistent (Abfragedesigner zur Erstellung von erweiterten Abfragen)
27 * Erweiterte Abfragen - Experte** **SELECT oder SP für Ergebnismenge (SQL Editor zum Erstellen von SQL Abfragen)
28
29 {{figure}}
30 [[image:64_Erweiterte Abfrageverwaltung_Erweiterter Abfragemodus_775.png||data-xwiki-image-style-alignment="center"]]
31
32 {{figureCaption}}
33 Erweiterter Abfragemodus
34 {{/figureCaption}}
35 {{/figure}}
36
37 = Erweiterte Abfragen - Standard: SELECT mit Assistent =
38
39 Bei diesem Modus hilft der Assistent Ihnen dabei, eine Abfrage zu erstellen. Er unterstützt Sie sogar auch bei der Verknüpfung von Tabellen und bei korrelierenden Abfragen.
40
41 Auf der rechten Seite finden Sie die Datenbanktabellen, die Sie miteinander verknüpfen können, indem Sie die passenden Tabellen in das mittlere Feld (der Hauptablauf des Assistenten) per Drag-and-Drop hineinziehen. Die ausgewählten Felder werden Ihnen im unteren Fenster angezeigt, sowie die folgenden Tabellenfelder, aus denen Sie zusätzliche Informationen ziehen können: Ausdruck, Alias, Sortierrichtung, Aggregat, Gruppierung oder Kriterium.
42 Sollten Sie ein bestehendes Feld aus dem Hauptablauf entfernen wollen, klicken Sie entweder im unteren Fenster auf das Lösch-Icon oder nehmen Sie den Haken aus dem Feldeintrag heraus (siehe nachfolgende Abbildung).
43
44 {{figure}}
45 [[image:64_Erweiterte Abfrageverwaltung_Erweiterte Abfrage mithilfe des Assistenten erstellen_1315.png||data-xwiki-image-style-alignment="center"]]
46
47 {{figureCaption}}
48 Erweiterte Abfrage mithilfe des Assistenten erstellen
49 {{/figureCaption}}
50 {{/figure}}
51
52 {{aagon.infobox}}
53 Beachten Sie, dass Sie bei einem JOIN eine Beziehung zwischen den Tabellen herstellen müssen, indem Sie die Primärschlüssel der Tabellen miteinander verknüpfen. In diesem Beispiel ist es die CLIENTID.
54 {{/aagon.infobox}}
55
56 Wählen Sie die Felder aus der Tabelle und stellen Sie eine Beziehung über den Primär- bzw. Fremdschlüssel her. Dies erreichen Sie, indem Sie ein Feld einer Tabelle auf das zugehörige Feld der anderen Tabelle ziehen (siehe vorherige Abbildung).
57 Auch ist es möglich über das Kontextmenü die Funktion //Alles deaktivieren //auszuwählen, um alle Felder in nur einem Schritt abzuwählen. Die benötigten Felder können Sie anschließend manuell aktivieren und der Tabelle hinzufügen.
58
59 {{figure}}
60 [[image:64_Erweiterte Abfrageverwaltung_Felder deaktivieren_309.png||data-xwiki-image-style-alignment="center"]]
61
62 {{figureCaption}}
63 Felder deaktivieren
64 {{/figureCaption}}
65 {{/figure}}
66
67 {{aagon.infobox}}
68 Diese Vorgehensweise müssen Sie für alle Tabellen vornehmen, die eine Dopplung der Einträge vorsieht (z.B. ClientID oder HistoryID).
69 Die Schlüsselfelder können unterschiedliche Namensbezeichnungen haben. Das bedeutet, dass die Verbindungseinträge in den Spalten unterschiedlich heißen können und trotzdem miteinander kombiniert werden müssen. So kann ein Feld zum Beispiel ClientID oder lediglich mal ID heißen.
70 {{/aagon.infobox}}
71
72 {{aagon.warnungsbox}}
73 Wichtig ist, welche Bedeutung hinter einem Feld steht: ID kann in einer Tabelle ein Client sein, in einer anderen ein Asset und wiederum in einer anderen ein File Repository oder ein Job. Oft, aber nicht immer, sind die Feldbezeichnungen im Schema sprechend, dann werden die IDs passend genannt (z.B. ClientID oder AssetID). Beachten Sie das, wenn Sie die Tabellenfelder miteinander verbinden. Sie bekommen keine Fehlermeldungen, sondern nur Ergebnisse, bei denen Sie nicht immer auf Anhieb erkennen können, dass die Verbindung falsch verbunden ist.
74 {{/aagon.warnungsbox}}
75
76 Die Felder werden in der Reihenfolge, wie sie im SQL-Statement angegeben sind, angezeigt. Sollten Sie die Reihenfolge ändern wollen, müssen Sie diese manuell anpassen.
77
78 {{aagon.infobox}}
79 Die Einträge in der rechten Tabelle sind alphabetisch sortiert. Alle Einträge, die als benutzerdefinierte Felder über die Einstellungen angelegt wurden, wurden mit einer zufällig generierten GUID in der Datenbank gespeichert. Sollten Sie also beispielsweise ein Feld beginnend mit „CF_VAL“ (CustomField_Value) oder „CF_HIS“ (CustomField_History) entdecken, handelt es sich um eines von Ihren angelegten Feldern.
80 {{/aagon.infobox}}
81
82 {{aagon.infobox}}
83 Auch können Sie beispielsweise ein bestehendes SQL-Statement aus dem SQL Server Management Studio herauskopieren und in die erweiterte Abfrage einbauen.
84 {{/aagon.infobox}}
85
86 == Beispiel für eine mit dem Standard-Modus eingefügten erweiterten Abfrage im SQL Tab ==
87
88 ##SELECT SYS_SW_SETUP.NAME, SYS_SW_SETUP.VERSION, COUNT(1) AS AnzahlClients
89 FROM CLT_CLIENTS INNER JOIN
90 CLT_SW_SETUP ON CLT_CLIENTS.CLIENTID = CLT_SW_SETUP.CLIENTID INNER JOIN
91 SYS_SW_SETUP ON CLT_SW_SETUP.SWSETUPID = SYS_SW_SETUP.SWSETUPID
92 WHERE NAME LIKE '%UPDATE%' AND PUBLISHER LIKE '%MICROSOFT%'
93 GROUP BY SYS_SW_SETUP.NAME, SYS_SW_SETUP.VERSION
94 ORDER BY COUNT(1) DESC;##
95
96 Bei dieser Abfrage wird die Anzahl der Clients angezeigt, die nach Software und Versionen gruppiert werden. Hierbei wird jedoch nur die Software angezeigt, die im Namen „Update“ enthält und von Microsoft stammt. Die Einträge sind absteigend nach der Häufigkeit sortiert, also die Häufigsten zuerst.
97
98 = Erweiterte Abfrage - Experte: SELECT oder SP für Ergebnismenge =
99
100 Der erweiterte Standardmodus ist recht flexibel und bietet dabei ein Minimum an Komfort und Kontrolle während der Erstellung einer Abfrage. Hierbei sind die Ausführungen, die eine SQL-Datenbank innerhalb der Abfragetechniken anbieten, begrenzt. Und genau dort kommt der Expertenmodus des erweiterten Abfragemodus ins Spiel.
101 Im Gegensatz zu der Standardansicht der erweiterten Abfrage gibt es in diesem Modus keine zusätzlichen Hilfen. Sie müssen hier die SQL-Statements per Hand eingeben oder auf die Stored Procedures (SP) zurückgreifen, die Sie möglicherweise im MS Management Studio gebaut haben. Stored Procedures sind auf dem SQL Server gespeicherte und benannte SQL-Abfragen, die von einem Datenbank-Client aufgerufen werden können.
102
103 {{aagon.infobox}}
104 Auch können Sie beispielsweise ein bestehendes SQL-Statement aus dem SQL Server Management Studio herauskopieren und in die erweiterte Abfrage einfügen.
105 {{/aagon.infobox}}
106
107 {{aagon.warnungsbox}}
108 Je nachdem, aus welchem Tool Sie ein SQL-Statement herauskopieren, kann der eingefügte Text unsichtbare Steuerzeichen enthalten, die dazu führen, dass beim Ausführen der erweiterten Abfrage unerwartete Fehlermeldungen aufkommen können (zum Beispiel bei Winword oder PDF).
109 {{/aagon.warnungsbox}}
110
111 {{figure}}
112 [[image:64_Erweiterte Abfrageverwaltung_Erweiterte Abfrage erstellen_906.png||data-xwiki-image-style-alignment="center"]]
113
114 {{figureCaption}}
115 Erweiterte Abfrage erstellen
116 {{/figureCaption}}
117 {{/figure}}
118
119 {{aagon.warnungsbox}}
120 Benutzen Sie den Experten-Modus zur Erstellung einer erweiterten Abfrage nur, wenn Sie über ausreichendes Wissen bezüglich SQL-Datenbanken verfügen. Andernfalls könnten Sie unbeabsichtigt Daten löschen, die unwiderruflich aus der Datenbank verschwinden würden. Sie könnten auch Gefahr laufen, Abfragen zu erstellen, die sehr ressourcenintensiv sind und sowohl den SQL Server als auch den ACMP Server in Ihrer Leistung einschränken würden.
121 {{/aagon.warnungsbox}}
122
123 Verwenden Sie nie die von ACMP mitgelieferten Stored Procedures. Diese können sich nach einem Update ändern oder sogar entfernt werden. Wenn Sie diese als Vorbild verwenden wollen, fertigen Sie eine Kopie der Procedure an und verwenden diese in Ihrer Abfrage.
124
125 == Beispiel für eine händisch eingegebene Abfrage (SELECT oder SP für Ergebnismenge) ==
126
127 ##SELECT
128 CLT_CLIENTS_TABLE.COMPUTERNAME,##
129 ## CLT_CLIENTS_TABLE.PRIMARYIP,##
130 ## CLT_SW_SETUP.UNINSTALLPATH##
131 ##WHERE##
132 ## CLT_SW_SETUP.UNINSTALLPATH LIKE 'C:%'##
133 ##FROM CLT_CLIENTS_TABLE,##
134 ## CLT_SW_SETUP##
135
136 Bei dieser Abfrage werden die IP-Adressen und die Computernamen von den Clients ausgeworfen, bei denen der Uninstallpath mit „C:“ beginnt.
137
138 {{aagon.warnungsbox}}
139 Beachten Sie, dass Sie für die Zeitwerte wie InstallDateTime eine Datumskorrektur vornehmen müssen. Dies liegt daran, dass die eingesetzten Programmiersprachen (DELPHI, C# und TSQL) zweierlei Zeitrechnungen verwenden und mit zwei Tagen Versatz arbeiten. Sollten Sie also in Ihrer Abfrage zum Beispiel ein Datumsfeld vom Typ DATETIME oder z.B. FLOAT verwenden wollen, kann es unter Umständen nötig sein, hinter dem Datumsfeld -2 einzufügen:
140 \\CLT_SW_SETUP.INSTALLDATE -2 AS DATETIME
141 {{/aagon.warnungsbox}}
142
143 = Weitere Beispiele für erweiterte Abfragen =
144
145 == Abfrage für einen Report zur Benachrichtung über neue Managed Software Pakete ==
146
147 ##SELECT SoftwareName, DisplayVersion, cast(releasedate -2 as datetime) as Releasedate,
148 Case##
149 ## When TestRing = 0 Then 'Kein Ring'##
150 ## When TestRing = 1 Then 'Testring 1'##
151 ## When TestRing = 2 Then 'Testring 2'##
152 ## When TestRing = 255 Then 'Freigegeben'##
153 ## End as Testring
154 From VW_ManagedSoftware_Versions
155 Where Testring > 0
156 Order by SoftwareName, DisplayVersion##
157
158 Mit dieser Abfrage können Sie sich einen Report erzeugen und sich über mögliche neue Managed Software Pakete informieren lassen. Dabei werden die verschiedenen Testringe namentlich definiert und es werden die Softwarenamen und Versionen gelistet. Sollte es für Ihre Arbeit relevant sein, kann es auch hilfreich sein, dass über diese Abfrage das Veröffentlichungsdatum der Software mit angegeben wird. Im Beispiel können Sie ebenfalls sehen, wie man die SQL-View verwenden kann.
159
160 {{aagon.infobox}}
161 Je nachdem ob der ACMP oder SQL Server das Datum bestimmt, kann es einen Versatz von zwei Tagen geben, was beim Auslesen korrigiert werden muss.
162 {{/aagon.infobox}}
163
164 == Abfrage zur Auflistung einer bestimmten Software bei den Clients ==
165
166 {{aagon.infobox}}
167 Die nachfolgende Abfrage verhält sich bei Ausführung des SQL Statements fast wie eine Funktion einer normalen Abfrage.
168 {{/aagon.infobox}}
169
170 ##SELECT [Computername], [Name], [Version], CLT_CLIENTS.CLIENTID
171 FROM SYS_SW_SETUP##
172 ##LEFT JOIN CLT_SW_SETUP ON CLT_SW_SETUP.SWSETUPID = SYS_SW_SETUP.SWSETUPID##
173 ##INNER JOIN CLT_CLIENTS ON CLT_CLIENTS.CLIENTID = CLT_SW_SETUP.CLIENTID##
174 ##WHERE NAME LIKE ‘Microsoft Office%‘##
175
176 Innerhalb der Abfrage werden die Clients gelistet, die eine bestimmte Software bei sich installiert haben. In dem hier genannten Beispiel ist die Software //Microsoft Office//, gefüllt mit einer Wildcard ~(%), damit nicht nur eine spezifische Version aufgezählt wird. Zusätzlich dazu werden auch die Versionen und die Computernamen der Clients zurückgegeben.
177
178 {{aagon.infobox}}
179 Diese Abfrage enthält unter anderem als Feld eine ClientID. Damit haben Sie in der Console die Möglichkeit, einen oder mehrere Clients im Result der Abfrage zu markieren, um dann mit diesen ausgewählten Clients Aktionen durchzuführen (z.B. ein Client Command darauf auszuführen).
180 {{/aagon.infobox}}
181
182 == Abfrage zur Auflistung aller Client Commands ==
183
184 ##SELECT DISTINCT description
185 FROM SYS_SCRIPTS##
186 ##ORDER BY DESCRIPTION##
187
188 Anhand dieser Abfrage ist es möglich, sich alle Client Commands auflisten zu lassen, die bei Ihnen zur Verfügung stehen. Die Abfrageergebnisse werden alphabetisch sortiert ausgeworfen. Diese Art von Abfrage kann Ihnen beispielsweise dann nützlich sein, wenn Sie das ACMP bereinigen wollen und über eine Liste filtern möchten, welche Commands beibehalten werden sollen.
189
190 Das SQL Statement kann als Grundlage für einen Report verwendet werden.
191
192 == Abfrage zur Auflistung von Client Commands inkl. der Verknüpfungsorte (Container, ACMP Kiosk, Job Collection) ==
193
194 ##Select DISTINCT
195 SYS_SCRIPTS.DESCRIPTION As "Client Command Name"##
196 ## ~-~- ,SYS_SCRIPTS.ScriptVersion As "Version",##
197 ## ~-~- Status = Case SYS_SCRIPTS.State ##
198 ## ~-~- When '1' Then 'Erstellen'##
199 ## ~-~- When '2' Then 'Testen' ##
200 ## ~-~- When '3' Then 'Bereit zur Synchronisation'##
201 ## ~-~- When '4' Then 'Synchronisieren' ##
202 ## ~-~- When '5' Then 'Bereit zur Freigabe'##
203 ## ~-~- When '7' Then 'Freigegeben'##
204 ## ~-~- When '8' Then 'Freigabe zurückgezogen' ##
205 ## ~-~- Else 'Unbekannt' End##
206 ## ~-~-,Interaktiv = Case SYS_SCRIPTS.ALLOWINTERACTIVEUSE When 1 Then 'Ja'
207 Else 'Nein' End##
208 ## ,CLT_CONTAINER_STRUCTURE.Name AS "Container Name"##
209 ## ,CLT_CONTAINER_STRUCTURE.Path AS "Container Pfad"##
210 ## ,VW_SYS_Kiosk_Items.ContentName AS "Kiosk Eintrag"##
211 ## ,SYS_Templates.NAME AS "Job Collection Name"##
212
213 ##FROM SYS_SCRIPTS##
214 ## Left JOIN VW_Script_Container_Jobs ON SYS_SCRIPTS.SCRIPTID = VW_Script_Container_Jobs.ScriptId##
215 ## Left JOIN CLT_CONTAINER_STRUCTURE ON CLT_CONTAINER_STRUCTURE.ContainerID = VW_Script_Container_Jobs.ContainerId##
216 ## Left JOIN VW_SYS_Kiosk_Items ON SYS_SCRIPTS.SCRIPTID = VW_SYS_Kiosk_Items.ContentId##
217 ## Left JOIN SYS_Jobs ON SYS_Jobs.ContentId = SYS_SCRIPTS.SCRIPTID##
218 ## Left JOIN SYS_Templates_Jobs ON SYS_Jobs.Id = SYS_Templates_Jobs.JobId##
219 ## Left JOIN SYS_Templates ON SYS_Templates_Jobs.TemplateId = SYS_Templates.Id##
220 ##ORDER BY "Client Command Name" DESC##
221
222 Mit dieser Abfrage lassen sich alle Client Commands Ihres Systems sowie mögliche Verknüpfungsorte auflisten. Hierbei werden sämtliche Client Commands der verschiedenen Phasen (Status) berücksichtigt (//Erstellen// bis //Freigabe zurückgezogen//). Als mögliche Verknüpfungsorte werden //Container//, der //ACMP Kiosk// und die //Job Collections //verwendet - überall da, wo Sie in der Regel ein Client Command verknüpfen können. Sobald ein Client Command an einem der genannten Orte verwendet oder hinterlegt wurde, wird die Zeile mit dem Namen oder dem Pfad genannt, sodass Sie das Command gezielt wiederfinden oder zuordnen können. Die Orte der Hinterlegungen werden anhand der unterschiedlichen IDs bestimmt. Die Abfrageergebnisse sind nach dem Namen des Client Commands sortiert.
223
224 == Abfrage zur Übersicht über Update Collection installierte Windows Updates ==
225
226 ##;WITH cte AS
227 (
228 Select Items.ComputerName,
229 UpdateName = SubItems.NativeMessage,
230 ErrorMsg = SubItems.NativeErrorMessage,
231 DateTime = Cast(SubItems.EndDate -2 as datetime),
232 LetzteBoot = Cast(os.LastBoot -2 as datetime),
233 SubItems.Result,
234 Items.ClientId,
235 ROW_NUMBER() OVER (PARTITION BY
236 Items.ComputerName,SubItems.NativeMessage,SubItems.NativeErrorMessage
237 ORDER BY SubItems.EndDate DESC) AS rn
238 From SYS_Jobs_Logs_SubItems As SubItems
239 Left Join SYS_Jobs_Logs_Items As Items On (SubItems.ParentExecId =
240 Items.ExecId
241 or (SELECT ParentExecId FROM SYS_Jobs_Logs_SubItems WHERE
242 ChildExecId=SubItems.ParentExecId) = Items.ExecId)
243 left join CLT_CLIENTS on CLT_CLIENTS.CLIENTID = Items.ClientId
244 left join CLT_OPERATINGSYSTEM AS OS ON os.CLIENTID = Items.ClientId
245 Where SubItems.JobKind = 58
246 And (SubItems.NativeMessage Like '_%' Or SubItems.NativeErrorMessage Like
247 '_%')
248 And Items.ComputerName Like '%' And SubItems.LastUpdate >= DateAdd(day,-12, GetDate())
249 and ChildExecId not in (select ParentExecId from SYS_Jobs_Logs_SubItems)
250 Group By Items.ComputerName,
251 SubItems.NativeMessage,
252 SubItems.NativeErrorMessage,
253 SubItems.EndDate,
254 SubItems.Result,
255 os.LastBoot,
256 Items.ClientId
257 )
258 SELECT *
259 FROM cte
260 WHERE rn = 1
261 Order By cte.ComputerName, cte.DateTime Desc##
262
263 Über diese Abfrage können Sie sich Ergebnisse anzeigen lassen, die Updates auflisten, die über eine Windows Update Collection installiert wurden. Dabei durchsucht das Skript alle Ausführungen der Update Collections, die auf den Clients ausgeführt wurden. Hierbei werden die Updates angezeigt, die genau dortrüber installiert wurden.
© Aagon GmbH 2025
Besuchen Sie unsere Aagon-Community