Windows+C#+accès à l'AD et GPO [C#] - C#/.NET managed - Programmation
MarshPosté le 21-11-2011 à 11:43:27
Bonjour à tous.
Je déploie 4 MSI critiques via GPO sur une quarantaine de poste. -1 MSI est un applicatif en C# développer en interne : appli2 -1 MSI est un applicatif en C++ dont le développement/maintien interne va être abandonner dans les mois à venir : appli1 -1 MSI contient des fichiers de configuration pour l'applicatif C++ :conf-appli1 -1 MSI contient des fichiers de configuration pour l'applicatif C# :conf-appli2
Jusqu’à présent pour déployer une nouvelle version, le service exploitation envoyait un mail à toutes les utilisateurs après créations des OU et GPO qui vont bien et demandait à redémarrer tous les postes. Nous avons atteinds les limites de cette procédure; des applicatifs qui devraient être déployés en moins de deux heures mettent maintenant plus d'une journée pour s'installer sur notre parc. Pour vous donner une idée de l'arborescence des OU voici un exemple OU : Agence de Villefranche OU : appli1 V 6.7.0 GPO : Ordi - Attrib Soft - appli1 V6.7.0 GPO : Ordi - Attrib Soft - conf-appli1 V1.3.2 OU : appli2 V 2.3.0 GPO : Ordi - Attrib Soft - appli2 V2.3.0 GPO : Ordi - Attrib Soft - conf-appli2 V1.5.6 Poste : DI0201, DI0202 OU : appli2 V 2.3.1 GPO : Ordi - Attrib Soft - appli2 V2.3.1 GPO : Ordi - Attrib Soft - conf-appli2 V1.5.6 Poste : DI0203, DI0204
Lorsque j' veux installer la nouvelle version de appli2 sur di0201, je le faut passer de l'OU appli2 V 2.3.0 à l'OU appli2 V 2.3.1.
En tant qu'exploitant, on m'a demandé de trouver une solution pour interroger l'AD et les GPO. Après ce bref brief, voici donc ma première question : n'existe t'il pas dans Active Directory une option qui me permette de bloquer l'execution de l'exe installé par le MSI ou l'accès au fichier de configuration tant que celui-ci n'est pas dans la version déployé par la GPO?
Ensuite, j'ai réfléchit sur une solution intégré à l'applicatif qui préviendrait l'utilisateur qu'il doit rebooter. J'ai trouvé quelques sources http://morpheus.developpez.com/addotnet/ADCSharp/ C'est en fait un exemple de récupération d'info de l'active directory pour un utilisateur mais je pense qu'en adaptant cette ligne : Code : Sélectionner tout - Visualiser dans une fenêtre à part
searcher.Filter = "(objectClass=user)";
en Code : Sélectionner tout - Visualiser dans une fenêtre à part
searcher.Filter = "(objectClass=computer)";
cela doit être possible d'interroger la propriété DN (DistinguishName) qui contient l'attribut OU ou encore la propriété OU. Mais que vont contenir ces propriétés ? l'ensemble de l'arborescence des OU. ex pour DI0202 : Agence de Villefranche> appli1 V 6.7.0 > appli2 V 2.3.0 Ou seulement l'OU mère ex pour DI0202 : appli2 V 2.3.0
Je pourrais arrêter là vu que les noms d'OU contiennent la version des applicatif en questions et comparer la version noté dans le nom de l'OU avec la version de l'applicatif actuellement installé sur le poste. Mais je me dit que tant qu'à développer autant rendre tout ceci le plus générique possible. Ainsi, est il possible de savoir les MSI qui sont attribués au GPO, d'aller récupérer les infos de ce MSI (version) et de les comparer avec la version actuellement installé?
Questions subsidiaires : En furetant sur le net, j'ai trouvé 2 façons d'accéder à la base des programmes installés : MSIAPI et WMI. Apparemment, l'accès aux infos via MSI API se fait via le GUID du MSI; ce qui me semble pas très pratique. Comment se fait allés aux info des programmes installés via WMI? Quel est la méthode d'accès la plus souple ?
Merci à tous pour vos réponses.
NB : désolé pour la longueur du post et merci encore aux gens qui auront eu la patience et le courage d'aller jusqu'au bout.
Marsh Posté le 21-11-2011 à 11:43:27
Bonjour à tous.
Je déploie 4 MSI critiques via GPO sur une quarantaine de poste.
-1 MSI est un applicatif en C# développer en interne : appli2
-1 MSI est un applicatif en C++ dont le développement/maintien interne va être abandonner dans les mois à venir : appli1
-1 MSI contient des fichiers de configuration pour l'applicatif C++ :conf-appli1
-1 MSI contient des fichiers de configuration pour l'applicatif C# :conf-appli2
Jusqu’à présent pour déployer une nouvelle version, le service exploitation envoyait un mail à toutes les utilisateurs après créations des OU et GPO qui vont bien et demandait à redémarrer tous les postes. Nous avons atteinds les limites de cette procédure; des applicatifs qui devraient être déployés en moins de deux heures mettent maintenant plus d'une journée pour s'installer sur notre parc.
Pour vous donner une idée de l'arborescence des OU voici un exemple
OU : Agence de Villefranche
OU : appli1 V 6.7.0
GPO : Ordi - Attrib Soft - appli1 V6.7.0
GPO : Ordi - Attrib Soft - conf-appli1 V1.3.2
OU : appli2 V 2.3.0
GPO : Ordi - Attrib Soft - appli2 V2.3.0
GPO : Ordi - Attrib Soft - conf-appli2 V1.5.6
Poste : DI0201, DI0202
OU : appli2 V 2.3.1
GPO : Ordi - Attrib Soft - appli2 V2.3.1
GPO : Ordi - Attrib Soft - conf-appli2 V1.5.6
Poste : DI0203, DI0204
Lorsque j' veux installer la nouvelle version de appli2 sur di0201, je le faut passer de l'OU appli2 V 2.3.0 à l'OU appli2 V 2.3.1.
En tant qu'exploitant, on m'a demandé de trouver une solution pour interroger l'AD et les GPO.
Après ce bref brief, voici donc ma première question : n'existe t'il pas dans Active Directory une option qui me permette de bloquer l'execution de l'exe installé par le MSI ou l'accès au fichier de configuration tant que celui-ci n'est pas dans la version déployé par la GPO?
Ensuite, j'ai réfléchit sur une solution intégré à l'applicatif qui préviendrait l'utilisateur qu'il doit rebooter.
J'ai trouvé quelques sources http://morpheus.developpez.com/addotnet/ADCSharp/
C'est en fait un exemple de récupération d'info de l'active directory pour un utilisateur mais je pense qu'en adaptant cette ligne :
Code :
Sélectionner tout - Visualiser dans une fenêtre à part
searcher.Filter = "(objectClass=user)";
en
Code :
Sélectionner tout - Visualiser dans une fenêtre à part
searcher.Filter = "(objectClass=computer)";
cela doit être possible d'interroger la propriété DN (DistinguishName) qui contient l'attribut OU ou encore la propriété OU.
Mais que vont contenir ces propriétés ? l'ensemble de l'arborescence des OU.
ex pour DI0202 : Agence de Villefranche> appli1 V 6.7.0 > appli2 V 2.3.0
Ou seulement l'OU mère
ex pour DI0202 : appli2 V 2.3.0
Je pourrais arrêter là vu que les noms d'OU contiennent la version des applicatif en questions et comparer la version noté dans le nom de l'OU avec la version de l'applicatif actuellement installé sur le poste.
Mais je me dit que tant qu'à développer autant rendre tout ceci le plus générique possible.
Ainsi, est il possible de savoir les MSI qui sont attribués au GPO, d'aller récupérer les infos de ce MSI (version) et de les comparer avec la version actuellement installé?
Questions subsidiaires :
En furetant sur le net, j'ai trouvé 2 façons d'accéder à la base des programmes installés : MSIAPI et WMI. Apparemment, l'accès aux infos via MSI API se fait via le GUID du MSI; ce qui me semble pas très pratique. Comment se fait allés aux info des programmes installés via WMI? Quel est la méthode d'accès la plus souple ?
Merci à tous pour vos réponses.
NB : désolé pour la longueur du post et merci encore aux gens qui auront eu la patience et le courage d'aller jusqu'au bout.