Need to check fixlet Relevance why it didn't work properly

Hi Team,
This is my first post :slight_smile:

I am creating a fixlet to upgrade Novell Client for Windows.
Revelance does not work properly, it does not show the computers that are subject to the upgrade.
What did I write wrong?
Ty

Relevance 1
((name of it = “WinVista” AND NOT x64 of it) OR (name of it = “WinVista” AND x64 of it) OR (name of it = “Win7” AND NOT x64 of it) OR (name of it = “Win7” AND x64 of it) OR (name of it = “Win8” AND NOT x64 of it) OR (name of it = “Win8” AND x64 of it) OR (name of it = “Win8.1” AND NOT x64 of it) OR (name of it = “Win8.1” AND x64 of it) OR (name of it = “Win10”)) of operating system AND TRUE

Relevance 2
exists (key of keys "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Novell Client for Windows " of ( x32 registry; (if exists x64 registry then x64 registry else nothing) )) whose (value “DisplayName” of it as string starts with “Client for Open Enterprise Server” and value “DisplayVersion” of it as string as version = “2 SP4 (IR13)” as version)

You’d need to test by running the relevance on a client where you expect both clauses to return True. There are several ways to test relevance on the endpoints -

  1. Interactively, by downloading and installing the Fixlet Debugger from software.bigfix.com
  2. Interactively, by using the ‘qna.exe’ in the BES Client directory
  3. Remotely, by using the Fixlet Debugger on your administrative workstation, to do remote evaluation against your target machines. This uses the Client Query API; you’ll be prompted for credentials to connect to the BigFix Server, and for the computer name or computer ID on which you want the relevance to execute. The query is sent to the root server, distributed to the client, and a response is returned to you remotely.
  4. Using the Query app in WebUI.

Looking at your relevance, I suspect the problem is in your second query. First you’ll want to check what results are actually being found on the endpoint, before you try to filter those results or check the existence of your expected result. Try

(values "DisplayName" of it, values "DisplayVersion" of it) of (key of keys "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Novell Client for Windows " of ( x32 registry; (if exists x64 registry then x64 registry else nothing) )

This should provide a list of all of the DisplayName and DisplayVersion values that are found by the registry query.
I’m not familiar with this registry key, so if there are no results returned from this query, I’d start working up from there -

keys "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Novell Client for Windows " of ( x32 registry; (if exists x64 registry then x64 registry else nothing) )

If this also does not return a result, check whether "Novell Client for Windows " exists, is spelled correctly, and does it really have a trailing space on it before closing the doublequotes?

names of keys of keys "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" of ( x32 registry; (if exists x64 registry then x64 registry else nothing) )

Once you find the DisplayName and DisplayVersion values that you’re looking for, there’s also a problem in this conversion

value "DisplayVersion" of it as string as version = "2 SP4 (IR13)" as version

There’s nothing in that string that looks like a version number (which is what the ‘as version’ cast expects, at least two numbers in X.Y format).

q: "2 SP4 (IR13)" as version
E: Singular expression refers to nonexistent object.

You’d either have to do string comparisons on that, instead of version comparisons, or find a different value in the registry that you can treat as a version.

Hi Jason
First of all, thank you for your help.
The DisplayName and DisplayVersion values are fine, i just copied them from the computer on which they are.
I think that problem is here: value “DisplayVersion” of it as string as version = “2 SP4 (IR13)” as version
Maybe is another way to what I want to achieve.
I need to find computers with Novell Client for Windows version “2 SP4 (IR13)” and upgrade this computers to new version of Novell Client for Windows.
Ty
P.S. I have just started working with Big Fix, so please be understanding…

The problem you have is that you are casting a string to a version, where neither the value derived, nor your test value, can be cast to a version

Just change

value "DisplayVersion" of it as string as version = "2 SP4 (IR13)" as version

to

value "DisplayVersion" of it as string = "2 SP4 (IR13)"

Casting a string to a version is very powerful, but there does have to be something that looks like a version in there for it to work

q: "2 SP4 (IR13)" as version
E: Singular expression refers to nonexistent object.

q: operating system
A: Win10 10.0.19044.2130 (21H2)
T: 0.328 ms

q: operating system as string as version
A: 10.0.19044.2130
T: 0.158 ms
1 Like

Hi,
When i change:

value “DisplayVersion” of it as string as version = “2 SP4 (IR13)” as version

to

value “DisplayVersion” of it as string = “2 SP4 (IR13)”

this unfortunately did not help.
Finally i found a solution:

((exists value “DisplayVersion” whose (it as string = “2 SP4 (IR13)”) of key “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Novell Client for Windows” of native registry))

Ty