Avant de commencer
- Prenez aussi le WMI Explorer de MOW qui va vous faciliter lecode pour SCCM comme nous allons le voir plus loin
 
Commençons par découvrir les namespaces, Lancez wmiexplorer sur votre serveur SCCM
Un namespace "ROOT\SMS" est présent, au deuxième niveau, vous verrez «ROOT\SMS\inv_schema » que nous allons ignorer pour le moment, et en dessous un namespace normé "ROOT\SMS\site_nomdusite"Double-cliquez sur l’instance d’un site pour faire apparaitre les classes :
Les 570 (!) classes exposées vont apparaitre en bas à gauche. Oui ça fait du monde, mais rassurez vous nous allons pouvoir faire le tri facilement en fonction de notre besoin.
' Connect
Set siteClass = connection.Get("SMS_Site")
Set inParams = siteClass.Methods_("ImportMachineEntry"). _
inParameters.SpawnInstance_()
' Add the input parameters.
inParams.Properties_.Item("MACAddress") = macAddress
inParams.Properties_.Item("NetbiosName") = netBiosName
inParams.Properties_.Item("OverwriteExistingRecord") = False
inParams.Properties_.Item("SMBIOSGUID") = smBiosGuid
' Add the computer
Set outParams = connection.ExecMethod("SMS_Site", "ImportMachineEntry", inParams)
La question qui nous brûle le clavier est donc :
On double clique sur la classe SMS_Site pour inventorier les propriétés et méthodes de la classe. Vous constaterez qu’à droite, il existe effectivement une méthode appelée « ImportMachineEntry »Double Cliquez sur cette méthode. L’intérêt du WmiExplorer de MoW est qu’il permet d’obtenir des exemples d’utilisation des méthodes WMI :
Comble du raffinement, il donne un exemple de script et énumère les différents paramètres à renseigner avec leur type (string, booléen,etc..)... Concrètement, il ne nous reste plus qu’à renseigner cet exemple avec les paramètres nécessaires :- MacAddress (addresse MAC de la machine à importer)
 
- NetbiosName (Nom de la machine dans l’inventaire SCCM), etc…
 

En faisant un Get_Member, on constate qu’il n’y a pas de méthode « ImportMachineEntry » d’exposée. Cela vient du formatage des objets propres à PowerShell. Pour avoir accès aux propriétés et méthodes de cette classe, il faut passer par la méthode psbase de powershell pour avoir un accès « RAW » à l’objet (Plus d’info sur psbase ici) :

On voit ici que $mc.psbase nous propose effectivement "Methods" et "Properties". Listons maintenant les méthodes :

Set inParams = siteClass.Methods_("ImportMachineEntry"). _
inParameters.SpawnInstance_()
inParams.Properties_.Item("MACAddress") = macAddress
inParams.Properties_.Item("NetbiosName") = netBiosName
inParams.Properties_.Item("OverwriteExistingRecord") = False
inParams.Properties_.Item("SMBIOSGUID") = smBiosGuid
$InParams.MACAddress = [string]
$InParams.NetbiosName = [string]
$InParams.OverwriteExistingRecord = [boolean]
$InParams.SMBIOSGUID = [string]
Détaillons un peu ce $InParams :
On voit effectivement nos 4 propriétés MacAddress, NetbiosName, OverwriteExistingRecord, SMBIOSGUID qui sont vides. Notez au passage que le type est bien exposé dans la colonne définition (OverwriteExistingRecord est de type System.Boolean, string pour les autres), et qu’on peut lire et écrire (get;set)
En affichant $InParams après avoir renseigné les propriétés, on voit bien que l’objet est chargé.
Reste à exécuter la méthode. L’exemple Vbscript donnait :
Set outParams = connection.ExecMethod("SMS_Site", "ImportMachineEntry", inParams)
En PowerShell, l’execution se gère comme suit (toujours en suivant simplement l’exemple généré par l’outil de MoW)
$mc.PSBase.InvokeMethod($Method, $inParams, $Null)
Voila notre machine importée dans SCCM, pour l’instant uniquement dans All Systems.
Reste la troisième étape indiquée par le SDK : Ajouter cette machine à une autre collection.
Nous verrons cela dans la seconde partie de ce post.
Rejouissez-vous ! Vous savez à présent où trouver les différentes tâches liées à SCCM et les convertir en PowerShell.

2 commentaires:
Brillant, merci!
Enregistrer un commentaire