Bonjour à tous,
si vous ne le saviez pas déjà, il est possible d’automatiser l’ajout de contacts Skype à l’ensemble de vos utilisateurs Skype.
Merci Michael LaMontagne -> https://gallery.technet.microsoft.com/office/Invoke-SFBContacts-3b3ad2ef
En revanche une fois le contact Skype ajouté, si celui ci ne fait plus parti de la société il restera malgré tout dans votre liste car il n’existe pas de processus de purge.
Je vais vous montrer ici comment récupérer la liste de vos utilisateurs Skype et pour chacun d’eux, purger complètement la liste des contacts internes afin d’avoir une liste de contact régulièrement remise à zéro et du coup « Up to Date ».
Ce premier script sera exécuté depuis votre serveur Skype
Pour ma part il s’agit d’un 2008R2:
Cette commande permet d’exporter dans un fichier CSV l’identifiant de l’ensemble des utilisateurs présent dans votre environnement Skype au format j.dupont@ma-societe.fr par exemple.
Get-CsUser | select sipaddress >> c:\logs\sipusers.csv
La fonction trim que j’ai récupéré sur internet, vient ensuite supprimer la totalité des espaces qui se trouve dans le csv ainsi que les lignes vides
Merci Michael Rueefli -> http://www.miru.ch/remove-blanks-find-replace-within-a-file-using-powershell/
Function trim($file,$mode) { $input = Get-Content $file $output = $input | where {$_ -notmatch "^$" } If ($mode -eq 'includeblanks') { $output = $output -replace(' ','') } Set-Content $file $output } trim “C:\logs\sipusers.csv" includeblanks trim "C:\logs\sipusers.csv"
La commande suivante « select -Skip 2 » vient ensuite retirer les deux premières lignes qui ne m’intéressent pas.
gc C:\logs\sipusers.csv | select -Skip 2 | sc C:\logs\sipusersnew.csv
Une dernière manipulation du fichier permet de retirer les 4 premiers caractères de chaque ligne afin de retirer « sip: » des identifiants
$string = get-content « C:\logs\sipusersnew.csv »
foreach ($user in $string){
$user.Substring(4) >> « C:\logs\users.csv »
}
Donnant ce résultat:
Pour terminer nous supprimons l’ensemble des fichiers qui n’ont plus lieu d’exister
rm c:\logs\sipusers.csv rm C:\logs\sipusersnew.csv
Venons en maintenant au second script, celui qui va venir chercher ce fichier CSV pour le traiter.
Ce script s’exécute également sur votre serveur Skype
On vient récupérer dans une variable le contenu de ce fichier
$content = get-content "C:\logs\users.csv"
N’ayant pas d’outil de compression sous W2008R2 j’utilise 7Zip, je déclare ici un alias pour l’utiliser, plus pratique ainsi
set-alias sz "C:\Program Files (x86)\7-Zip\7z.exe"
Je peux maintenant faire un traitement par boucle de tous les utilisateurs présents dans le fichier.
#On export la conf Skype par User foreach ($user in $content){Export-CsUserData -PoolFqdn "skype2015.ma.societe.local" -FileName "C:\Logs\$user.zip" -UserFilter $user # Pour décompresser, sous 2012R2 j'utiliserai Expand-archive -path "C:\Logs\$user.zip" -destinationpath "C:\Logs\$user" mais sous 2008R2 7zip répond bien à ce manque. $destinationUnzipPath = "C:\Logs\$user" $zipfilePath = "C:\Logs\$user.zip" #Cette commande va décompresser les deux fichiers compris dans C:\Logs\j.dupont@ma-societe.fr.zip en C:\Logs\j.dupont@ma-societe.fr\ sz e $zipfilePath "-o$destinationUnzipPath" -r -y ;# Seul le fichier DocItemSet.xml nous intéresse, on va maintenant pouvoir aller le modifier comme bon nous semble # Avant tout, voici sa composition
# On déclare notre fichier Xml [xml]$xml = (gc C:\Logs\$user\DocItemSet.xml) # On vient rechercher l'ensemble des contacts du type "@ma-societe.fr" en excluant par exemple celui du président # Pour plusieurs raisons, d'une part, il n'est pas amené à changer souvent ... et d'autre part, cela permet de conserver au moins un contact dans les balises # En effet laisser les balises avec un contenu vide ne fonctionne pas pour la partie Update-CsUserData que l'on va voir un peu plus bas. # Vous l'aurez compris, cette recherche ne prend absolument pas en compte les contacts externes que vous pourriez avoir ajouté -> Heureusement ! $delnodes = $xml.docitemset.docitem.data.HomedResource.contacts.contact | Where-Object {$_.Buddy -like "*@ma-societe.fr" -and $_.Buddy -notlike "president@ma-societe.fr"} # On supprime ensuite les lignes correspondantes à notre recherche, à nos utilisateurs internes donc. $delnodes | %{ $_.parentnode.removechild($_) } # Si l'envie vous prenait de supprimer l'ensemble des contacts alors vous n'auriez qu'à utiliser cette ligne de commande qui va venir purger tout ce qui se trouve entre les balises , elles mêmes comprises. $delnodes = $xml.docitemset.docitem.data.HomedResource.contacts # Il est également possible de purger des groupes que l'on aurai ajouter manuellement exemple groupe compta, groupe informatique, groupe Direction, même si ces derniers sont plus difficiles à identifier..
$delnodes = $xml.docitemset.docitem.data.HomedResource.contactgroups.contactgroup | Where-Object {$_.DisplayName -notlike "fg==" -and $_.DisplayName -notlike "UGlubmVkIENvbnRhY3Rz" -and $_.DisplayName -notlike "MDEwMDAwLVByZXNpZGVuY2U="} $delnodes | %{ $_.parentnode.removechild($_) } # On vient sauvegarder nos modifications pour cet utilisateur $xml.save("C:\Logs\$user\DocItemSet.xml") # Il faut maintenant faire marche arrière et remettre notre fichier DocItemSet.xml modifié dans un format Zip #Pour compresser, sous 2012R2 j'utiliserai Compress-Archive -Path C:\Logs\$user\* -DestinationPath C:\Logs\$user.zip –force mais ici sous 2008R2, 7zip répond au besoin $Source = "C:\Logs\$user\*" $Target = "C:\Logs\$user.zip" sz a -mx=9 $Target $Source -y # Nous allons maintenant pouvoir mettre à jour la conf de notre utilisateur j.dupont@ma-societe.fr Update-CsUserData -Filename "C:\Logs\$user.zip" -UserFilter "$user" -force # Dernière étape, la purge des fichiers qui nous ont permis de réaliser ces opérations rm "C:\Logs\$user\" -r -force rm "C:\Logs\$user.zip" }
Cette boucle foreach va donc s’exécuter autant de fois qu’il y a d’utilisateur dans votre fichier CSV d’origine.
La boucle étant terminée on peut maintenant supprimer le fichier C:\logs\users.csv qui ne sera plus utile
rm "C:\logs\users.csv"
Si l’utilisateur est déjà connecté à Skype il ne verra aucun changement, en revanche si l’utilisateur se reconnecte à Skype il ne verra plus grand monde dans ses contacts internes,
il faudra attendre que celui ci redémarre son poste de travail afin que le script d’ajout de contact vienne compléter sa liste. Je vous renvois au lien plus haut de Michael LaMontagne.
Vous l’aurez compris, il est question ici du vidage de contact Skype, je n’aborde pas le sujet de l’ajout de contact ni du maintien à jour de cette liste de contact à ajouter.
En effet vous aurez beau purger régulièrement vos contacts internes, si cette liste d’ajout n’est pas elle aussi régulièrement « entretenue », vous continuerez de pousser des contacts « fantômes », ça va de soit ^^
En espérant que ce bout de script puisse vous filer un coup de main !
Maxime
Votre commentaire