Remove Skype contacts – Manage and Remove Internal Contacts with Script and Powershell

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

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Créez un site Web ou un blog gratuitement sur WordPress.com.

Retour en haut ↑

Technopreneurph

Technology Entrepreneurship For the World

Chemist Blogger

All things science, technology, and geek culture

Cambly Blog

Practice English with a Native Speaker

BirdsBeep is a Multiplatform Chat Application

BirdsBeep is the uprising of new chatting features that will satisfy.

Deepak verma

Get Latest updates from Famous Tech Blogs in One Blog.

Le mur d'Adrien

De l'administration système pour tous

%d blogueurs aiment cette page :