SCCM 2012 – Automatisez la création de Dossiers de Collection en Powershell

System Center 2012 Configuration Manager nous permet maintenant de créer des dossier de collections. Ces dossiers permettent d’organiser et de regrouper nos collections de machine ou d’utilisateurs. Il est parfois / souvent nécessaire de créer toute une arborescence de dossiers afin d’y placer nos futures collection.

Afin d’y parvenir j’ai créé un script Powershell permettant de créer les arborescence de dossier dont vous aurez besoin, et ce, en se basant sur le contenu d’un « bête » fichier CSV.

Regardons ensemble comment fonctionne ce script ! (afin de reconstituer ce script, collez les extraits de code suivant dans l’ordre dans un fichier .ps1)

Create-CollectionFolder
La fonction présentée ci-dessous, permet de procéder à la création d’un dossier pour lequel on aura fourni un nom ainsi que l’ID de son parent.

Attention : veillez a remplacer _namespace « root\SMS\Site_CAS » par le sitecode du site depuis lequel vous souhaitez créer les dossiers.


Function Create-CollectionFolder($FolderName, [int] $ParentContainerid)
{
$ReturnedFolderID = Get-CollectionFolderID($FolderName)
if (!$ReturnedFolderID) #If folder does not exists
{
$CollectionFolderArgs = @{
Name = $FolderName;
ObjectType = "5000"; # 5000 : Collection_Device, 5001 : Collection_User
ParentContainerNodeid = $ParentContainerid
}
Set-WmiInstance -Class SMS_ObjectContainerNode -arguments $CollectionFolderArgs -namespace "root\SMS\Site_CAS" | Out-Null
$NewFolderID = Get-CollectionFolderID($FolderName)
Write-host "$FolderName Created (id:$NewFolderID)"
}
Else{
Write-host " #### $FolderName Already Exists (id:$ReturnedFolderID)"
}
}

Get-CollectionFolderID

Cette fonction permet de récupéré l’ID d’un dossier en lui passant en paramètre le nom du dossier. Cette fonction permet dans notre cas d’obtenir l’ID des dossiers parents lors de la création des enfants.

Attention : dans le cas ou plusieurs dossiers ont le même nom, seul l’ID du premier dossier sera retourné.

Function Get-CollectionFolderID($FolderName)
{
$CollectionFolderObj = Get-wmiObject -Namespace root\SMS\site_CAS -Query "Select ContainerNodeID from SMS_ObjectContainerNode where name='$FolderName'"
Return $CollectionFolderObj.ContainerNodeID
}


Create-FolderHierarchy

Cette fonction utilise les deux fonctions définies précédemment afin de créer l’arborescence de dossiers en fonction du fichier CSV passé en paramètre.

Attention : les lignes du fichier CSV ne doivent pas finir par une « , ». Sinon réadaptez la boucle « For » pour s’arrêter un item plus tôt.

Function Create-FolderHierarchy($CSVPath)
{
$ImportedCSVData = Get-Content $CSVPath
ForEach ($line in $ImportedCSVData) {
$ParsedLine = $line.split(",")
for ($index=0; $index -lt $ParsedLine.length; $index++)
{
If ($index -eq 0){
$ParentContainerid = 0
}
Else{
$ParentContainerid = Get-CollectionFolderID($ParsedLine[$index-1])
}
$FolderName = $ParsedLine[$index]
Create-CollectionFolder $FolderName $ParentContainerid
}
}
}

Appel des fonctions

L’appel des fonctions se fait très simplement via les lignes ci-dessous.


function Get-ScriptDirectory
{
$Invocation = (Get-Variable MyInvocation -Scope 1).Value
return Split-Path $Invocation.MyCommand.Path
}
#Create Hierarchy
$CurrentDirectory = get-scriptdirectory
Create-FolderHIerarchy("$CurrentDirectory\FolderArchi.csv")

le fichier CSV pourrait ressembler à celui ci :
Administration
Administration,Adm_Global
Administration,Adm_EMEA
Administration,Adm_EMEA,Adm_EMEA_CH
Administration,Adm_EMEA,Adm_EMEA_CH,Adm_EMEA_CH_GVA
Administration,Adm_EMEA,Adm_EMEA_CH,Adm_EMEA_CH_VRX
Administration,Adm_APAC
Deployment,Dep_Global
Deployment,Dep_EMEA
Deployment,Dep_EMEA,Dep_EMEA_CH,Dep_EMEA_CH_GVA
Deployment,Dep_EMEA,Dep_EMEA_CH,Dep_EMEA_CH_VRX
Deployment,Dep_APAC

et le tour est joué !

Comme indiqué plus haut, afin d’obtenir un script fonctionnel, copiez dans l’ordre les blocs de code dans un fichier .ps1 !

Please follow and like us:

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Social media & sharing icons powered by UltimatelySocial