set-location$([Environment]::GetFolderPath("Mydocuments"))#se place dans le repertoire "mes documents" de l'utilisateur actuel
try
{
$base=Import-Clixmlreferencegroupes.xml
}
catch
{
Write-Host"Le fichier de réference n'existe pas, ou n'est pas disponible , il sera regénéré à la fin de ce script. Aucun fichier de modification ne se créera."
}
#ce bloc crée un message pour signifier qu'il n'a pas pu accéder au fichier de base. Si c'est le premier lancement, ou si le fichier n'est plus accessible, il le recréera avec ce que le script aura récuperé
$base=$base|Sort-Object-Propertygroupe-Unique
$Connection=New-Object-Com"ADODB.Connection"#création d'un objet de connexion
$Connection.Provider="ADsDSOObject"#On spécifie que c'est une connexion LDAP
$Connection.Properties.Item("User ID")="CN=Nicolas LANG,O=Ma Société"#authentifiant à préciser
$Connection.Properties.Item("Password")="P@ssw0rd!"#Votre mot de passe
$Connection.Open("Active Directory Provider")#Nous mettons en place la connexion avec les identifiants précisés
$Command=New-Object-Com"ADODB.Command"#on initialise la commande qui sera fournie à la connexion $Connection
$Command.ActiveConnection=$Connection#On lie la commande à la connexion
$Query="SELECT displayname, mail, member FROM 'LDAP://lotusserveur.mondomaine.com' WHERE objectclass='dominogroup'"#nous enregistrons un texte qui précise que nous selectionnons les propriétés displayname mail et member sur le serveur LDAP précisé de ce qui est un dominogroup
$Command.Commandtext=$Query
$Command.Commandtimeout=60#Ce timeout est le temps de validité de la commande avant qu'elle soit précisée comme perdue. Si votre base est imposante ou que votre connexion vers le serveur est lente, augmentez la valeur.
$execute=$Command.execute()#On execute la commande et on l'enregistre dans $execute
$tab=@()#on crée un tableau qui recueillera les données
$execute.MoveFirst()#nous nous déplaçons au premier enregistrement
functionajoutligne($groupe=$null,$ajout=$null,$retrait=$null,$creation=$null,$suppression=$null,$reference="???")#Cette fonction permettra d'ajouter dans chaque colonne l'attribut et la valeur désirée
while($execute.eof-eq$false)#cette boucle s'execute tant que nous ne sommes pas arrivés sur le EOF (End Of File) qui indique la fin des enregistrements. Une valeur BOF (Begin Of File) existe pour préciser le premier enregistrement.
{
$member=$execute.Fields|Where-Object{$_.name-eq"member"}#nous selectionnons dans l'element de la boucle la valeur "member"
$displayname=$execute.Fields|Where-Object{$_.name-eq"displayname"}#idem pour displayname
$addresse=$execute.Fields|Where-Object{$_.name-eq"mail"}#idem pour mail
if($member.Value-isnot[System.DBNull])#Pour un enregistrement de base de donnée vide, $null n'est pas valide. Le type pour une entrée vide est [System.DBNull]
$recap|Export-Csv"Changements comptes.csv"-EncodingUTF8-notypeinformation-Append-Delimiter";"#export du fichier de suivi des modifications sur le compte
Move-Item-Pathnewbase.xml-destinationreferencegroupes.xml-Force#remplacement du fichier