none
SQL Querry Liste aller installieren Software RRS feed

  • 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

    Dienstag, 9. April 2019 13:04

Alle Antworten

  • Hallo Bernhard,

    leg eine Tabelle für die Client-Namen, importiere die Liste und nutze sie mit einen INNER JOIN, um die unerwünschten auszufiltern.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 9. April 2019 14:27
  • 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
    Computer3

    hier stoße ich an meine Grenzen :-)

    LG

    Bernhard


    Mittwoch, 10. April 2019 07:00
  • 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

    Mittwoch, 10. April 2019 07:54
    Moderator
  • 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.

    Mittwoch, 10. April 2019 08:38
  • 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

    Mittwoch, 10. April 2019 08:48
    Moderator
  • "ich möchte die Querry nur auf diese Auswahl Clients begrenzen."

    Somit benötige ich nur diese Namen für eine Einschlussprüfung, da ich den rest ja in anderen tabellen habe.
    Somit reicht ein Exists/in.

    Mittwoch, 10. April 2019 08:50
  • 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

    Mittwoch, 10. April 2019 09:12
    Moderator
  • 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

    Mittwoch, 10. April 2019 10:28
  • 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.

    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....

    Mittwoch, 10. April 2019 12:33
  • 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

    Mittwoch, 10. April 2019 12:56
    Moderator
  • Da ist GENAU der Weg den ich nicht gehen will :-) ich bekomme halt die Info's über die Clients per csv oder txt mit den WST die Untersucht werden sollen... 

    Mittwoch, 10. April 2019 13:32
  • 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

    Mittwoch, 10. April 2019 13:54
    Moderator