Fragensteller
SQL Querry Liste aller installieren Software

Frage
-
Hi zuammen,
ich habe ein sql Querry für sccm das mir alle SW Produkte auflistet die auf den Clients installiert wurden ( SCCM)
hier werden alle >8000 Client gelistet mit der jeweils installierten SW.
Dazu habe ich eine Tcomputer.txt datei mit 1.200 Clients ( HostnameS) und ich möchte die Querry nur auf diese Auswahl Clients begrenzen.
Hat einer von Euch eine Idee? kann mir ggf helfen ?
Danke Bernhard
SELECT v_GS_COMPUTER_SYSTEM.Name0 as 'Computer Name', v_GS_INSTALLED_SOFTWARE.ProductName0 as 'Software Title', v_GS_INSTALLED_SOFTWARE.InstallSource0 as 'Install Source', v_GS_INSTALLED_SOFTWARE.ProductVersion0 as 'Version', v_GS_INSTALLED_SOFTWARE.InstalledLocation0 as 'Installed Location', v_GS_INSTALLED_SOFTWARE.InstallDate0 as 'Install Date' FROM v_GS_COMPUTER_SYSTEM INNER JOIN v_GS_INSTALLED_SOFTWARE ON v_GS_COMPUTER_SYSTEM.ResourceID = v_GS_INSTALLED_SOFTWARE.ResourceID WHERE v_GS_INSTALLED_SOFTWARE.ProductName0 like '%' ORDER BY v_GS_COMPUTER_SYSTEM.Name0
Alle Antworten
-
- Als Antwort vorgeschlagen Christoph MuthmannEditor Mittwoch, 10. April 2019 06:29
- Nicht als Antwort vorgeschlagen Stefan FalzModerator Mittwoch, 10. April 2019 13:57
-
Hallo Olaf,
erste einmal Danke das du auf mein Problem geantwortet hast, aber hier liegt genau mein Problem.
Ich habe eine Tabelle (1 Spalte) dort stehen alle Client Namen, nun soll meine Abfrage zu jedem Rechner der in der Excel Tabelle steht alle SW auflisten ( also das oben aufgeführte Scripte abarbeiten dann den nächsten Client suchen SW auflisten etc..
ComputerName
Computer1
Computer2
Computer3hier stoße ich an meine Grenzen :-)
LG
Bernhard
-
Hallo Bernhard,
SELECT v_GS_COMPUTER_SYSTEM.Name0 AS 'Computer Name', v_GS_INSTALLED_SOFTWARE.ProductName0 AS 'Software Title', v_GS_INSTALLED_SOFTWARE.InstallSource0 AS 'Install Source', v_GS_INSTALLED_SOFTWARE.ProductVersion0 AS 'Version', v_GS_INSTALLED_SOFTWARE.InstalledLocation0 AS 'Installed Location', v_GS_INSTALLED_SOFTWARE.InstallDate0 AS 'Install Date' FROM v_GS_COMPUTER_SYSTEM INNER JOIN v_GS_INSTALLED_SOFTWARE ON v_GS_COMPUTER_SYSTEM.ResourceID = v_GS_INSTALLED_SOFTWARE.ResourceID WHERE v_GS_INSTALLED_SOFTWARE.ProductName0 like '%' AND v_GS_COMPUTER_SYSTEM.Name0 IN ( SELECT ComputerName FROM <DeineTabelle> ) ORDER BY v_GS_COMPUTER_SYSTEM.Name0
Hinzugekommen ist nur diese Zeile:
AND v_GS_COMPUTER_SYSTEM.Name0 IN ( SELECT ComputerName FROM <DeineTabelle> )
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport -
Statt inner Join geht auch:
where ... exists (select * from v_GS_INSTALLED_SOFTWARE where v_GS_COMPUTER_SYSTEM.ResourceID = v_GS_INSTALLED_SOFTWARE.ResourceID)
oder
where ... and ResourceID
in (select ResourceID from v_GS_INSTALLED_SOFTWARE)Es gibt wie immer viele Möglichkeiten, da hier keine Felder aus der Zusatzdatei benötigt werden.
-
Hi,
abgesehen davon, dass das an der Fragestellung etwas vorbeigeht, liest Bernhard natürlich verschiedene Felder aus beiden Tabellen aus. Daher interessehalber die Frage: Nur vertan oder hab ich was übersehen?
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport -
Das ist schon richtig aber die beiden Tabellen, die er bislang drin hat, braucht er über einen Join, da er eben Daten aus beiden Tabellen ausgibt.
Die Liste der Clients steht ja in einer dritten (in seinem Beispiel nicht aufgeführten) Tabelle und die hatte ich in meinem Beispiel über WHERE ... IN ( ... ) eingebunden.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport -
Hi zuzammen,
ich muss sagen Ihr seit alle der Hammer!!!
Wenn man es so liest frag ich mich wieso bin ich nicht selber drauf gekommen. das sieht bei Euch so einfach aus :-)
Ich muss mal wieder mehr meine Nase in die Bücher legen..
Nochmals vielen Dank an ALLE.
Ich probiere es aus und sag euch Bescheid
LG
Bernhard
-
Entschuldigung, den "in select" hatte ich tatsächlich nicht gesehen, bleibt halt nur der Exists, der u.U. mit Key (ähm, Index) schneller als der "in" ist, da je nach Optimierung der "in select" nur 1x oder je Satz ausgeführt wird.
- Bearbeitet Der Suchende Mittwoch, 10. April 2019 11:04
-
Sorry aber die Verknüpfung mit der Excel Tabelle (inhalt der Clients die Untersucht werden sollen) geht noch nicht :-(
Wie gesagt ich referenziere auf ein Excel DoK das lokal auf meine WST liegt (d:\client.xlsx) auf diese Client Liste soll er sich das Script beschränken....
-
Hi,
importier die Excelliste in die Datenbank. Dann ist das erheblich einfacher.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport -
Hallo Bernhard,
nuja, dann halt bspw. so:
WITH ExcelQuery AS ( SELECT * FROM OPENROWSET( 'Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 XML;Database=X:\Ordner\Test.xlsx;HDR=YES', Tabelle1$ ) AS excel ) SELECT * FROM <DeineTabelle> WHERE ID IN ( SELECT ID FROM ExcelQuery )
Wichtig dabei: Für XLSX musst Du ACE verwenden. ACE ist aber im Gegensatz zur JET Engine nicht standardäßig auf dem Rechner installiert, das musst Du also ggfs. noch auf dem Server, der den SQL Server ausführt, nachinstallieren (für 32 und/oder 64 Bit!).
Microsoft Access Database Engine 2016 Redistributable
Falls Du nur CSV und XLS Dateien (bis Excel 2003) hast, geht auch Microsoft.Jet.OLEDB.4.0 im ConnectionString, das gibt es aber nur für 32 Bit.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport