Provisionning de la base MDT

Bonjour à tous,

je suis dans une blogging forme Olympique en ce moment et voici un billet qui me trotte dans la tête depuis quelques temps maintenant.

Si vous travaillez régulièrement avec le WorkBench pour manipuler la base de données, vous avez sans doute pu constater que ce n' est pas un outil taillé pour être utilisé par plusieurs exploitants en même temps. certaines données ne sont pas prises en comptes si elles sont éditées par plusieurs personnes en même temps par exemple. La question d' un outil de provisionning de la base de données est donc posée par les entreprises quasiment à chaque fois que je fais un projet de déploiement de postes de travail.

A l'époque de BDD 2.5, il y avait la possibilité d'implémenter Zero Touch Provisionning, une solution très lourde basée sur BizTalk Server, Sharepoint 2003 (ou WSS) et SQL cela va de soi. ZTP permettait de mettre en place un site SharePoint et fournissait un ensemble de WebParts SharePoint pour permettre de faire du provisionning de la solution Zero Touch Installation.

Voila, le seul problème c'est que non seulement c'etait très lourd a mettre en place mais en plus, ZTP a fait son petit bonhomme de chemin tout seul de son côté et ne fait plus partie du Microsoft Deployment Toolkit (et ne faisait d'ailleurs plus partie du BDD 2007). Il faut donc maintenant mettre en place sa propre solution de provisionning ou attendre System Center Service Manager (ex Service Desk) qui permettra de faire bien plus (a condition que les équipes MDT décident de créer un solution pack).

Bref, entrons maintenant dans la partie technique, après les différentes missions que j'ai pu effectuer, j'ai vu toutes sortes de façon d'implémenter une solution de provisionning (toutes aussi efficaces les unes que les autres) :

  • le formulaire Access
  • Le site web intranet
  • l'application lourde

Voici un petit exemple de ce qu'il est possible de faire en C# en utilisant la DLL du WorkBench MDT.

tout d'abord les spécifications, pour déployer un poste, partons du postulat que dans la base de données nous allons mettre :

  • Un enregistrement "Computers" contenant le numéro de série du poste et son nom dans l'onglet "details" dans la variable computername
  • Nous allons associer plusieurs rôles à cet ordinateur :
    • un rôle contenant le profil metier de la machine (= un ensemble d'application a installer en plus du master)
    • un rôle positionnant la langue (dans le cas d'un master multilangues)
    • un rôle positionnant le poste dans la bonne OU dans AD

concrètement dans la base de données nous allons devoir créer

  • un enregistrement dans la table ComputerIdentity
  • un enregistrement dans la table Settings
  • 3 enregistrements dans la table Settings_Role

voici le bout de code C# que j'ai utilisé pour faire cela

public void ImportSingleComputer(string ComputerName, string SerialNumber, string UserLogin,string RoleMetier, string RoleLocation, string RoleLanguage)
{
   // Créer un enregistrement dans ComputerIdentity
    DataRow CIrow = Manager.DatabaseConnection.CreateRow("ComputerIdentity");
    CIrow["Description"] = ComputerName + "-" + UserLogin;
    CIrow["SerialNumber"] = SerialNumber;
    Manager.DatabaseConnection.Update("ComputerIdentity");
    // Créer un enregistrement dans Settings
    DataRow Srow = Manager.DatabaseConnection.CreateRow("Settings");
    Srow["Type"] = "C";
    Srow["ID"] = CIrow["ID"];
    Srow["ComputerName"] = ComputerName;
    Manager.DatabaseConnection.Update("Settings");
    // Associer le role Metier dans Settings_Roles
    DataRow SRMetier = Manager.DatabaseConnection.CreateRow("Settings_Roles");
    SRMetier["Type"] = "C";
    SRMetier["ID"] = CIrow["ID"];
    SRMetier["Role"] = RoleMetier;
    SRMetier["Sequence"] = 1;
    Manager.DatabaseConnection.Update("Settings_Roles");
    // Associer le role emplacement dans Settings_Roles
    DataRow SRLocation = Manager.DatabaseConnection.CreateRow("Settings_Roles");
    SRLocation["Type"] = "C";
    SRLocation["ID"] = CIrow["ID"];
    SRLocation["Role"] = RoleLocation;
    SRLocation["Sequence"] = 2;
    Manager.DatabaseConnection.Update("Settings_Roles");
    // Associer le role language dans Settings_Roles
    DataRow SRLanguage = Manager.DatabaseConnection.CreateRow("Settings_Roles");
    SRLanguage["Type"] = "C";
    SRLanguage["ID"] = CIrow["ID"];
    SRLanguage["Role"] = RoleLanguage;
    SRLanguage["Sequence"] = 3;
    Manager.DatabaseConnection.Update("Settings_Roles");
}

il ne reste plus qu'a faire un interface Windows Form, un formulaire ASP.Net ou quoi que ce soit d'autre pour récupérer les informations de l'ordinateur puis d'appeller cette fonction.

voila par exemple ce qu'on peut faire en 3 coups de cuiller à pot avec Visual Studio 2008 (lancé mondialement hier :)

image

et le code associé au bouton SUBMIT

private void submit_Click(object sender, EventArgs e)
{
    ImportSingleComputer(tbUser.Text, tbSerialNumber.Text, tbLogin.Text, cbMetier.SelectedItem.ToString(), cbLocation.SelectedItem.ToString(), cbLanguage.SelectedItem.ToString());

}

bien entendu vous pouvez faire exactement la meme chose avec powershell :)