Sylver SCHORGEN Blog's

Articles, astuces et news sur les technologies Microsoft et plus particulièrement tournant autour de Powershell
  • [Office 365] Guides Vidéos Officiels

    Bonjour tout le monde,

    Juste une petite information aujourd'hui : Microsoft à mise en place un site au niveau duquel plusieurs guides vidéos Office 365 ont été publiés. Tous les guides sont en anglais. Pour y accéder, c'est par ici : http://bit.ly/1q4YH4e

  • [PowerShell] Afficher toutes les BAL de type salles cachées de la GAL

    Il y a quelques jours je postais un script cachant toutes les BAL de type "salle" de la GAL. Voici maintenant son opposé, un script permettant de rendre disponible à tous les utilisateurs les BAL de type "salle" ayant précédemment été masquée.

    Ce script dispose de 2 paramètres obligatoires :

    • O365AdminLogin : Nom d'utilisateur d'un administrateur du tenant
    • O365AdminPassword : Mot de passe du compte administrateur

    Un exemple d'exécution du script : Show-O365RoomMailboxes -O365AdminLogin "ADMIN@DOMAIN.COM" -O365AdminPassowrd "PASSWORD"

    Après avoir taper cette commande le script s'occupe de tout :)

    Le script se télécharge par ici :)

  • [PowerShell] Fonction de connexion à Exchange Online

    Bonjour tout le monde,

    Aujourd'hui je partage avec vous une petite fonction que j'utilise souvent dans mes scripts Office 365 afin d'ouvrir une PSSession avec l'environnement Exchange Online de mon client.

    Cette fonction dispose de 2 paramètres :

    • O365AdminLogin : Nom d'utilisateur d'un administrateur
    • O365AdminPassword : Mot de passe de l'utilisateur administrateur

    Exemple d'utilisation de la fonction : Connect-ExchangeOnline.ps1 -O365AdminLogin "admin@mytenant.onmicrosoft.com" -O365AdminPassword "MYPASSWORD"

    Pour télécharger la fonction, c'est par ici

  • [PowerShell] Masquer les BAL ressources dans Office 365

    Dans le cadre d'un projet de migration de messagerie dans Office 365 pour un client, j'ai dû provisionner les boîtes aux lettres de ressources dans Office 365 mais il ne fallait pas que ces dernière soient accessibles durant la migration.

    Pour ce faire, j'ai utilisé quelques lignes de PowerShell afin de récupérer toutes les boîtes de type Ressource et les rendre non visibles aux utilisateurs (les ressources ne sont plus visibles dans la GAL).

    Ce script dispose de 2 paramètres obligatoires :

    • O365AdminLogin : Nom d'utilisateur d'un administrateur du tenant
    • O365AdminPassword : Mot de passe du compte administrateur

    Un exemple d'exécution du script : Hide-O365ResourceMailboxes -O365AdminLogin "ADMIN@DOMAIN.COM" -O365AdminPassowrd "PASSWORD"

    Après avoir taper cette commande le script s'occupe de tout :)

    Pour le télécharger, c'est par ici

  • [PowerShell] Masquer les BAL de type salle dans Office 365

    Dans le cadre d'un projet de migration de messagerie dans Office 365 pour un client, j'ai dû provisionner les boîtes aux lettres de type "salle" dans Office 365 mais il ne fallait pas que ces dernière soient accessibles durant la migration.

    Pour ce faire, j'ai utilisé quelques lignes de PowerShell afin de récupérer toutes les boîtes de type "Salle" et les rendre non visibles aux utilisateurs (les salles ne sont plus visibles dans la GAL).

    Ce script dispose de 2 paramètres obligatoires :

    • O365AdminLogin : Nom d'utilisateur d'un administrateur du tenant
    • O365AdminPassword : Mot de passe du compte administrateur

    Un exemple d'exécution du script : Hide-O365RoomMailboxes -O365AdminLogin "ADMIN@DOMAIN.COM" -O365AdminPassowrd "PASSWORD"

    Après avoir taper cette commande le script s'occupe de tout :)

    Pour le télécharger, c'est par ici.

  • [PowerShell] Lister le groupes de distribution Office 365 et leurs membres

    Un de mes clients m'a récemment demandé de lui lister tous ses groupes de distribution Office 365 en incluant les membres.

    Étant donné qu'il y avait plus d'une centaine de groupes, je me suis tout de suite tourné vers PowerShell pour réaliser un petit script !

    Ce script dispose de 3 paramètres obligatoires :

    • O365AdminLogin : Nom d'utilisateur d'un administrateur du tenant
    • O365AdminPassword : Mot de passe du compte administrateur
    • CSVFilePath : Chemin du fichier csv dans lequel seront écris vos groupes et membres

    Un exemple d'utilisation du script : .\Get-O365DLWithMembers.ps1 -O365AdminLogin "admin@mytenant.onmicrosoft.com" -O365AdminPassword "MYPASSWORD" -CSVFilePath "C:\_\myCsvFile.csv"

    Durant l'exécution du script des informations sur le groupe en cours de traitement apparaîtront à l'écran.

    Le fichier CSV ressemblera à ceci :

    Une fois l'export effectué, vous pourrez retravailler le fichier en utilisant Excel.

    Je me suis inspiré d'un script présent sur les Technet pour la création du mien : https://gallery.technet.microsoft.com/office/List-all-Users-Distribution-7f2013b2

    Pour récupérer le script, c'est par ici :)

  • [Outlook 2016 Version 16.0.6568.2025] Suppression des mails du serveur ou mail dupliqué POP3

    Bonjour tout le monde,

    Un petit post pour vous indiqué que la dernière mise à jour d'Outlook 2016 peut fortement impacter vos clients.

    En effet, si vous avez coché "Laisser les mails sur le serveur" sans spécifier le délai après lequel les mails seront supprimés, il est possible que vous receviez les mails en doublon, triplon, ...

    Si vous avez coché l'option "Supprimer les mails du serveur au bout de xxx jours", Outlook supprimera les mails du serveur dès leur reception !

    Ces 2 bugs peuvent être très impactant et j'espère que Microsoft va très vite sortir un correctif. En attendant, ils fournissent des workaround (configurer les boîtes en IMAP si possible ou rollback à une version antérieure).

    [UPDATE 05/03] Microsoft a finalement publié un correctif. Mettez donc à jour vos Office !

    Bonne journée

  • [PowerShell] Modifier le suffixe UPN pour plusieurs utilisateurs

     Aujourd'hui je vous livre un petit script permettant de modifier le suffixe UPN de plusieurs utilisateurs. J'ai eu besoin de réaliser cela afin de configurer Azure AD Sync pour un client.

    Le script dispose de plusieurs paramètres :

    • OldUPNSuffix (obligatoire) : Spécifiez le suffixe UPN actuel, celui que vous voulez modifier
    • NewUPNSuffix (obligatoire) : Spécifiez le nouveau suffixe UPN
    • UserOU (obligatoire) : Spécifiez l'OU supérieure au niveau de laquelle vous voulez effectuer les modifications (les utilisateurs présents dans les sous-OU seront également impactés)
    • DC (obligatoire) : Spécifiez le nom d'un contrôleur de domaine

    Exemple d'exécution du script :

    • .\Set-NewUPNSuffix.ps1 -OldUPNSuffix "contoso.local" -NewUPNSuffix "contoso.com" -UserOu "OU=Users,OU=Contoso,DC=contoso,DC=local" -DC "srv-ad.contoso.local"

    Pour télécharger le script, c'est par ici !

  • [Tools] Lister les ordinateurs ou utilisateurs actifs ou désactivés dans l'AD

    Hello,

    Souvent des collègues me demandent des petits scripts PowerShell pour faire telle ou telle chose au niveau d'un domaine. Une demande qui revient particulièrement souvent est la possibilité de lister les utilisateurs ou ordinateurs désactivés dans l'AD.

    Du coup, je me suis dit qu'il pourrait être sympa de créer une petite interface graphique simple qui permettrait de récupérer ces informations (le tout fait en PowerShell bien sûr par le biais du logiciel PowerShell Studio).

    L'outil que j'ai mis en place peut s'exécuter depuis n'importe quel serveur qui est joint au domaine. En effet, au niveau de l'interface, vous allez devoir spécifier depuis quel contrôleur de domaine vous voulez importer le module ActiveDirectory. En plus de cela, vous devez indiquer si vous voulez lister les utilisateurs ou ordinateurs actifs ou désactivés au niveau de l'AD (le choix utilisateur ou ordinateur se fait en fonction de l'onglet dans lequel vous êtes). Une fois ceci effectué, vous pouvez cliquer sur le bouton OK.


    Le script va alors récupérer les objets demandés et vous les retourner dans une vue de type tableau.

    Dans les semaines à venir, j'ajouterai des fonctionnalités à cette interface, comme la possibilité d'exporter directement vers Excel ou encore de rechercher un utilisateur ou ordinateur en particulier :)

    Afin de pouvoir exécuter ce petit outil, il faut que le compte AD qui l'exécute ait le droit d'ouvrir une PSSession PowerShell et de lister les objets ADComputer et ADUser. Dans le cadre de mes tests, j'utilise un compte administrateur du domaine. Il faut également que le Remote Management soit activé sur le contrôleur de domaine en question (winrm quickconfig). 

    Ce script n'a été testé que sur Windows Server 2012 et Windows Server 2012R2.

    L'exécutable est joint à ce billet de blog.

    [Mise à jour le 26/01/16] : Ajout de log en bas de chaque onglet indiquant les actions effectuées par le script.

    Stay tuned ;)

  • [PowerShell] Ressources Office 365

    Bonjour tout le monde,

    Si vous voulez vous lancer dans PowerShell pour Office 365 mais que vous ne savez pas trop par quel bout le prendre, je vous conseille l'excellent site powershell.office.com.

    Vous trouverez beaucoup d'information comme comment configurer votre machine pour pouvoir exécuter des commandes PowerShell pour Office 365 ou encore une bibliothèque de scripts.

    Bonne journée !

  • [Surface Book] Précommande ouverte à partir d'aujourd'hui

    Une petit billet publicitaire pour annoncer l'ouverture de la précommande des Surface Book à partir d'aujourd'hui en France (le 5 janvier 2016).

    Pour pré-commander c'est par ici.

  • [PowerShell] Création de plusieurs VM Hyper-V

     Dans mon dernier billet de blog, j'indiquais comment créer une VM avec un script que j'avais développé. Voici maintenant un script qui permet de créer plusieurs machines virtuelles depuis un fichier CSV source.

    Voici les colonnes à remplir :

    • VMName (obligatoire) : Nom de la machine virtuelle à créer
    • Processors (obligatoire) : Nombre de processeurs à assigner à la machine virtuelle
    • VMMemoryMB (obligatoire) : Quantité de RAM à assigner à la machine virtuelle (en MB)
    • VHDSizeGB (obligatoire) : La taille du VHD de la machine virtuelle (en GB)
    • VMGeneration (obligatoire) : La génération de votre machine virtuelle (soit 1, soit 2)
    • VHDPath (obligatoire) : Le chemin ou sera stocké le VHD de la machine virtuelle (penser à ajouter le nom du VHD à la fin du chemin. Exemple : D:\monVHD.vhdx)
    • InternalvSwitchName : Nom du vSwitch interne à assigner à la machine virtuelle (ce dernier doit exister)
    • ExternalvSwitchName : Nom du vSwitch externe à assigner à la machine virtuelle (ce dernier doit exister)
    • PrivatevSwitchName : Nom du vSwitch privé à assigner à la machine virtuelle (ce dernier doit exister)
    • IsoPath : Chemin de l'ISO à monter dans le DVD de la machine virtuelle

    Ci-dessous un exemple de fichier CSV rempli avec Excel.

    Une fois le fichier complété, il ne vous reste plus qu'à lancer la commande suivante afin de créer l'intégralité de vos machines : .\HYPERV_New-VMFromCSV -CSVPath "D:\HYPERV_VmToCreate.csv"

    Pour récupérer le script et le fichier CSV, c'est pas ici :)

  • [PowerShell] Création de VM Hyper-V

    Après mon article sur la création de vSwitch en PowerShell, voici un petit script permettant de créer et configurer une VM dans Hyper-V. Le but de ce script est de :

    • Créer la VM
    • Configurer les paramètres virtuels de la VM
      • RAM
      • CPU
      • Generation de VM
      • Stockage et taille du VHD
    • Eventuellement monter un ISO dans le lecteur DVD
    • Connecter les vSwitch

    Ce script dispose de plusieurs paramètres obligatoires :

    • VMName : Nom de la VM à créer
    • VHDPath : Chemin ou sera stocké le VHD (penser à indiquer le nom du VHD dans le chemin --> D:\vhd\monVHD.vhd)
    • VHDSize : Taille du VHD en GB (exemple : 10GB)
    • VMMemory : RAM de la VM en MB (exemple : 1024MB)
    • VMGeneration : Génération de VM utilisée (par défaut à 2 mais peut être mis à 1)

    D'autres paramètres facultatifs existent : 

    • Processor : Le nombre de processeurs de la VM (par défaut à 1)
    • IsoPath : Le chemin de l'ISO à monter dans le lecteur DVD
    • InternalvSwitchName : Le nom du vSwitch interne s'il existe
    • PrivatevSwitchName : Le nom du vSwitch privé s'il existe
    • ExternalvSwitchName : Le nom du vSwitch externe s'il existe

    Quelques exemples d'utilisation de ce script : 

    • Création d'une VM avec tous les paramètres : .\HYPERV_New-VM.ps1 -VMName "TEST" -VHDPath "D:\Hyper-V\TEST.vhdx" -VHDSize 30GB -VMMemory 2048MB -Processor 2 -VMGeneration 2 -IsoPath "D:\SRV12.ISO" -InternalvSwitchName "Internal vSwitch" -ExternalvSwitchName "External vSwitch" -PrivatevSwitchName "Private vSwitch"
    • Création d'une VM en spécifiant nom, vhd, mémoire et génération : .\HYPERV_New-VM.ps1 -VMName "TEST" -VHDPath "D:\Hyper-V\TEST.vhdx" -VHDSize 30GB -VMMemory 2048MB -VMGeneration 2

    Le script est par ici :)

  • [PowerShell] Création de vSwitch Hyper-V sous Windows 10

    Sur mon PC tournant sous Windows 10, j'utilise Hyper-V pour virtualiser mes machines de test. Quand je réinstalle ma machine (ou mes machines :p), je n'aime pas y passer trop de temps. De ce fait j'ai scripté pas mal de choses dont la création des vSwitch Hyper-V. Du coup, dès que j'ai activé la fonctionnalité Hyper-V (en PowerShell bien sûr tel qu'indiqué dans un de mes anciens billets de blog), je fais tourner mon script de création de vSwitch.

    Le script a plusieurs paramètres :

    • NetworkAdapterName (Obligatoire) : Correspond au nom de votre carte réseau. Celle-ci sera utilisée lors de la création du vSwitch externe.
    • InternalVSwtich (Facultatif) : Vous mettrez ce booléen à $True si vous voulez disposer d'un vSwitch interne. Ce paramètre est à $False par défaut.
    • PrivateVSwitch (Facultatif) : Vous mettrez ce booléen à $True si vous voulez disposer d'un vSwitch privé. Ce paramètre est à $False par défaut.

    Exemples d'exécution du script :

    • Création d'un vSwitch externe, interne et privé basé sur une carte wifi nommée "wifi" : .\HYPERV_Add-HypervSwitch -NetworkAdapterName "wifi" -InternalVSwitch $True -ExternalVSwitch $True
    • Création d'un vSwitch externe uniquement basé sur une carte wifi nommée "wifi" : .\HYPERV_Add-HypervSwitch -NetworkAdapterName "wifi"


    Pour récupérer le script, c'est par ici :)

  • [PowerShell] Supprimer des doublons

    Un petit post qui n'est pas en relation avec mon travail mais avec PowerShell :P.

    Hier, en important des photos depuis mon appareil photo numérique (environ 1 000), j'ai fait une fausse manipulation et je me suis retrouvé avec toutes mes photos importées en double... La structure de nommage des doublons était NOM_DE_LA_PHOTO-001.JPG.

    J'ai donc décidé d'ouvrir ma petite console PowerShell afin de supprimer tous les doublons qui avaient été créés. Voici la commande que j'ai utilisé :

    Get-ChildItem VOTRE_CHEMIN -File | Where-Object Name -like "*-001.JPG" | Remove-Item

    Après exécution de cette commande, tous les doublons avaient été supprimés :)

  • [PowerShell] Récupérer la liste des comptes utilisateurs verrouillés

    J'ai eu besoin récemment de lister tous les utilisateurs AD qui avaient un compte vérrouillé puis de déverrouiller ces derniers.

    Pour ce faire, voici les commandes PowerShell utilisées (il faut avoir lancé une console PowerShell sur un DC en tant qu'administrateur) :

    • Import-Module ActiveDirectory : Permet de charger le module Active Directory
    • Search-ADAccount -LockedOut : Permet de lister tous les utilisateurs qui ont un compte AD verrouillé
    • Search-ADAccount -LockedOut | Unlock-ADAccount : Permet de déverrouiller tous les comptes verrouilés
  • [PowerShell] Script de création d'utilisateurs

    Dans le cadre de lab ou de tests que je peux effectuer, il me faut tout le temps recréer des comptes utilisateurs. Afin de ne pas avoir à faire cela à la main, j'ai créé un petit script qui prends les valeurs d'un fichier XML en entrée.

    Concernant le fichier XML, vous n'avez qu'à ajouter des blocs <User></User> en fonction de vos besoins et renseigner les informations à l'intérieur de ce dernier. J'ai inséré quelques utilisateurs fictifs dans mon fichier XML afin de vous montrer comment le constituer. Tout en haut du fichier, vous avez une balise GlobalPassword que vous pouvez remplir si vous voulez attribuer le même mot de passe à tous les utilisateurs. Si vous voulez configurer des mots de passe différents pour tous vos utilisateurs, renseignez la balise Password de chaque utilisateur.

    Une fois votre fichier XML correctement rempli, vous n'avez plus qu'à exécuter la commande suivante : .\AD_Add-ADUserAccounts.ps1 -OU "OU=User Accounts,OU=LAB,DC=lab,DC=local".

    Le paramètre OU permet de spécifier l'unité organisationnelle au niveau de laquelle vous voulez créer vos utilisateurs. Le script test si les utilisateurs existent déjà. Si ce n'est pas le cas ils seront créés :)

    Vous pouvez trouver le script sur mon dépot GitHub.

  • [PowerShell] SharePoint - Récupérer la liste des serveurs SharePoint

     Avec une seule ligne de PowerShell, il est possible de récupérer la liste de tous les serveurs WFE et APP de votre ferme SharePoint :

    Get-SPServer | ? {$_.Role -ne "Invalid"}

    Une partie des noms des serveurs à été masquée au niveau de la capture d'écran ;)

  • [PowerShell] Installer le .NET Framework 3.5

    Beaucoup de solution (comme SQL Server par exemple) exige en prérequis d'avoir le .NET Framework 3.5.

    Voici comment l'installer en PowerShell : Install-WindowsFeature -Name NET-Framework-Features -Source D:\sources\sxs.

    Pensez à avoir spécifier votre dossier SXS (avec le paramètre -Source). Ce dernier peut se situer sur un partage résuea ;)

  • [PowerShell] SharePoint - Récupérer la liste des administrateurs de la ferme

     J'ai récemment eu besoin de récupérer la liste des administrateurs d'une ferme SharePoint 2013 en utilisant PowerShell. Ceci peut être réalisé en 2 lignes :

    $CentralAdminWebApplication = Get-SPWebApplication -IncludeCentralAdministration | where-object {$_.IsAdministrationWebApplication}
    $SPFarmAdministrators = $CentralAdminWebApplication.Sites[0].RootWeb.SiteGroups["Farm administrators"].Users

    La 1ère ligne permet de récupérer uniquement l'application web de l'administration centrale.

    La 2nde ligne permet de récupérer tous les utilisateurs du groupe "Farm Administrators" et ainsi d'avoir une liste exhaustive de tous les administrateurs de votre ferme SharePoint :)

  • [SharePoint 2013] Installer le Workflow Manager 1.0 en ligne de commande

    Le but de cet article est de vous montrer comment télécharger et installer le workflow manager 1.0 pour SharePoint 2013 SP1. Une fois les sources téléchargées, vous pourrez les installer sur n'importe quelle serveur.

    Dans un premier temps, il faut télécharger Web Platform Installer 5.0. Une fois le package téléchargé, décompressez le dans un dossier (C:\_Sources dans mon exemple) en tapant la commande suivante :

    msiexec /a <chemin du msi téléchargé> /qb TARGETDIR=<chemin du dossier de décompression>

    Une fois ceci effectué, dirigez-vous dans le dossier de décompression puis dans le dossier Microsoft et enfin dans la dossier Web Platform Installer (C:\_Sources\Microsoft\Web Platform Installer dans mon cas) puis exécutez la commande suivante :

    WebpiCmd /Offline /Products:WorkflowManagerRefresh /Path:C:\_WorkFlowManagerSources

    Maintenant que les sources sont téléchargées, il faut les copier sur le serveur qui hérbergera Workflow Manager 1.0. Il faut également décompresser Web Platform Installer sur ce serveur. Une fois ceci effectué, entrez la commande suivante :

    WebpiCmd /Install /Products:WorkflowManagerRefresh /XML:VOTRE_CHEMIN\feeds\latest\webproductlist.xml

    Une fois la commande lancée, Web Platform Installer s'occupe d'installer toutes les dépendances liées au Workflow Manager ainsi que le Workflow Manager et indique lorsque toutes les installations sont terminées.

    Il ne vous reste "plus qu'à" installer les éventuelles mises à jour pour le Service Bus et pour le Workflow Manager (voir sur le Microsoft Download Center) ainsi que configurer Workflow Manager et SharePoint afin qu'ils puissent communiquer ensemble :)

  • [PowerShell] Astuce : Récupérer la liste de toutes les erreurs des journaux d'événements

    Voici une petite astuce afin de récupérer tous les logs de type 'Erreur' en PowerShell depuis vos journaux d'événements (votre console PowerShell doit être lancé en tant qu'administrateur) :

    Get-EventLog -List | Select-Object -ExpandProperty Entries -ErrorAction SilentlyContinue | Where-Object { $_.EntryType -eq 'Error' }

    Si vous voulez afficher tous les Warnings, remplacez $_.EntryType -eq 'Error' par $_.EntryType -eq 'Warning'.

  • [PowerShell] Configurer le fuseau horaire

    J'ai développé un petit script permettant de configurer le fuseau horaire en utilisant PowerShell. Ce script est composé d'une fonction nommée Set-TimeZone. Vous trouverez ce dernier ici :

    Voici comment utiliser ce script : Set-TimeZone -Name "New Caledonia"

    Vous devez renseigner le nom d'un des fuseaux horaires présents dans Windows au niveau du paramètre -Name. Une liste de ces derniers est disponible ici : https://goo.gl/oHTVvH

    Vous trouverez ce script sur mon repository GitHub :)

  • [PowerShell] Astuce : Désactiver l'ouverture automatique de Server Manager au démarrage

    Voici 2 petites lignes PowerShell permettant de désactiver l'ouverture automatique de Server Manager au démarrage :

    $serverManagerKey = "HKLM:\SOFTWARE\Microsoft\ServerManager"
    Set-ItemProperty -Path $serverManagerKey -Name "DoNotOpenServerManagerAtLogon" -Value 1

    Ceci a été testé sous Windows Server 2012 et Windows Server 2012 R2.

  • [DirSync] Filtrer les objets AD à synchroniser avec Office 365

    Lorsque vous avez installé et configuré DirSync, il est fort probable que tous vos comptes utilisateurs aient été synchronisés (comptes de services et autre). On a pas forcément envie / besoin de synchroniser 100% de ses comptes dans Office 365.

    Afin de pouvoir filtrer, lancez le logiciel Synchronization Service Manager situé ici : C:\Program Files\Windows Azure Active Directory Sync\SYNCBUS\Synchronization Service\UIShell\missclient.exe.

    Une fois l’outil démarré, dirigez-vous vers le menu Management Agent, sélectionnez Active Directory Connector. Une nouvelle interface apparaîtra à l’écran. Dirigez-vous vers le sous menu Configure Directory Partition puis cliquez sur Containers ….

    Une interface apparaîtra à l'écran en vous demandant d'entrer le login / mot de passe d'un administrateur. Une fois ceci effectué, l'interface de filtrage apparaîtra à l'écran. Sélectionnez uniquement les OUs contenant les utilisateurs que vous voulez synchroniser.