Find PC without software

Hello All!

How can I pull a report for all computers without a specific software installed?

Thanks,

I would recommend using the search function, as there are a lot of threads on this forum detailing how to search for a specific piece of software installed; it would be trivial to invert the relevance, or report on the machines not having the software installed.

Thanks, I would like to see all computers that do not have a specific software not with the software. Will that still be the case?

I’d recommend you re-read the second part of my sentence…

1 Like

The search function will indeed find the query you need. I’m on mobile now so copy/paste is hard but the basic form you want is

names of bes computers whose (not exists (results from bes property "X" of it) whose (value of it contains "Software Package Name") )
  • Is this question relate to Windows, Mac, or Linux?
  • What is the software you want to exclude?
  • Do you just want to run a report?
  • Do you want to install the software if it is missing?
  • Do you want to uninstall the software if it is present?

If you give us more info, then we can help more easily, as there are many ways to approach this or do this, and which is best depends on the desired end result.

If your goal is primarily around reporting, then you will need a property to report on. The property would return something for all computers that have the software in question installed, and something else or nothing for all computers that don’t have that software installed. Then you could write Session Relevance to report on which computers do or do not have that software.


Short of building your own property, you could use a built in one that tries to report on all installed software, for windows, the property is called Installed Applications - Windows in the Application Information (Windows) analysis in the BES Inventory and License site.

This would give you the number of computers reporting into that property:

number of elements of reported computer sets of bes properties "Installed Applications - Windows"

Computers with 7-zip installed:

names of computers of (  results (item 0 of it, item 1 of it) whose(exists value whose(it contains "7-Zip") of it) ) of (bes properties "Installed Applications - Windows", elements of it) of reported computer sets of bes properties "Installed Applications - Windows"

Computers without 7-zip installed, but otherwise report into this property:

number of elements of (item 0 of it - item 1 of it) of (items 2 of it, (  sets of computers of results (item 0 of it, item 1 of it) whose(exists value whose(it contains "7-Zip") of it) ) ) of (bes properties "Installed Applications - Windows", elements of it, it) of reported computer sets of bes properties "Installed Applications - Windows"

This should approximately answer the question “How many Windows computers do not have 7-zip installed?”, assuming that the property Installed Applications - Windows exists and it’s analysis is activated and long running.

Yeah thanks! I’m fairly new to big fix. I need to be able to install the software if its missing. I already have a software task that will push the software needed, I really need to see where its missing from.

What is the software? What OS?

In that case, you should write client relevance that is only true when the software is missing, then put that into the task that installs it, that way the task will only be relevant on machines that don’t have it.

See this example: https://github.com/jgstew/bigfix-content/blob/master/fixlet/Install%20Git%20x64%20-%202.12.2.2%20-%20Windows.bes

Almost all Windows software can be detected using relevance like this:

not exists keys whose(value "DisplayName" of it as string contains "Git") of keys "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall" of (x32 registries; x64 registries)

This is basically written by figuring out what the relevance is for the desired outcome on a system that already has the software, then putting NOT in front. I recommend using the Fixlet Debugger / QnA to learn how to write relevance like this, which is here: https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Tivoli%20Endpoint%20Manager/page/Fixlet%20Debugger%20(QnA)%20Tool/comment/da475ee7-e0a7-408a-a257-072404b4a1bd

It is also helpful to look at other examples on my GitHub or on BigFix.Me

1 Like

ok great! I think that works,

One more question, how can i export all those computers for a report?

Which computers? which software? which OS?

You haven’t answered any of my questions.

This is related to all windows computers, servers and all versions win 7, 8.1, 10, 2008, 2012, 2016 etc. I would like to see all pc’s, servers that do not have our antivirus that we use installed so we know which are missing the antivirus.

I would start with the following relevance against all the OS type,

exists service “AV Service name”

This will let you know, if the antivirus service exists on that machine or not. You could also play around the registries to figure out the same. It all depends on, which logic will be more accurate for your AV.

exists key whose (value “DisplayName” of it as string contains “AV Name”) of keys “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall” of (x64 registries; x32 registries)

1 Like

Can we say “not exist”? I just need to see computers that do not have it installed.

You can use it either way, the original query will result “False” for endpoints without the AV and “True” for endpoints with AV. If you add “not” there, then it works vice versa. But ensure, your AV has an entry in that registry path or you have to make some changes to the query and look for the actual location.

Hope that helps!

1 Like

Yes it does help alot, thank you. I don’t truly understand what you mean by return “false” and “true”. I’m doing this in a SWD task ad would like the applicable computer to be the ones without the software. Does it separate the computers that don’t have it vs have it installed in the same view?

In that case use the “not” before the query and it should work out for you.

As usual, “It Depends”. Going back to @techadmin’s relevance

exists key whose (value “DisplayName” of it as string contains “AV Name”) of keys “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall” of (x64 registries; x32 registries)

If you create this as an Analysis Property, you’ll see the true/false result from every computer as it reports the result.

If you were to use this as Fixlet/Task Relevance, you’ll only get a list of computers that result in True (Relevant, as in, ‘This Task is Relevant to me’). For Fixlet/Task relevance you are correct, you’d want to change the beginning to not exists key whose()

Often you’d do both - create a Fixlet/Task to install or update software, and create an Analysis for your most critical software to get an affirmative ‘Yes this package is present’ result. Or to report the software’s version, or definitions, or some other details.

While a Fixlet/Task relevance must result in a true/false answer, an Analysis Property can return any simple type (string, integer, date, true/false, etc.) A common Analysis Property might return the installed antivirus version via

values "DisplayVersion" of keys whose (value “DisplayName” of it as string contains “AV Name”) of keys “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall” of (x64 registries; x32 registries)

1 Like