MDT – Techniques de gestion de la base de données
Sommaire
I. Présentation
Pour l'installation de la base de données MDT, vous pouvez vous reporter à mon tutoriel sur la gestion des applications. Vous y trouverez une procédure de mise en œuvre d'une base de données MDT.
Il se peut que vous rencontriez quelques difficultés lors de la déclaration de l'instance SQL, avec un symptôme du genre "impossible de trouver l'instance SQL". Ce phénomène peut être lié au fait que le service "SQL Browser" ne soit pas démarré. Pour y remédier, démarrez le programme "SQL Server Configuration Manager" puis développez l'arborescence "Configuration réseau SQL Server ... Protocoles pour SQLEXPRESS" (ou le nom de votre instance installée pour les besoins de MDT). Dans le cadre de droite, vérifiez que le protocole "Canaux nommés" ("Named Pipes") est bien activé, conformément au choix de votre configuration MDT.
Dans le cas contraire, modifiez ce réglage via le menu contextuel ou les propriétés du protocole.
Sélectionnez ensuite le nœud "Services SQL Server" puis accédez aux propriétés du service "SQL Server Browser". Vérifiez que le service est bien démarré ou cliquez sur le bouton dans le cas contraire.
Sélectionnez l'onglet "Service" puis choisissez "Automatique" dans le champ "Mode de démarrage".
Cliquez sur "Appliquer" puis "OK". À ce stade, la déclaration de votre base de données MDT ne devrait plus poser de problème (du moins, en local...)
Pour votre gouverne, sachez que depuis MDT 2012, il est possible de créer une base de données et l'associer à MDT en ligne de commande Powershell, voici un exemple :
# Importer un module PowerShell Import-Module "C:\Program Files\Microsoft Deployment Toolkit\Bin\MicrosoftDeploymentToolkit.psd1" # Créer un nouveau lecteur New-PSDrive -Name DS002 -PSProvider mdtprovider -Root E:\DeploymentShare # Créer une base de données New-MDTDatabase -SQLServer 'WDS-MDT' -Database 'MDT02' -Instance 'SQLExpress' -Path 'DS002:'
Pour afficher les commandes disponibles
Get-Command -Module MicrosoftDeploymentToolkit
Note : Avec MDT2010, le module n'existait pas et il fallait charger l'extension spécifique comme suit : "Add-PSSnapIn Microsoft.BDD.PSSnapIn"
Toutefois, à ma connaissance, il n’existe pas de technique pour configurer en ligne de commande, les règles de gestion de la base de données que nous allons évoquer ci-après. N'hésitez pas à commenter cet article si vous avez une piste à ce sujet. Pour les plus intéressés sur la configuration automatisée de MDT, je vous recommande la lecture de cet article de Rens Hollanders.
II. Rappels - Gestion de la base de données MDT
Pour ceux qui n’auraient jamais eu l'occasion d'utiliser une base de données au sein de MDT, voici quelques éléments de présentation.
A. Présentation
Dans la console MDT, sont regroupées sous la rubrique "Database", 4 tables (ou plus exactement les vues proposées) suivantes :
Ces vues permettent d'afficher les champs principaux sous la forme d'un tableau :
Vues | Nom des champs affichés (Colonnes) | Propriétés/Variable MDT |
Computers | ID, Description, MAC Address, Asset Tag, Serial Number, UUID | AssetTag, UUID, SerialNumber, MACAddress |
Roles | ID, Role | Role |
Location | ID, Location | DefaultGateway |
Make and Model | ID, Make, Model | Make, Model |
Chaque enregistrement (ou entrée) dispose d'un identifiant unique "ID" logique (ou clé primaire) incrémenté pour chaque nouvel ajout dans la base de données.
La principale vue "Computers" permet de gérer les ordinateurs en leur affectant un identifiant "matériel" unique qui peut être :
identifiant | Champs exposés (Colonnes) |
MAC Address | L'adresse MAC ou adresse physique de carte réseau (Probablement, la plus utilisée ou la plus pratique du fait qu'elle est généralement inventoriée et connu dans la plupart des entreprises) |
Serial Number | Le numéro de série de l'ordinateur. Le format n'est pas normalisé et varie d'un constructeur à l'autre |
Asset Tag | Littéralement "le numéro d'inventaire" du fabricant. Ce numéro peut être mentionné par le fournisseur sur une étiquette complétée d'un code-barre et apposée sur le boitier du PC (L'option peut être payante). |
UUID | Ce numéro correspond à l'identifiant de la carte mère. Selon le même principe qu'une adresse MAC, il est unique et normalisé sous une forme hexadécimale : DA812F8C-2F4F-AE6E-F480-003E8CFDE2B6Vous pouvez l'afficher en ligne de commande "wmic csproduct get uuid" |
B. Rattacher une base existante
Si vous désirez rattacher une base existante, vous pouvez utiliser le menu "Advanced Configuration … Database … New Database" de la console MDT.
Après avoir renseigné le nom du serveur et de l'instance SQL, cliquez sur le bouton "Next".
Au niveau de la dernière option "Use an existing database that already contains the required tables and views", sélectionnez la base désirée qui doit apparaitre dans la liste déroulante.
Vous n'avez pas besoin de renseigner la ressource partagée si vous avez installé la base SQL sur le serveur MDT.
Cette directive facultative (SQLShare = ) est censée préciser le dossier partagé sur le serveur SQL. Bien que distinct de la directive "SLshare", qui désigne la ressource partagée destinée à recevoir les journaux (logs), on peut affecter la même valeur à ces 2 propriétés dès lors que l'instance SQL et le MDT sont sur le même serveur.
Cliquez 2 fois sur le bouton "Next" puis sur "Finish".
Attention, le fait de raccrocher une base existante à votre MDT, ne met pas à jour le fichier de configuration "CustomSettings.ini". Pour cela, vous devrez utiliser le menu "Advanced Configuration … Database … Configure Database Rules" de la console MDT l'opération suivante, en ayant préalablement sauvegardé votre fichier de configuration.
Pour configurer les différentes règles de gestion des requêtes, vous pouvez vous reporter à mon tutoriel sur la gestion des applications
C. Créer / Afficher un enregistrement
Pour créer un nouvel enregistrement, sélectionnez la vue désirée, comme par exemple "Computers", puis cliquez sur le menu "Action … New" ou le menu contextuel.
L'adresse MAC doit être saisie avec le séparateur d'octet ":" et les lettres en majuscule. Notez que cette interface ne vérifie pas les doublons. Au besoin, reportez-vous au chapitre "Compléments" ci-après.
Astuce : Vous pouvez remarquer que le champ "description" est optionnel. Toutefois, j'ai personnellement pris l'habitude d'y renseigner le nom de l'ordinateur (OSDComputerName) afin de visualiser directement cette information sans recourir à l'onglet de détail.
Le module Powershell MDTDB présenté plus loin, permet de renseigner une description lors de la création d'une nouvelle entrée "New-MDTComputer" mais présente le défaut de ne pas permettre la modification de ce champ par la suite "Set-MDTComputer". Au besoin, reportez-vous au chapitre "Compléments" ci-après.
Après avoir saisi les informations requises, vous pouvez cliquer sur le bouton "Appliquer" pour créer l'enregistrement.
Lors de l’ouverture d’un enregistrement, vous disposez de plusieurs onglets, variables selon de type de vue choisi. Pour ne pas trop charger cette présentation, je n'évoquerais que l'onglet "Detail" (de la vue "Computers").
Sous cet onglet, vous pouvez consulter, et renseigner le cas échéant, toutes les propriétés (variables MDT) de votre choix. Celles-ci sont classées par thèmes mis en exergue par des titres sur fond bleu.
Titre | |
ADDS Settings | |
Bitlocker | |
ConfigMgr 2012 OSD | |
DHCP Server Settings | |
Disk Settings | |
Display Settings | |
DNS Server Settings | |
Domain and Workgroup | |
Identification | |
Miscellaneous | |
NIC Settings | |
OS Roles | |
Regional and Locale Settings | |
User Data | |
Wizard Control | |
Custom |
Il y a potentiellement plus de 200 variables disponibles !...
(Get-MDTComputer |get-member -MemberType Properties ).count
En fonction de vos outils d'inventaire logiciels et matériel tel que SCCM, MAPT ou ACT, ou d'outils tiers tels que GLPI, OCS Inventory ou encore de tableaux Excel, le peuplement de la base de données du MDT peut s'avérer rapidement délicate ou fastidieuse.
Il devient donc rapidement évident qu'une technique de gestion de masse s'impose 😉
III. Gérer la base de données MDT via Powershell
En alliant les capacités intrinsèques de Powershell à des extensions spécifiques (appelée module) vous pouvez bénéficier d'un véritable arsenal de gestion de cette base de données MDT, et envisager rapidement des opérations d'extraction, de modification ou d'import en masse au travers de vos propres scripts.
Le snapin ou module "MicrosoftDeploymentToolkit.psd1" fournit par Microsoft et évoqué précédemment, est manifestement insuffisant pour une gestion des éléments contenus dans une base de données MDT. Heureusement, la communauté Powershell et MDT est très active et vous permet de pallier ces lacunes.
A. Télécharger et installer le module MDTDB
En premier lieu, vous devez télécharger le module spécifique à l'adresse suivante :
Une fois téléchargée, décompressez l'archive vers un dossier temporaire. Normalement, cette archive ne contient qu'un module Powershell "MDTDB.psm1" et un script d'exemple "MDTDB_Test.ps1".
Ces fichiers provenant d'un téléchargement Internet, pensez à vérifier les propriétés de ceux-ci via l'explorateur Windows, puis cliquez sur le bouton "Débloquer" le cas échéant.
Pour respecter les préconisations relatives aux modules, et les retrouver plus facilement, vous pouvez copier ou déplacer le fichier .psm1 vers le dossier "%windir%\System32\WindowsPowerShell\v1.0\Modules\MDTDB".
Pour vérifier la disponibilité des différents modules dans votre environnement, vous pouvez utiliser la commande Powershell suivante :
($env:PSModulePath).Split(';') |dir | ft name
Vous devriez voir apparaître le module MDTDB dans cette liste.
B. Utilisation du module MDTDB
Ouvrez une console Powershell, en tant qu'Administrateur.
Avant de poursuivre, vous devez vérifier que la stratégie d'exécution autorise l'exécution des scripts qui ne sont pas signés numériquement. Entrez la commande suivante pour autoriser l'exécution locale du module non signé.
Set-ExecutionPolicy RemoteSigned
Entrez la commande suivante afin d'obtenir le liste des modules disponibles.
Get-Module -ListAvailable
Le module "MDTDB" devrait apparaitre dans la liste. Cependant, si vous ne l’avez pas placé à l’endroit indiqué précédemment, vous pouvez également le charger à partir de son emplacement initial, en stipulant son chemin complet.
Bien que facultatif depuis Powershell v3 grâce au chargement automatique des modules, vous devez entrer la commande suivante afin de charger les fonctions dans la session courante.
Import-Module MDTDB
Pour afficher la liste des fonctions apportées par ce module, tapez la commande suivante.
Get-Command -Module MDTDB
Vous pouvez constater que la liste est longue (72 commandes, plus exactement des fonctions) et nous allons porter notre attention uniquement sur les principales fonctions :
La première action primordiale consiste à établir une connexion avec la base de données du serveur MDT en procédant comme suit:
Connect-MDTDatabase –sqlServer WDS-MDT –instance SQLEXPRESS -database MDT01
Si la base contient déjà des ordinateurs référencés, vous pouvez en obtenir la liste via la fonction suivante :
Get-MDTComputer
Comme vous l'avez constaté préalablement, un ordinateur MDT est référencé au sein de la base de données par un ou plusieurs identificateurs distinctifs. La commande précédente permet d'affiner la recherche en stipulant des paramètres suivants :
Paramètre | Description |
-id | Identifiant unique de l'ordinateur dans la base de donnée |
s-assetTag | Numéro de modèle lié à un fabriquant |
-macAddress | Adresse physique de la carte réseau |
-serialNumber | Numéro de série de l'ordinateur |
-uuid | Identifiant unique de la carte mère de l'ordinateur |
Comme vous pouvez le constater, chaque enregistrement possède un nombre considérable de variables (~225) retournées sous forme de liste, et de fait difficilement exploitable à l'affichage.
Note : La seule variable positionnée par défaut sur une nouvelle entrée d'ordinateur est "OSInstall = YES"
Pour obtenir un tableau simplifié des ordinateurs référencés dans la base de données, utilisez la commande suivante :
Get-MDTComputer | Format-Table Id, AssetTag, MacAddress, SerialNumber, UUID, OSDComputerName -Autosize
Pour une présentation plus sympathique du résultat sous forme graphique vous pouvez également utiliser la commande suivante:
Get-MDTComputer | select-object -property OSDComputerName, Id, AssetTag, MacAddress, SerialNumber, UUID | sort-object -property OSDComputerName | out-gridview
Pour supprimer une entrée dans la base de données, vous devez connaitre son identifiant et utiliser la commande suivante (où "n" est l'identifiant) :
Remove-MDTComputer -id n
Pour supprimer une entrée dans la base de données, dont vous ne connaissez qu'une propriété telle que le nom, vous pouvez utiliser la commande suivante :
Get-MDTComputer | where { $_.OSDComputerName -match 'Test01' } | Remove-MDTComputer
L'opération de création ou de modification d'une entrée est sensiblement plus délicate. En effet, ces paramètres et leurs valeurs respectives doivent être renseignées au sein d'une table associative (hashtable) symbolisée par " @ { param1 = valeur1 ; param2 = valeur2 } ".
Par exemple, pour créer un nouvel enregistrement, tapez la commande suivante :
New-MDTComputer -macAddress '00:00:00:11:22:33' -settings @{ OSInstall='YES' ; OSDComputerName='Test002' }
Note : Cette commande de création nécessite de déclarer au moins une propriété (-settings ) .
Pour Modifier un enregistrement existant, tapez la commande suivante :
Set-MDTComputer -id n -settings @{ OSDComputerName = 'Test003' }
Avant de manipuler efficacement cette base de données, vous devez donc identifier le nom des variables que vous souhaitez exploiter. Vous pouvez obtenir une liste exhaustive des noms de ces variables (ou propriétés) en interrogeant les propriétés d'une entrée existante (n), comme suit :
Get-MDTComputer -id n | Get-Member -MemberType Property | Select-Object Name
Un des nombreux atouts de PowerShell est sa capacité à convertir facilement des résultats vers des formats CSV, HTML, ou XML. Pour générer un fichier directement exploitable par votre tableur favori, il suffit de taper la commande suivante:
Get-MDTComputer | Export-Csv -Path C:\Temp\MyMDT.csv -Delimiter ';'
Réciproquement, si vous souhaitez importer un tableau CSV dans cette base de données, vous devez utiliser la commande "Import-CSV". Pour décomposer la procédure, tapez les commandes suivantes :
$Machines = Import-CSV -Path C:\Temp\MyMDT.csv -Delimiter ';'
À ce stade la variable "$Machines" contient l'intégralité du fichier CSV et vous pouvez afficher le nombre d'enregistrements comme suit
$Machines.count
Petit piège : J'ignore encore d'où vient ce phénomène, mais lorsqu'il n'y a qu'une seule entrée dans cet objet, la commande "$Machines.count" ne renvoie rien et non "1", comme on pourrait s'y attendre.
Chaque ligne de ce tableau correspond à un élément où chaque champ est une propriété de celui-ci. Autrement dit, en indiquant le numéro d'index (de 0 à "count-1") d'un élément suivi du nom de la propriété vous en obtenez la valeur, comme par exemple:
$Machines[0].id $Machines[0].OSDComputerName
À présent, vous pouvez envisager de réaliser une importation de masse. Pour des raisons de simplicité, nous utiliserons le fichier CSV suivant réduit à quelques propriétés (voir fichier d'exemple ci-dessous) :
Nous allons également créer quelques rôles factices, censés correspondre aux séquences de déploiement des différentes images de référence.
New-MDTRole -name 'Poste Fixe W7x64Pro' -settings @{ TaskSequenceID="REF-FIXE01" } New-MDTRole -name 'Poste Portable W7x64Ent' -settings @{ TaskSequenceID="REF-PORT01" } New-MDTRole -name 'Poste Virtuel W7x86Pro' -settings @{ TaskSequenceID="REF-VIRT01" }
Du fait qu'il n'y a aucun contrôle sur la validité des réglages, comme ici "TaskSequenceID", faites attention aux erreurs de saisie, lors de vos traitements de masse.
Fichier d'exemple "MDTImport.CSV"
Name;Mac;OU;Role PC-001;00:15:5D:64:33:01;Fixes;Poste Fixe W7x64Pro PC-002;00:15:5D:64:33:02;Fixes;Poste Fixe W7x64Pro PC-003;00:15:5D:64:33:03;Fixes;Poste Fixe W7x64Pro PC-004;00:15:5D:64:33:04;Portables;Poste Portable W7x64Ent PC-005;00:15:5D:64:33:05;Portables;Poste Portable W7x64Ent PC-006;00:15:5D:64:33:06;Fixes;Poste Fixe W7x64Pro PC-007;00:15:5D:64:33:07;Fixes;Poste Fixe W7x64Pro PC-008;00:15:5D:64:33:08;Fixes;Poste Fixe W7x64Pro PC-009;00:15:5D:64:33:09;Fixes;Poste Fixe W7x64Pro PC-010;00:15:5D:64:33:0A;Virtuels;Poste Virtuel W7x86Pro
Cet exemple ne traite pas la création des unités d'organisation "OU" et le nom du domaine. "ou=Postes,dc=labs,dc=local"
Exemple de script "ImportDB.ps1"
# Saisie du nom du fichier CSV d'import param ( [string]$Path ) Do { if ($Path -eq "" -or -not(Test-Path $Path)) { $Path = Read-Host "Entrez un nom de fichier CSV valide ou rien pour quitter " } if ($Path -eq "") {exit} } Until (Test-Path $Path) $Context = "ou=Postes,dc=labs,dc=local" $sqlServer = "WDS-MDT" $instance = "SQLEXPRESS" $mdtdb = "MDT02" # Import du module spécialisé MDTDB Import-Module MDTDB # Connexion à l'instance de la base de données MDT Connect-MDTDatabase -sqlServer $sqlServer -instance $instance -database $mdtdb # Chargement du fichier CSV $machines = Import-Csv $Path -delimiter ';' #Boucle de traitement des lignes du fichier CSV For ($i=1; $i -le $machines.count; $i++) { # Création d'une nouvelle entrée dans la base New-MDTComputer -macAddress $machines[$i-1].mac ` -description "$($machines[$i-1].name) : Demo Import DB" ` -settings @{ OSInstall='YES'; ` OSDComputerName=$machines[$i-1].name; ` ComputerName=$machines[$i-1].name; ` MachineObjectOU="ou=$($machines[$i-1].OU),$Context"; } # Récupération de la clé "Id" de la nouvelle entrée $Current = get-mdtcomputer -macAddress $machines[$i-1].mac write-host "Création de $($machines[$i-1].name) avec Id: $($Current.id)" # Ajout du role (applications) s'il existe If ($machines[$i-1].role -ne "") { Set-MDTComputerRole $Current.id $machines[$i-1].role } }
Dans une session Powershell, à partir du dossier dans lequel vous avez enregistré les 2 exemples précédents, exécutez le script comme suit:
.\ImportDB.ps1 .\MDTImport.csv
Pour vérifier le résultat, vous devez actualiser l'affichage dans la console MDT en sélectionnant la vue "Computers".
Ouvrez l'une des entrées, puis sélectionnez l'onglet "Details". Vous deviez constater la présence des variables définies par le script.
Et sous l'onglet "Role", le rôle correspondant devrait également être présent.
Pour conclure sur cette introduction à l'usage de MDTDB avec Powershell voici 2 petits exemples :
Exemple d'affichage des données renseignées
Get-MDTComputer | % { $_.OSDComputerName, $_.MACAddress, $_.MachineObjectOU, $(Get-MDTComputerRole($_.id)).Role }
Exemple de sortie dans un tableau graphique
Get-MDTComputer | Select *ComputerName, MACAddress | Out-Gridview
Vous pouvez bien évidement adapter cet exemple en stipulant les propriétés de votre choix au niveau de la commande "Select ...".
IV. Utiliser Excel avec la base de données MDT
Si les scripts vous rebutent un peu et que vous disposez d'un tableur tel que Excel, vous pouvez l'utiliser comme interface de la base de données MDT, pour par exemple effectuer des exportations ou des tris.
À partir d'Excel 2010 par exemple, sélectionnez l'onglet "Données" puis cliquez sur "Connexion" ... "Provenance : SQL Server"
Entrez ensuite le nom du serveur et l'instance SQL, telle que "wds-mdt/SQLExpress"
Cliquez sur "Suivant". Sélectionnez votre base MDT dans la liste déroulante.
Choisissez une table telle que "ComputerSettings" correspondant à la table des ordinateurs MDT, puis cliquez sur "Suivant"
Ajoutez une éventuelle description puis cliquez sur "Terminer"
Vous êtes ensuite invité à importer les données dans un classeur Excel.
Pour une simple analyse, conservez le choix "Tableau" puis cliquez sur "OK". Le tableau fera toutefois plus de 200 colonnes !...
Si vous connaissez un peu le maniement d'Excel, je vous conseille de choisir la seconde option "Rapport de tableau croisé dynamique", afin de choisir la disposition des informations à analyser.
V. Compléments
À l'usage, vous éprouverez peut-être le besoin d'accéder à la base de données du MDT via des outils personnalisés, ou vos propres scripts. Voici donc quelques exemples pour commencer l'aventure...
A. MDT Administrator
Pour une gestion personnalisée de la base de données MDT, je vous conseille de jeter un œil sur l'outil "MDT Administrator" de Chris W. (Téléchargeable au format .exe ou .hta).
Si vous avez mis en place les rôles, comme mentionné dans ce tutoriel, l'usage de cet outil vous paraitra très rapidement évident. 🙂
B. Le champ "Description"
Lors de l'usage du module MDTDB précité, vous constaterez que le champ "Description" proposé lors de la création d'un nouvel ordinateur (New-MDTComputer) n'est plus disponible dans les commandes de modification (Set-MDTComputer). Cela est lié au fait que ce champ est stocké dans la table principale des ordinateurs (dbo.ComputerIdentity) référencée par la première commande et non celle des variables associées (dbo.ComputerSettings) sur laquelle agit la seconde commande.
Voici un petit exemple de script Powershell destiné à modifier le champ "Description" d'un ordinateur MDT dont vous connaissez l'identifiant.
Note : J'ai ajouté une petite fonction pour la gestion de la base de données afin que ce script soit indépendant du module MDTDB.
Set-MDTDescription.ps1
Function Invoke-SqlCommand { param ( [string]$dataSource, # = SQLServer\. ou SQLServer\Instance [string]$database, [string]$sqlCommand = $(throw "Merci de spécifier une requete.") ) $connectionString = "Provider=sqloledb; " + "Data Source=$dataSource; " + "Initial Catalog=$database; " + "Integrated Security=SSPI;" $connection = New-Object System.Data.OleDb.OleDbConnection $connectionString $command = New-Object System.Data.OleDb.OleDbCommand $sqlCommand,$connection $connection.Open() $adapter = New-Object System.Data.OleDb.OleDbDataAdapter $command $dataset = New-Object System.Data.DataSet [void]$adapter.Fill($dataSet) $connection.Close() $dataSet.Tables # | Select-Object -Expand Rows } function Read-Default($text, $defaultValue) { $prompt = Read-Host "$($text) [$($defaultValue)]"; return ($defaultValue,$prompt)[[bool]$prompt]; } $SQLServer= "WDS-MDT" $Instance = "SQLExpress" $Database = "MDT02" $ID = Read-Host "Entrez l'identifiant de l'ordinateur MDT" $MDTComputer = Invoke-SqlCommand -sqlCommand "SELECT * FROM ComputerIdentity ` WHERE ID = '$ID'" -dataSource "$SQLServer\$Instance" -database "$Database" if ($MDTComputer -ne $null) { echo $MDTComputer $NewDescription = Read-Default -text "Modifier ? (Entrée sinon)" -defaultValue "$($MDTComputer.Description)" if ($NewDescription -ne $($MDTComputer.Description)) { Invoke-SqlCommand -sqlCommand "UPDATE ComputerIdentity SET Description = '$NewDescription'` WHERE ID = '$ID'" -dataSource "$SQLServer\$Instance" -database "$Database" echo "La description [$NewDescription] a été mise à jour sur l'entrée $ID" } else { echo "La description [$NewDescription] n'a pas été modifiée sur l'entrée $ID" } } else { echo "Entrée N°$ID inexistante dans la base de données $Database" }
C. Valider le format d'adresse MAC et son unicité
Voici un autre exemple de script Powershell destiné à valider le format d'une adresse MAC et tester son unicité dans la base de données.
CheckMAC.ps1
Function Invoke-SqlCommand { param ( [string]$dataSource, # = SQLServer\. ou SQLServer\Instance [string]$database, [string]$sqlCommand = $(throw "Merci de spécifier une requete.") ) $connectionString = "Provider=sqloledb; " + "Data Source=$dataSource; " + "Initial Catalog=$database; " + "Integrated Security=SSPI;" $connection = New-Object System.Data.OleDb.OleDbConnection $connectionString $command = New-Object System.Data.OleDb.OleDbCommand $sqlCommand,$connection $connection.Open() $adapter = New-Object System.Data.OleDb.OleDbDataAdapter $command $dataset = New-Object System.Data.DataSet [void]$adapter.Fill($dataSet) $connection.Close() $dataSet.Tables # | Select-Object -Expand Rows } Function CheckMac { param ( [string]$MACAddress = $(throw "Merci de spécifier une adresse MAC.") ) $patterns = @( '^([0-9a-f]{2}:){5}([0-9a-f]{2})$' '^([0-9a-f]{2}-){5}([0-9a-f]{2})$' '^([0-9a-f]{4}.){2}([0-9a-f]{4})$' '^([0-9a-f]{12})$') if ($MACAddress -match ($patterns -join '|')) {$true} else { Echo "ERREUR: Le format d'adresse MAC specifié est invalide : $MACAddress" return } $Delimiter = ':' $rawAddress = $MacAddress -replace '\W' switch ($Delimiter) { {$_ -match ':|-'} { if ($MacAddress -match ":") { $result=$MacAddress Echo "L'adresse MAC $MacAddress est déjà au bon format" } else { for ($i = 2 ; $i -le 14 ; $i += 3) { $result = $rawAddress = $rawAddress.Insert($i, $_) } Echo "L'adresse MAC saisie $MacAddress a été convertie en $result" } break } '.' { for ($i = 2 ; $i -le 14 ; $i += 3) { $result = $rawAddress = $rawAddress.Insert($i, $_) } Echo "L'adresse MAC saisie $MacAddress a été convertie en $result" break } } # End switch $MACAddress=$result.toUpper() $global:MAC = $MACAddress } CheckMac(read-host "Entrez l'adresse MAC à vérifier ") # Vérification d'unicité $SQLServer= "WDS-MDT" $Instance = "SQLExpress" $Database = "MDT02" $DuplicateMAC = Invoke-SqlCommand -sqlCommand "SELECT * FROM ComputerIdentity WHERE macAddress ` = '$MAC'" -dataSource "$SQLServer\$Instance" -database "$Database" if ($DuplicateMAC -ne $null){ Echo "Cette adresse MAC $MAC est déjà assignée ! cf ID N° $($DuplicateMAC.ID)" } else { Echo "L'adresse MAC $MAC n'est pas encore assignée." }
Extraits de mes différents projets, j'ai essayé de rendre ces extraits autonomes, sans m'attarder sur la qualité du code, mais l'idée est bien là et je vous laisse le soin de les adapter à vos besoins.
Bien à vous
Bonjour,
Merci pour le tutoriel. Je recherche une solution simple comme data base, et j’ai pu voir lors de ton explication que l’on pouvais utiliser EXCEL comme base de données. Je suppose qu’il faut SQL serveur express & SQL Server Management Studio.
Aurais tu un tutoriel, pour tous cela ?
Merci beaucoup.
Bonne journée.
Cordialement
Bonjour,
Je pense qu’il y a une mauvaise « compréhension » du principe. MDT ne peut utiliser (exploiter) qu’une base de données de type MS SQL ou SQL Express (Gratuit, y compris SQL Studio pour les outils d’administration) – Pas d’Oracle ou MySQL à ma connaissance. Excel, n’est qu’un tableur avancé et ne peut être utilisé qu’en tant qu’interface (pour consulter le contenu) mais aucunement servir de source de données pour MDT.
Le module Powershell MDTDB.psm1 permet de faire des traitements de masse, et on peut « scripter » des imports/exports avec des formats différents tel que des CSV….mais il faut un minimum de maitrise du sujet.
L’intérêt d’associer une base de données SQL avec MDT permet principalement d’éviter un CustomSetting.ini, basé sur des sections MACAddress par exemple, qui deviendrait trop complexe à maintenir.
Et pour terminer, l’ajout d’un SQL Express comme décrit dans cet article, ne nécessite pas de compétence pointue pour la mise en œuvre.
Bonne continuation
Bonjour,
Merci pour ce complément d’informations, étant novice dans la base de données de type SQL… (mais j’apprends).
Donc, j’ai installer SQL Express et SQL Studio, pas évident à faire fonctionner (surtout avec les services qui merde…). On va dire que c’est OP.
sur MDT database (New).
SQL Serveur name: xxxx
Instance: xxxx
lorsque je clique sur Finish il m’affiche ceci:
Attempting to connect to the specified SQL Server.
Successfully connected to SQL Server.
Opération « new » en cours sur la cible « MDTDatabase ».
Creating database MDT
Unable to create necessary database objects.
Autorisation CREATE DATABASE refusée dans la base de données ‘master’.
Une idée.
Merci
Re,
Chaque action que je fais ce traduis par une erreur…
Mon SVR SQL
https://imgur.com/a/7BuoD
Quand je veux cocher Mode d’authentification SQL Serveur et Windows.
https://imgur.com/a/qS9h9
Quand je sélectionne un compte administrateur (PF\administrateur, alors qu’il ce trouve dans Connexion ???)
https://imgur.com/a/xxRdf
C’est un peux du mandarin pour moi ceci lol.
Un avis expert saura me dépatouiller…
Merci
Bonjour Alex,
Je ne suis pas un expert SQL, mais pour une utilisation simple avec MDT, je procède ainsi :
Sur une machine Windows 7/2008R2 ou ultérieur, (sans instance SQL existante au préalable ) on installe l’ADK, SANS cocher l’option SQL intégrée puis le MDT.
Ensuite, on télécharge un package SQL Express « with Tools » (on a pas besoin de la toute dernière version)
– Par exemple SQL Express 2012 puis « FRA\x64\SQLEXPRWT_x64_FRA.exe » –
puis on lance l’installation avec les valeurs par défaut (sauf choix authentification Windows Intégrée de préférence)
On effectue ensuite les éventuels ajustements via SQL Management Studio (accès TCP/IP et/ou Canaux Nommés, et SQL Browser si machines distinctes)
Ensuite, dans la console MDT, on se laisse guider par l’assistant pour créer une nouvelle « Database » sous « Advanced configuration »)
Bonne installation
Salut,
Bon avec un peux de persévérance, j’ai réussie à installer le tout. J’ai commencer à crée ma database :-).
Cependant, j’ai une autre erreur jamais vue auparavant !!!
https://imgur.com/a/6ybqE
J’ai vérifier la connectique, reboot le DHCP, mais rien n’y fais…
Une idée ?
Merci
Bonjour,
Bizarre, un prompt en allemand ! est-ce normal ? Est-ce que le client LTI a été régénéré ? (via la console MDT puis Update). Est-ce que la carte réseau est bien détectée ? [F8] puis « wpeinit » ou « wpeutil initializeNetwork » puis « IPConfig ». Si @IP OK , type « x:\Deploy\Scripts\bootstrap.ini » pour afficher le share et les credentials. Vérifier ping du serveur et si OK, essayer la commande avec les valeurs [] correspondantes
» net use * « [deployroot] /user:[UserDomain]\[UserID] [UserPassword] « , si NOK, chercher coté Driver (loadinf) et enfin, essayer avec un client MDT générique.
Bon courage
Lien HS : https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/01/5209/00/00/03/24/15/04/MDTDB.zip