Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WQL] Filtre WMI pour déploiement d'appli via GPO

7 réponses
Avatar
ned
Bonjour à toutes et à tous,

Ce sujet touche plusieurs domaines diffèrent mais je pense qu'il a sa
place dans scripting.

J'ai un petit problème au niveau des filtres WMI pour le déploiement
d'appli via GPO :

Le concept de base est simple : si le filtre donne TRUE alors la GPO
fonctionne et si le filtre renvoi FALSE la GPO ne fonctionne pas.

Voila une petite requêtes qui détecte si l'OS du poste client est Vista :

Select * FROM Win32_OperatingSystem WHERE Version LIKE "6.0.%"

Moi ce que je voudrais faire c'est détecter un service, ici en
l'occurrence Symantec AntiVirus, et s'il est decteté cela signifie qu'il
est déjà installé sur le poste et qu'il ne faut surtout pas le redéployer.

Select * FROM win32_ServiceControl WHERE Name = "Symantec AntiVirus"

Hors la requête donne TRUE (en partant du postulat que SAV est installé
sur le poste) et comme c'est TRUE l'appli va se déployer !

J'ai un peu tout essayé WHERE NOT, IS NULL etc. mais je n'y arrive pas,
qui plus est je suis très loin d'être un codeur.

Merci beaucoup pour toute l'aide que vous pouvez m'apporter, cordialement,

Ned

7 réponses

Avatar
Jacques Barathon [MS]
wrote in message
news:46a85cb1$0$10880$
...
Moi ce que je voudrais faire c'est détecter un service, ici en
l'occurrence Symantec AntiVirus, et s'il est decteté cela signifie qu'il
est déjà installé sur le poste et qu'il ne faut surtout pas le redéployer.

Select * FROM win32_ServiceControl WHERE Name = "Symantec AntiVirus"

Hors la requête donne TRUE (en partant du postulat que SAV est installé
sur le poste) et comme c'est TRUE l'appli va se déployer !

J'ai un peu tout essayé WHERE NOT, IS NULL etc. mais je n'y arrive pas,
qui plus est je suis très loin d'être un codeur.


As-tu essayé l'opérateur <> à la place de = ?

Cela dit, je serais curieux de savoir si cette logique marche. En effet, la
requête va toujours trouver au moins un service qui ne s'appelle pas
"Symantec AntiVirus", donc elle risque de retourner TRUE même si l'AV de
Symantec est installé, non? Mais je peux me tromper...

Jacques

Avatar
Ned
wrote in message
news:46a85cb1$0$10880$
....
Moi ce que je voudrais faire c'est détecter un service, ici en
l'occurrence Symantec AntiVirus, et s'il est decteté cela signifie
qu'il est déjà installé sur le poste et qu'il ne faut surtout pas le
redéployer.

Select * FROM win32_ServiceControl WHERE Name = "Symantec AntiVirus"

Hors la requête donne TRUE (en partant du postulat que SAV est
installé sur le poste) et comme c'est TRUE l'appli va se déployer !

J'ai un peu tout essayé WHERE NOT, IS NULL etc. mais je n'y arrive
pas, qui plus est je suis très loin d'être un codeur.


As-tu essayé l'opérateur <> à la place de = ?

Cela dit, je serais curieux de savoir si cette logique marche. En effet,
la requête va toujours trouver au moins un service qui ne s'appelle pas
"Symantec AntiVirus", donc elle risque de retourner TRUE même si l'AV de
Symantec est installé, non? Mais je peux me tromper...

Jacques



Bonjour Jacques,
Oui j'ai essayé cette solution et comme tu dis, tous les autres svcs
donnent TRUE...
Je me demande si ce que je cherche à faire est possible, pourtant ça me
semble être bon rôle pour un filtre WMI de GPO !
Ned


Avatar
jbongran
Ned wrote:
wrote in message
news:46a85cb1$0$10880$
....
Moi ce que je voudrais faire c'est détecter un service, ici en
l'occurrence Symantec AntiVirus, et s'il est decteté cela signifie
qu'il est déjà installé sur le poste et qu'il ne faut surtout pas le
redéployer.

Select * FROM win32_ServiceControl WHERE Name = "Symantec AntiVirus"

Hors la requête donne TRUE (en partant du postulat que SAV est
installé sur le poste) et comme c'est TRUE l'appli va se déployer !

J'ai un peu tout essayé WHERE NOT, IS NULL etc. mais je n'y arrive
pas, qui plus est je suis très loin d'être un codeur.


As-tu essayé l'opérateur <> à la place de = ?

Cela dit, je serais curieux de savoir si cette logique marche. En
effet, la requête va toujours trouver au moins un service qui ne
s'appelle pas "Symantec AntiVirus", donc elle risque de retourner
TRUE même si l'AV de Symantec est installé, non? Mais je peux me
tromper... Jacques



Bonjour Jacques,
Oui j'ai essayé cette solution et comme tu dis, tous les autres svcs
donnent TRUE...
Je me demande si ce que je cherche à faire est possible, pourtant ça
me semble être bon rôle pour un filtre WMI de GPO !
Ned


Peut être en ajoutant une deuxième condition ?
SELECT * FROM Win32_Service WHERE (Name = "Symantec AntiVirus" And STARTMODE
<> "Auto")
C'est un exemple, on pourrait utiliser d'autres propriétés qui ne soient
jamais à True dans les conditions normales, comme le chemin (PathName)



Avatar
Ned
Ned wrote:
wrote in message
news:46a85cb1$0$10880$
....
Moi ce que je voudrais faire c'est détecter un service, ici en
l'occurrence Symantec AntiVirus, et s'il est decteté cela signifie
qu'il est déjà installé sur le poste et qu'il ne faut surtout pas le
redéployer.

Select * FROM win32_ServiceControl WHERE Name = "Symantec AntiVirus"

Hors la requête donne TRUE (en partant du postulat que SAV est
installé sur le poste) et comme c'est TRUE l'appli va se déployer !

J'ai un peu tout essayé WHERE NOT, IS NULL etc. mais je n'y arrive
pas, qui plus est je suis très loin d'être un codeur.
As-tu essayé l'opérateur <> à la place de = ?


Cela dit, je serais curieux de savoir si cette logique marche. En
effet, la requête va toujours trouver au moins un service qui ne
s'appelle pas "Symantec AntiVirus", donc elle risque de retourner
TRUE même si l'AV de Symantec est installé, non? Mais je peux me
tromper... Jacques

Bonjour Jacques,

Oui j'ai essayé cette solution et comme tu dis, tous les autres svcs
donnent TRUE...
Je me demande si ce que je cherche à faire est possible, pourtant ça
me semble être bon rôle pour un filtre WMI de GPO !
Ned


Peut être en ajoutant une deuxième condition ?
SELECT * FROM Win32_Service WHERE (Name = "Symantec AntiVirus" And STARTMODE
<> "Auto")
C'est un exemple, on pourrait utiliser d'autres propriétés qui ne soient
jamais à True dans les conditions normales, comme le chemin (PathName)


Merci pour ta réponse mais on reste toujours dans la même configuration,

si tes deux conditions sont TRUE on obtiendra un TRUE et si je force le
FALSE je risque de retrouver l'appli ecrasée par la GPO...
Ned




Avatar
Gilles LAURENT [MVP]
"" a écrit dans le message de
news:46a85cb1$0$10880$
| Bonjour à toutes et à tous,

Bonjour,

[...]
| Moi ce que je voudrais faire c'est détecter un service, ici en
| l'occurrence Symantec AntiVirus, et s'il est decteté cela signifie
| qu'il est déjà installé sur le poste et qu'il ne faut surtout pas le
| redéployer.
|
| Select * FROM win32_ServiceControl WHERE Name = "Symantec AntiVirus"
|
| Hors la requête donne TRUE (en partant du postulat que SAV est
| installé sur le poste) et comme c'est TRUE l'appli va se déployer !

Pas possible avec un filtre WMI dans ce cas car les clauses wql WHERE et
WHERE NOT retourneront toujours la valeur True. Une solution de
contournement consiste à utiliser un script de démarrage (gpo) et ainsi
exécuter un script VBScript permettant de vérifier la présence du
service Symantec et si celui-ci n'est pas présent alors installer le
produit. Le package d'installation sera disponible sur une ressource
partagée accessible en lecture pour le compte LocalSystem.

--
Gilles LAURENT [MVP]
http://glsft.free.fr
Avatar
jbongran
Ned wrote:
Ned wrote:
wrote in message
news:46a85cb1$0$10880$
....
Moi ce que je voudrais faire c'est détecter un service, ici en
l'occurrence Symantec AntiVirus, et s'il est decteté cela signifie
qu'il est déjà installé sur le poste et qu'il ne faut surtout pas
le redéployer.

Select * FROM win32_ServiceControl WHERE Name = "Symantec
AntiVirus" Hors la requête donne TRUE (en partant du postulat que SAV
est
installé sur le poste) et comme c'est TRUE l'appli va se déployer
! J'ai un peu tout essayé WHERE NOT, IS NULL etc. mais je n'y arrive
pas, qui plus est je suis très loin d'être un codeur.
As-tu essayé l'opérateur <> à la place de = ?


Cela dit, je serais curieux de savoir si cette logique marche. En
effet, la requête va toujours trouver au moins un service qui ne
s'appelle pas "Symantec AntiVirus", donc elle risque de retourner
TRUE même si l'AV de Symantec est installé, non? Mais je peux me
tromper... Jacques

Bonjour Jacques,

Oui j'ai essayé cette solution et comme tu dis, tous les autres svcs
donnent TRUE...
Je me demande si ce que je cherche à faire est possible, pourtant ça
me semble être bon rôle pour un filtre WMI de GPO !
Ned


Peut être en ajoutant une deuxième condition ?
SELECT * FROM Win32_Service WHERE (Name = "Symantec AntiVirus" And
STARTMODE <> "Auto")
C'est un exemple, on pourrait utiliser d'autres propriétés qui ne
soient jamais à True dans les conditions normales, comme le chemin
(PathName)
Merci pour ta réponse mais on reste toujours dans la même

configuration, si tes deux conditions sont TRUE on obtiendra un TRUE
et si je force le FALSE je risque de retrouver l'appli ecrasée par la
GPO... Ned


Oulah, mea culpa, c'est du grand n'importe quoi ce que j'ai écrit !
Bon la mauvaise nouvelle c'est que cela n'a pas l'air possible, puisque je
n'ai pas trouvé d'opérateur de négation pour le wql.
http://msdn2.microsoft.com/en-us/library/Aa394605.aspx
Ce que semble confirmer cette discussion:
http://grouppolicy.editme.com/WMIFilters





Avatar
Ned
Ned wrote:
Ned wrote:
wrote in message
news:46a85cb1$0$10880$
....
Moi ce que je voudrais faire c'est détecter un service, ici en
l'occurrence Symantec AntiVirus, et s'il est decteté cela signifie
qu'il est déjà installé sur le poste et qu'il ne faut surtout pas
le redéployer.

Select * FROM win32_ServiceControl WHERE Name = "Symantec
AntiVirus" Hors la requête donne TRUE (en partant du postulat que SAV
est
installé sur le poste) et comme c'est TRUE l'appli va se déployer
! J'ai un peu tout essayé WHERE NOT, IS NULL etc. mais je n'y arrive
pas, qui plus est je suis très loin d'être un codeur.
As-tu essayé l'opérateur <> à la place de = ?


Cela dit, je serais curieux de savoir si cette logique marche. En
effet, la requête va toujours trouver au moins un service qui ne
s'appelle pas "Symantec AntiVirus", donc elle risque de retourner
TRUE même si l'AV de Symantec est installé, non? Mais je peux me
tromper... Jacques

Bonjour Jacques,

Oui j'ai essayé cette solution et comme tu dis, tous les autres svcs
donnent TRUE...
Je me demande si ce que je cherche à faire est possible, pourtant ça
me semble être bon rôle pour un filtre WMI de GPO !
Ned
Peut être en ajoutant une deuxième condition ?

SELECT * FROM Win32_Service WHERE (Name = "Symantec AntiVirus" And
STARTMODE <> "Auto")
C'est un exemple, on pourrait utiliser d'autres propriétés qui ne
soient jamais à True dans les conditions normales, comme le chemin
(PathName)
Merci pour ta réponse mais on reste toujours dans la même

configuration, si tes deux conditions sont TRUE on obtiendra un TRUE
et si je force le FALSE je risque de retrouver l'appli ecrasée par la
GPO... Ned


Oulah, mea culpa, c'est du grand n'importe quoi ce que j'ai écrit !
Bon la mauvaise nouvelle c'est que cela n'a pas l'air possible, puisque je
n'ai pas trouvé d'opérateur de négation pour le wql.
http://msdn2.microsoft.com/en-us/library/Aa394605.aspx
Ce que semble confirmer cette discussion:
http://grouppolicy.editme.com/WMIFilters


Ca me semble effectivement être la seule solution logique !

Quel dommage cependant, cette condition me semble tout à fait appropriée !
Merci beaucoup et bonne journée !
Ned