Blog de Florent Appointaire

Blog sur les technologies Microsoft (Windows Server, System Center, Azure, Windows Azure Pack/Azure Stack, etc;)
    • 22/12/2017

    Joyeuses fêtes de fin d'année

    Après une année 2017 chargée en nouveautés et avec toujours plus de travail / conférence / blog post, je vais prendre quelques jours de repos pour mieux attaquer 2018.

    C'est pourquoi, je tenais à vous souhaiter de bonnes fêtes de fin d'année, avec tout ce qui va avec.

    Encore merci de lire mes blog posts et rendez-vous en début d'année 2018.

    Florent

    • 25/9/2017

    [Honolulu] Découverte de la preview

    Microsoft a rendu disponible la semaine dernière, avant Microsoft Ignite, la première preview publique de sa nouvelle interface de gestion de l'infrastructure Hyper-V, appelé Honolulu:

    https://docs.microsoft.com/en-us/windows-server/manage/honolulu/honolulu

    Pour commencer, téléchargez le fichier d'installation:

    https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-honolulu

    Une fois téléchargé, vous pouvez l'installer sur:

    • Windows 10
    • Windows Server 2016

    Que ce soit une VM dédié, ou un hôte Hyper-V, il n'y a pas d'importance. Lancez le fichier d'installation, et démarrez la:

    Choisissez d'autorisé l'interface à modifier les Trusted Hosts du serveur qui reçoit l'installation:

    Choisissez le port d'installation de l'interface, et choisissez le certificat SSL si vous en avez un, sinon ce sera un self-signed:

    L'installation commence:

    Après quelques minutes, l'installation est terminée:

    Quand ceci est terminé, il vous suffit, via Edge ou Chrome, d'aller sur le nom de votre serveur, suivi du port, en https. Vous devriez arriver sur une page similaire:

    Ajoutez un serveur Hyper-V, ou un cluster, ou un cluster S2D, en cliquant sur Add suivi de votre choix:

    Renseignez le nom du serveur ou cluster, et cliquez sur Submit:

    Vous pouvez maintenant gérer votre serveur/cluster directement depuis cette interface:

    Vous pouvez voir l'état des machines virtuelles sur l'hôte/cluster:

    Enfin, si des modules sont disponibles pour améliorer l'interface, ils se trouveront dans les Settings > Extension Manager:

    Cette nouvelle interface est très prometteuse et très simple d'utilisation. Vous pouvez, via une seule console, faire les mises à jour des serveurs, gérer les serveurs, et toutes les fonctionnalités du serveur/cluster. N'hésitez pas à donner votre feedback ici: https://windowsserver.uservoice.com/forums/295071-management-tools/category/319162-project-honolulu 

    • 18/9/2017

    [GitHub Enterprise] Renouveller le certificat rapidement avec Let's Encrypt

    Le problème du Github Enterprise est que c'est une black box. C'est à dire, que vous ne pouvez rien modifier sur la VM, sinon l'application ne fonctionnera plus.

    Du coup, si vous souhaitez utiliser un certificat signé publiquement, et ne pas payer (+/- 1500€ pour 2 ans avec tous les noms DNS à rajouter...), il reste la méthode Let's Encrypt. Seulement, le certificat est valable que 3 mois... et vous devez ajouter les enregistrements DNS de type TXT, à la main, sur votre hébergeur DNS. Pas très pratique, et pas très intéressant.

    Après quelques recherches, je suis tombé sur le projet Dehydrated, qui permet d'automatiser la chose:

    https://github.com/lukas2511/dehydrated

    Ce tool vous permet de mettre à jour vos DNS sur votre hébergeur, de façon automatique, avec Let's Encrypt, et le protocole ACME-Server. J'ai trouvé une liste qui supporte plusieurs hébergeurs, et qui fonctionne avec ce projet:

    https://github.com/lukas2511/dehydrated/wiki/Examples-for-DNS-01-hooks

    Pour ma part, mon hébergeur est Azure, j'ai donc utilisé ce projet: https://github.com/jangins101/letsencrypt-azuredns-hook

    Ce que je vais expliquer maintenant sera toujours pareil,pour n'importe quel hébergeur (il faudra juste adapter le nom). Utilisant Azure, je vais installer Azure CLI sur mon serveur Debian (étant donné que je ne peux rien installer sur mon serveur Github, j'utilise un serveur séparé), ainsi que le logiciel dehydrated, certbot (qui permet d'utiliser Let's Encrypt pour générer le certificat):

    echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ wheezy main" | sudo tee /etc/apt/sources.list.d/azure-cli.list
    curl -sL https://deb.nodesource.com/setup | sudo bash -
    sudo apt-key adv --keyserver packages.microsoft.com --recv-keys 417A0893
    sudo apt-get install apt-transport-https
    sudo apt-get update && sudo apt-get install nodejs-legacy git dehydrated letsencrypt certbot jq
    sudo apt-get install libssl1.0.0=1.0.1t-1+deb8u6 libssl-dev nodejs-dev node-gyp npm
    sudo npm install -g azure-cli

    Nous allons ensuite récupérer les sources de notre hébergeur (Azure pour moi):

    sudo mkdir /var/scripts/letsencrypt
    cd /var/scripts/letsencrypt
    sudo git clone https://github.com/jangins101/letsencrypt-azuredns-hook.git

    Si vous n'avez pas créé de SPN pour vous connecter à Azure, éditez le fichier createSPN.sh et créez ce dernier ou utilisez la version manuel

    Une fois ceci terminé, éditez le fichier config.sh pour utiliser la CA de production, et non de staging et modifiez le chemin BASEDIR avec le chemin où sera stocké les certificats:

    sudo vi /var/scripts/letsencrypt/letsencrypt-azuredns-hook/config.sh

    Il faut maintenant modifier le fichier azure.hook.sh avec les informations que vous avez récupéré lors de la création du SPN (nom de votre Azure AD, le nom d'utilisateur SPN et le mot de passe, le groupe de resource où est stocker la zone DNS, le nom de la zone DNS et la TTL):

    sudo vi /var/scripts/letsencrypt/letsencrypt-azuredns-hook/azure.hook.sh

    Le script va se connecter et mettre à jour les DNS avec la valeur TXT qu'il aura récupéré de Let's Encrypt. J'ai ensuite fait un petit script, qui va faire la demande du certificat, et mettre à jour le certificat automatiquement, via l'API Github Enterprise. Vous devez adapter la valeur où se trouve le script, ainsi que le nom DNS de votre Github Enterprise. Le script est disponible ici:

    https://github.com/Flodu31/Bash/blob/master/GithubRenewCert.sh

    Pour l'exécuter, utilisez la commande suivante, et fournissez le mot de passe de l'administration du Github:

    sudo bash /var/scripts/GithubRenewCert.sh

    Comme vous le voyez, le script va tout faire de façon automatique et après quelques minutes, votre certificat sera à jour:

      

    Si vous avez des questions, n'hésitez pas 

    • 17/7/2017

    [PowerShell] Utiliser des APIs

    Voulant utiliser une API GitHub avec Azure Automation, j’ai du me lancer dans la découverte de l’utilisation des APIs avec PowerShell.

    Le première chose est de trouver la documentation pour l’API Github: https://developer.github.com/v3/ 

    La deuxième a été de trouver la cmdlet PowerShell pour utiliser les APIs, Invoke-RestMethod: https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.utility/invoke-restmethod

    Une fois que vous avez ceci, vous pouvez commencer à travailler 

    Pour pouvoir vous authentifier via une API, nous devons passer un token dans le header. Pour Github, vous pouvez générer un token ici: https://github.com/settings/tokens

    Assurez vous de bien copier le token car vous ne pourrez pas le récupérer par la suite.

    Si vous allez sur l’URL suivante, https://api.github.com/, vous pourrez voir les actions que vous pouvez effectuer via l’API:

    A savoir, vous avez plusieurs méthodes pour utiliser une API:

    • GET
    • POST
    • PUT
    • DELETE
    • Etc.

    Nous allons voir comment utiliser quelques méthodes, en manipulant les répertoires ( https://developer.github.com/v3/repos/ ).

    Les URLs commençeront toujours par https://api.github.com et à la suite, nous ajouterons les options, suivant ce que l’on souhaite faire, et sur quoi.

    Commençons avec la méthode GET. Nous allons récupérer maintenant la liste de nos répertoires qui existent pour notre compte Github:

    $token = "yourtoken"
    $
    tokenAuth = "token $token"                                                                                           
    $headers = @{ Authorization = $tokenAuth }                                                                  
    $basedURL = 'https://api.github.com'                                                                       
    $uri = $basedURL + "/user/repos"                                                                                      
    $req = Invoke-RestMethod -Uri $uri -Headers $headers
    foreach ($r in $req){

                Write-Output $r.Name
                Write-Output $r.url

    }

    Passons maintenant à la méthode POST. Grace à cette méthode, nous allons pouvoir créer des repositories par exemple.

    $token = "token"                                                                       
    $tokenAuth = "token $token"                                                                                            
    $headers = @{ Authorization = $tokenAuth }
    $body = '{

      "name": "FlorentAppointairePowerShell",
      "description": "This is a test :)",
      "homepage": "https://microsofttouch.fr",
      "private": false,
      "has_issues": true,
      "has_projects": true,
      "has_wiki": true

    }'                          

    $basedURL = 'https://api.github.com'                                                                       
    $uri = $basedURL + "/user/repos"
                                                                                         
    Invoke-RestMethod -Uri $uri -Headers $headers -Method POST -Body $body

    Et l'interface web:

    Nous allons maintenant supprimer ce répertoire avec la méthode DELETE:

    $token = "token"                                                                 
    $tokenAuth = "token $token"                                                                                           
    $headers = @{ Authorization = $tokenAuth }                                      
    $basedURL = 'https://api.github.com'
    $uri = $basedURL + "/repos/flodu31/FlorentAppointairePowerShell"                                                                                       
    Invoke-RestMethod -Uri $uri -Headers $headers -Method DELETE

    Depuis l'interface, le répertoire a disparu:

    Cette nouvelle méthode que j'ai découvert est très intéressante pour la partie automatisation, parce que vous pouvez faire ce que vous voulez, si l'API le permet bien sur 

    N'hésitez pas à me contacter si vous avez des questions  

    • 8/5/2017

    Synology, UPS et Hyper-V

    J’ai récemment acheté un UPS pour mes Hyper-V et mon Synology pour palier aux coupures de courant qu’il y a dans mon quartier.

    C’est un APC: https://www.amazon.fr/gp/product/B002TANS0I/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1

    Le problème est l’autonomie de la batterie comparée à la longueur des coupures de courant.

    J’ai donc regardé comment controler l’UPS, avec le Synology, étant donné qu’il y a qu’un port Ethernet/usb et que j’ai 2 Hyper-V, le plus simple reste de controler l’UPS via mon unique Synology.

    Pour commencer, branché le cable fourni avec votre UPS sur l’ethernet de votre UPS, vers un port USB du Synology:

     Allez maintenant dans votre interface d’administration de votre Synology, dans la partie Control Panel > Hardware & Power > UPS et cochez la case Enable UPS Support:

    Vous pouvez ensuite adapter les valeurs avec le temps au bout de combien de temps votre Synology doit entrer en Safe Mode, si on doit éteindre l’UPS quand le Synology rentre en Safe Mode et surtout, cochez la case Enable network UPS server. Et dans Pemitted DiskStation devices, rentrez les addresses IP de vos Hyper-V. Vous pouvez avoir des informations concernant votre UPS:

    Il faut maintenant installer le logiciel WinNUT que vous pouvez trouver ici:

    http://code.google.com/p/winnut/downloads/list

    Ce logiciel doit être installé sur les Hyper-V:

    Cochez la case Install As Service (Automatic Startup) et cliquez sur le bouton Edit pour modifier la configuration:

    C’est ici que nous allons renseigner les informations de connexion vers le Synology.

    Pour commencer, vous devez récupérer le nom d’utilisateur/mot de passe pour l’UPS sur le Synology. Connectez-vous en SSH sur votre Synology et faites:

    sudo cat /usr/syno/etc/ups/upsd.users

    Vous devriez avoir ceci:

    L’utilisateur pour se connecter l’UPS sera donc monuser et le mot de passe sera secret. Vous pouvez bien entendu modifier ces valeurs. 

    Maintenant, dans votre fichier de configuration sur votre Hyper-V, remplissez la chaine de connexion comme ceci: 

    MONITOR SynologyUser@IPSyno 1 UPSUser UPSPassword Slave

    Une fois terminé, sauvegardez la configuration et cliquez sur Apply and Start WinNUT. Vous pouvez vérifier que le service est bien démarré: 

    Get-Service WinNutUPSMon | Select *

    Votre Synology contrôle maintenant les Hyper-V et les éteindra avant de s’éteindre.

    • 26/4/2017

    [StarWind] Virtual SAN Free sur Linux sous forme d'appliance

     

    StarWind a rendu disponible StarWind Virtual SAN Free sur Linux le 25 Avril 2017. Celle ci est sous forme d'appliance (VSA pour Virtual Storage Appliance) et vous propose d'utiliser la console directement depuis un navigateur web.

    Pour commencer, il faut vous inscrire pour pouvoir télécharger l'appliance pré installée et qui est disponible pour VMWare ESX, Hyper-V et KVM:

    https://www.starwindsoftware.com/download-starwind-virtual-san-vsa

    Je vais parler de la partie Hyper-V. Téléchargez l'image pour Hyper-V.

    Une fois que vous avez extrait l'image, vous devriez avoir un VDHX de 10GB environ.

    Créez une VM, de type Generation 1 avec plusieurs cartes réseaux si vous souhaitez séparer le traffic, plusieurs disques, etc:

    Une fois terminé, si vous lancez la console, vous devriez vois l'interface de management de StarWind:

    Connectez-vous au serveur et fermez le message de configuration en cliquant sur la croit en haut à droite de la fenêtre.

    Vous avez 2 possibilités pour connecter votre VM:

    • Avec un réservation DHCP (mon cas)
    • En allant dans Configuration > Network > YouManagementCard > Modify

    Connectez vous via un navigateur à la console StarWind (utilisateur et mot de passe par défaut: starwind):

    Vous devriez avoir tous les disques que vous avez déjà lié à la VM. Si vous en ajoutez un par la suite, cliquez sur Scan Storage:

    Le nouveau disque devrait apparaitre:

    Choisissez un disque et créez un volume en cliquant sur Create Volume:

    Maintenant, vous avez votre nouveau volume:

    Vous pouvez modifiez l'IP adresse directement depuis la partie VSA Network Settings, si vous avez plusieurs carte, pour isoler le trafic:

     Vous êtes maintenant prêt pour créer votre premier volume. Cliquez sur Add Device (advanced) et suivez les étapes pour créer le volume:

    Le volume a été créé correctement et il peut être présenté à une ou plusieurs machines: 

    Sur le serveur windows, ajoutez comme target iSCSI l'adresse IP du serveur Starwind (l'interface réseau du stockage, pas du management):

    Après quelques instants, vous pouvez voir dans la console le nouveau serveur qui est connecté:

    Vous pouvez initialiser le disque, et le formater: 

    Une fois de plus, StarWind facilite l'accès au stockage partagé en proposant directement une version pré-installé et pré-configuré, idéal pour les petites/moyennes entreprises, qui n'utilisent pas Windows Server et qui souhaite utiliser facilement du storage qui se trouve dans un seul serveur, pour plusieurs serveurs :)

    • 10/4/2017

    [Windows Server 2016] Passer de Evaluation à Retail


    Si comme moi, vous n’avez pas pu attendre la sortie de la version retail pour installer Windows Server 2016 l’an dernier, il va falloir activer le serveur si vous souhaitez continuer à l’utiliser.

    Vous trouverez plus d’informations ici : https://technet.microsoft.com/en-us/windows-server-docs/get-started/supported-upgrade-paths?f=255&MSPPError=-2147217396

    Pour faire ceci, il faut que la version soit au moins 14393.0.161119-1705.RS1_REFRESH.

    Pour vérifier que vous êtes bien en version d’évaluation, utilisez la commande suivante :

    slmgr.vbs /dlv

    Vérifiez ensuite si votre serveur est en licence Standard ou Datacenter pour installer la clé qui correspond à votre version. Dans mon cas, c’est une licence Datacenter:

    DISM /online /Get-CurrentEdition

    Lancez l’installation ce la clé avec la commande suivante :

    DISM /online /Set-Edition:ServerDatacenterCor /ProductKey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /AcceptEula

      

    Après quelques instants, le serveur va vous demander de redémarrer:

    Après le redémarrage, vous pouvez vérifier que la clé a bien été installé et que vous êtes maintenant en version retail avec la commande suivante :

    slmgr.vbs /dlv

    • 30/3/2017

    [GitHub Enterprise] Sauvegardez le contenu

    Si vous ne sauvegardez pas votre machine qui contient votre GitHub Enterprise, vous pouvez sauvegarder directement le contenu GitHub du serveyr. Mon serveur de backup est sous Debian 8. La première étape est d'installer rsync si il n'est pas encore installé:

    apt-get update && apt-get install rsync

    Maintenant, téléchargez l'utilitaire de backup et décompressez le. Copiez la configuration et modifiez la:

    wget https://github.com/github/backup-utils/releases/download/v2.9.0/github-backup-utils-v2.9.0.tar.gz
    sudo tar -xvzf github-backup-utils-v2.9.0.tar.gz
    cd /tmp/github-backup-utils-v2.9.0
    sudo cp backup.config-example backup.config
    sudo vi backup.config

    Ajoutez le nom de votre serveur GitHub (assurez-vous de pouvoir pinguer ce serveur) et sauvegardez la configuration:

    Maintenant; exécutez la commande suivante pour effectuer votre première sauvegarde:

    cd bin/
    sudo ./ghe-backup -v

    -v est pour le verbose.

    Acceptez le certificate. La sauvegarde démarre:

    Maintenant que votre serveur Github est sauvegardé, déployez un nouveau serveur GitHub ou utilisez celui ci.

    Si vous utilisez un nouveau serveur GitHub, importez le certificat, refaites la configuration de base, comme l'intégration SAML, etc.

    Maintenant, enregistrez la clé SSH de votre serveur de sauvegarde dans l'interface GitHub et placez votre serveur GitHub en mode maintenance:

    Vous pouvez démarrer la restauration avec la commande suivante:

    sudo ./ghe-restore IPADDRESS -v

    IPADDRESS est l'adresse ip du serveur qui contient le GitHub où vous souhaitez restaurer la dernière sauvegarde:

    C'est très simple à faire avec cet outil mais aussi très simple à automatiser avec un job cron.

    • 28/3/2017

    [GitHub Enterprise] Changer le certificat avec Lets Encrypt

    Par défaut, le certificat utilisé pas le serveur GitHub Enterprise est auto-signé. Si vous ne pouvez pas acheter de certificat, vous pouvez utiliser LetsEncrypt pour avoir un certificat trusté publiquement. Celui ci doit être renouvelé tous les 3 mois.

    Le serveur GitHub est comme une appliance, il ne faut rien installer dessus, c'est pourquoi, pour générer ce certificat, il faut utiliser un autre serveur. Je vais utiliser un serveur sous Debian 8 pour faire ceci. Nous allons utiliser le paquet certbot pour générer le certificat.

    La première étape est d'enregistrer le répertoire et installer le paquet:

    echo "deb http://ftp.debian.org/debian jessie-backports main" | sudo tee -a /etc/apt/sources.list
    sudo apt-get update
    sudo apt-get install certbot -t jessie-backports

    Quand c'est terminé, utilisez la commande suivante pour démarrer la génération du certificat public, avec le nom GitHub et les noms DNS inclus. Remplacez domaine.be par votre nom DNS:

    sudo certbot certonly --manual --preferred-challenges dns -d github.domain.be -d alambic.github.domain.be -d assets.github.domain.be -d avatars.github.domain.be -d codeload.github.domain.be -d gist.github.domain.be -d pages.github.domain.be -d render.github.domain.be -d reply.github.domain.be -d uploads.github.domain.be -d raw.github.domain.be -d media.github.domain.be

    Le script va vous demander de créer des enregistrement DNS, de type TXT, pour chaque sous-domaine, avec une valeur spécifique, pour vérifier que vous êtes bien le propriétaire du domaine:

    Quand c'est terminé, vous avez un message d'information:

    Sur le serveur, créez un répertoire temporaire, et copiez y le certificat fullchain.pem et privkey.pem dans ce dossier:

    sudo mkdir /tmp/certificates
    sudo cp /etc/letsencrypt/live/github.domain.be/fullchain.pem /tmp/certificates/fullchain.pem
    sudo cp /etc/letsencrypt/live/github.domain.be/privkey.pem /tmp/certificates/privkey.pem

    Quand c'est terminé, téléchargez ces certificats sur l'ordinateur depuis lequel vous allez faire la configuration GitHub. Connectez vous à l'interface d'administration, dans la partie Privacy et sélectionnez vos 2 certificats. Cliquez sur Save sur la gauche:

    Les services vont redémarrer:

    Les services ont redémarré correctement:

    Si vous rafraichissez votre page GitHub, vous allez avoir votre nouveau certificat, validé par votre navigateur:

    Et depuis l'interface d'administration GitHub, vous avez un certificat valide:

    C'est gratuit, rapide à mettre en place, donc oubliez les certificats auto signés et utilisez des certificats valides :)

    • 13/3/2017

    [GitHub Enterprise] Authentification avec Azure AD

    Avec les dernières versions de GitHub Enterprise, il est possible d'utiliser l'authentification via SAML, ce que propose Azure AD. Pour mettre en place ceci, il vous faut donc:

    • Un Azure AD
    • Un environnement GitHub Enterprise

    Pour commencer, il faut créer une application sur votre Azure AD. Depuis le nouveau portail, allez dans votre Azure AD, et créez une nouvelle application, de type WebApp / API. La partie SignOn URL correspond à l'URL de votre GitHub Enterprise:

    Vérifiez bien dans l'application que les permissions soient bien avec au moins Sign in and read user profile:

     

    Il faut maintenant récupérer le fichier FederationMetadata.xml. Pour ce faire il faut aller sur l'URL suivante, en remplaçant l'ID par l'ID de votre tenant, que vous pouvez retrouver dans votre Azure AD:

    https://login.windows.net/TENANTID/FederationMetadata/2007-06/FederationMetadata.xml

    Récupérez la valeur qui se trouve au niveau de la flèche, dans la balise X509Certificate:

    Copiez les données dans un fichier texte, puis, tous les 80 caractères, allez à la ligne:

    Enregistrez ce fichier avec l'extension .cert

    Allez maintenant sur la page d'administration de votre GitHub Enterprise, dans la partie Authentication. Ici, choisissez SAML et dans Single Sign On URL, fournissez l'URL suivante, en remplaçant TENANTID par l'ID de votre Azure AD. Fournissez le certificat que vous avez enregistré avant:

    https://login.microsoftonline.com/TENANTID/saml2 

    Sauvegardez. Vous devriez avoir ceci:

    Allez maintenant sur votre URL GitHub. Au moment de vous connecter, vous devriez être redirigé vers la page d'authentification de Microsoft. Connectez-vous avez votre compte Azure AD. Vous devriez ensuite arriver sur la page GitHub:

    Comme vous pouvez le voire, le . dans le nom d'utilisateur est remplacé par un -.

    Bon courage pour cette manipulation et n'hésitez pas si vous avez des questions :)

    • 16/2/2017

    FALA Consulting

    Bonjour à tous,

    Je profite de ce billet pour vous annoncer que je viens d'ouvrir ma SPRL en Belgique, sous le nom de FALA Consulting SPRL: http://www.falaconsulting.be

    Je suis disponible pour vous aider à migrer vers Azure par exemple, mais aussi pour tout ce qui tourne autour des Technologies Microsoft, et plus particulièrement Azure Stack, WAP, System Center, Hyper-V.

    N'hésitez pas à me contacter si vous souhaitez avoir des renseignements à florent [at] falaconsulting.be

    Florent

    • 24/1/2017

    [Containers] Comment fonctionne les licences avec les Windows Containers?

    Lors de ma dernière session sur les Windows Containers, la question du mode de licence m'a été posée. Je n'avais aucune idée de cette dernière, étant donné que Microsoft n'avait pas (encore) communiqué la dessus. C'est chose faite maintenant:

    https://www.microsoft.com/en-us/Licensing/product-licensing/windows-server-2016.aspx

    Le mode de licence est assez simple. En effet, il y a 2 types de Windows Containers:

    • Windows Server Containers
      • Nombre illimité de containers sur les versions Datacenter et Standard
    • Hyper-V Containers
      • Nombre illimité sur la version Datacenter et limités à 2 pour la version Standard

    Le modèle pour les Hyper-V Containers est exactement le même que pour les VMs, ce qui est normal, car lorsque vous déployer un Hyper-V Container, un nouvel OS est utilisé.

    Le modèle pour les Windows Server Containers utilise lui le noyau de votre serveur Windows de base, et donc, vous partagez le même noyau avec tous vos containers.

    En espérant que le modèle de licence est maintenant plus clair pour vous :)

    • 12/1/2017

    [Conférences] Azure/Azure Stack & Windows Containers

    Au mois d'Octobre 2016, j'ai eu l'occasion de parler pendant 20 minutes à propos de Azure et Azure Stack, à Experiences (anciennement Techdays). Vous pouvez retrouver cette session ici: https://experiences.microsoft.fr/Video/azure-azure-stack-un-script-pour-2-environnements/b7d9d4e7-5bb7-481b-87d5-fb033a054664#H12Y3Oi0BKRAg32R.97

    Et le lien direct vers la vidéo: https://www.youtube.com/watch?v=mOAuspAvPwg

    Concernant la 2ème session que j'ai donné le 11 Janvier pour le PowerShell User Group Français: https://frpsug.github.io/2017/01/11/FrPSUG05-Enregistrement/ 

    Le lien de la session est ici: https://www.youtube.com/watch?v=u05rSvsLTxA

    Et les sources: https://github.com/FrPSUG/Presentations/tree/master/20170111-Windows%20Containers%20(Florent%20Appointaire)

    En espérant que ces sessions vous plairons si vous n'avez pas pu les voirs :)

    • 3/1/2017

    Bonne année 2017

    Je profite de ce poste pour vous présenter tous mes meilleurs voeux pour 2017.

    Pour ma part, 2017 est l'année du changement. En effet, je viens de quitter Devoteam et j'ai rejoins une petite société, Oliléo, pour faire de la consultance Azure/Datacenter mais aussi m'occuper de la partie Community.

    Concernant mon année 2016, j'ai eu la chance de devenir MVP pour la première fois, dans la catégorie Cloud and Datacenter Management. Grace à ce titre, j'ai aussi pu me rendre au MVP Summit, à Seattle. Une expérience très enrichissante, où j'ai pu rencontrer des personnes super cool mais aussi très très forte dans chaque domaine.

    En espérant que 2017 soit couronnée de succès comme en 2016 et que vous serez aussi nombreux à nous lire sur Microsofttouch.fr :)

    Florent

    • 21/12/2016

    [ADFS] Authentification avec un certificat

    Ayant marre d'écrire mon nom d'utilisateur/mot de passe à chaque fois, j'ai décidé d'implémenter l'authentification avec un certificat. Je vais donc vous expliquer comment faire. Vous pouvez également utiliser ce tutoriel pour le MFA (Multi Factor Authentication). Seul la configuration ADFS changera.

    Pour commencer, vous devez avoir une PKI d'entreprise (vous pouvez lire cette très bonne série d'articles de mon collègue Romain :) ) et un ou plusieurs serveurs ADFS fonctionnelles.

    Une fois que vous avez ces prérequis, vous pouvez commencer. La première chose à faire est de déployer un template dans votre PKI. Ce template, de type Client Authentication, vous donnera la possibilité de vous authentifier, via un certificat. Allez dans la console Certification Authority et cliquez sur Certificate Template puis Manage. Dupliquez le certificat User. Je vais lui donner le nom de User_adfs:

    Donnez ensuite la possibilité de faire un Autoenroll à un groupe, ou aux utilisateurs authentifiés:

    Retournez sur la console Certification Authority et cliquez sur Certificate Template puis New > Certificate Template to issue et choisissez votre certificat User_adfs pour publier votre certificat:

    Nous allons maintenant activer l'auto enrollement via GPO. Comme ça, dès que un utilisateur va se logguer sur sa session pour la première fois, un certificat lui sera généré. Modifiez votre GPO de base, et allez dans User Configuration > Policies > Windows Settings > Security Settings > Public Key Policies. Activez la GPO avec le paramètre Auto-Entollment et modifiez la comme dans ma capture:

    Si vous faites gpupdate /force sur un serveur/laptop avec votre utilisateur actuel, un certificat sera généré:

    La partie autoenrollment fonctionne donc correctement. La prochaine étape est de modifier l'ADFS pour utiliser ce certificat. Mon ADFS étant en server core, je vais faire ces modifications en PowerShell. 

    Commençons par ouvrir le port 49443 en TCP IN sur nos serveurs WAP, si vous en avez, sinon, sur votre ADFS. C'est un prérequis pour utiliser l'authentification via certificat: https://blogs.technet.microsoft.com/pauljones/2014/06/10/adfs-needs-port-49443/

    Je vais exécuter les commandes suivantes, pour rajouter l'authentification via certificat disponible, en plus de la partie Windows authentication, etc. La première partie de la commande modifie pour les utilisateurs qui sont dans l'intranet, et l'autre depuis Internet. Je redémarre ensuite le service et vérifie que les paramètres sont bien appliqués:

    Set-AdfsGlobalAuthenticationPolicy -PrimaryIntranetAuthenticationProvider CertificateAuthentication, WindowsAuthentication, FormsAuthentication, MicrosoftPassportAuthentication
    Set-AdfsGlobalAuthenticationPolicy -PrimaryExtranetAuthenticationProvider CertificateAuthentication, FormsAuthentication, MicrosoftPassportAuthentication
    Restart-Service adfssrv
    Get-AdfsGlobalAuthenticationPolicy

    N'oubliez pas que vous pouvez également faire ceci pour le MFA.

    Je vais maintenant lancer une application qui utilise mon ADFS, Windows Azure Pack. Comme vous pouvez le voir, je peux m'authentifier avec un utilisateur/mot de passe ou avec un certificat:

    Si je choisis l'option avec certificat, mon store personel avec les certificats est listé, et je peux choisir le certificat qui convient:

    Après l'avoir choisi, je suis connecté, avec le bon compte utilisateur associé à ce certificat:

    Enjoy :)

    • 16/12/2016

    [Docker] Image2Docker: Bye bye IIS sur Windows Server, Hello IIS sur Windows Containers

    Image2Docker est un outil de conversion de certains de vos rôles Windows Server vers des Containers docker (sur Windows, évidemment).

    Avec cette nouvelle version, il est possible d'extraire les sites web ASP.NET pour les faire tourner dans des conteneurs. Pour commencer, j'ai créé une VM avec 3 sites ASP.NET. Voici la vue depuis IIS Manager:

    Et la vue depuis Internet Explorer:

    Ici, nous allons migrer le site web WebApiApp. Pour commencer, sur la machine d'où vous voulez convertir ces sites, installez le module PowerShell Image2Docker:

    Install-Module Image2Docker

    Voici les rôles qu'il est possible de convertir en conteneur windows:

    Maintenant, copiez le VHD ou VHDX où sont stockés les sites web. Exécutez la commande suivante pour extraire tous les sites web:

    ConvertTo-Dockerfile -ImagePath C:\Temp\FLOAPP-IIS01_OS.vhdx -OutputPath C:\Temp\GlobalIIS -Artifact IIS -Verbose

    L'argument ImagePath contient le chemin vers votre VHD/VHDX, le paramètre OutputPath est le chemin où les fichiers seront copiés et enfin, le paramètre Artifact est IIS pour préciser de s'occuper que des sites web et rien d'autre. Après quelques instants, vos sites sont extraits:

    Comme vous le voyez, un fichier Dockerfile est apparu. Ce fichier contient tous les paramètres nécéssaires pour créer une image WindowsServerCore sur un container, ajouter les features IIS pour exécuter des sites web ASP.NET, copiez les sources dans le bon dossier IIS du container, créer le site web associé et enfin, exposer le port publiquement:

    Je vais maintenant extraire un seul site, en rajoutant le paramètre ArtifactParam suivi du nom du site web:

    ConvertTo-Dockerfile -ImagePath C:\Temp\FLOAPP-IIS01_OS.vhdx -OutputPath C:\Temp\WebApiApp -Artifact IIS -ArtifactParam WebApiApp -Verbose

    Voici le Dockerfile associé, avec cette fois, un seul site web à créé, ce qui est normal, car j'ai demandé l'extraction d'un seul site:

    Nous allons maintenant créer l'image docker à partir de ce Dockerfile. Pour créer l'image, déplacez vous dans le dossier où est le Dockerfile et exécutez la commande suivante. Vous pouvez modifier le nom de l'image qui est dans mon cas florentapp/webapiapp:

    cd C:\Temp\WebApiApp
    docker build -t florentapp/webapiapp .

    Créez maintenant un container à partir de cette image. Pour ma part, j'expose le port 8080 que je lie avec le port 8080 du site web qui est sur mon container. Je lui donne également le nom webapiapp. La commande docker logs me donne l'information des logs du container, et notamment le moment quand le service IIS est démarré:

    docker run -d -p 8080:8080 --name webapiapp florentapp/webapiapp
    docker logs webapiapp

    Utilisez ensuite la commande docker inspect pour retrouver l'adresse IP de votre container:

    docker inspect webapiapp

    Avec Internet Explorer, vous pouvez accéder à votre site web qui est sur votre container:

    http://172.19.136.162:8080

    Sur le serveur qui exécute le container IIS, vous aurez pour chaque container IIS un service w3wp qui sera créé.

    En espérant que ce script vous aidera à migrer rapidement vos sites web vers des containers Windows.

    Si vous avez des questions, n'hésitez pas :)

    • 25/11/2016

    [SQL Server] Installation de SQL Server sur Ubuntu 16.10

    Microsoft a rendu disponible la première version de SQL Server sur Linux en Public preview. La communication est disponible ici: https://www.microsoft.com/en-us/sql-server/sql-server-vnext-including-Linux

    La documentation officielle est disponible ici: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-overview

    Pour commencer, vous devez déployer un serveur sous Ubuntu 16.04 ou 16.10 avec minimum 3.5GB de RAM (sinon vous aurez une erreur au moment de l'installation). J'ai également créé un enregistrement DNS, pour mon serveur linux.

    Commencez par ajouter la list des sources Microsoft pour SQL Server, à votre serveur Ubuntu:

    curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
    curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server.list | sudo tee /etc/apt/sources.list.d/mssql-server.list

    Ensuite, lancez les commandes suivantes pour lancer l'installation de SQL Server:

    apt-get install -y apt-transport-https
    sudo apt-get update
    sudo apt-get install -y mssql-server

    Comme c'est indiqué, exécutez la commande suivante pour accepter la licence, fournir le mot de passe du compte SA, et choisissez si vous souhaitez démarrer le service SQL maintenant et au démarrage:

    sudo /opt/mssql/bin/sqlservr-setup

    Vous pouvez vérifier que votre service est bien installé avec la commande suivante:

    systemctl status mssql-server

    Si vous avez déjà SQL Server Management Studio installé, vous pouvez vous connecter à votre instance, sinon, installez le:

    J'ai ensuite créé un nouvel utilisateur, Florent, qui est Sysadmin de l'instance:

    Pour terminer le test, vous pouvez installer les outils pour vous connecter à SQL Server depuis votre Ubuntu. Utilisez les commandes suivantes:

    curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
    curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
    sudo apt-get update
    sudo apt-get install mssql-tools

    Enfin, vous pouvez vous connecter à votre instance avec la commande suivante:

    sqlcmd -S localhost -U SA -P '<YourPassword>'

    Pour ce test, vous pouvez créer une nouvelle base de données, créer une table, ajouter des données et effectuer une requête:

    CREATE DATABASE Microsofttouch;
    GO
    USE Microsofttouch;
    GO
    CREATE TABLE florentapp (id INT, name NVARCHAR(50), quantity INT);
    GO
    INSERT INTO florentapp VALUES (1, 'France', 150);
    INSERT INTO florentapp VALUES (2, 'Belgique', 154);
    GO
    SELECT * FROM florentapp WHERE quantity > 152;
    GO

    Depuis SQL Server Management Studio:

    J'ai également joint mon Ubuntu au domaine grace au poste suivant: http://microsofttouch.fr/default/b/florent/posts/ubuntu-joindre-un-serveur-au-domaine

    Mais j'ai un problème au moment de l'ajout de l'utilisateur dans SQL Server:

    Si quelqu'un a une solution, je suis preneur merci :)

    Cette première version est très prometteuse, et l'avantage, c'est que c'est très rapide à installer et à gérer.

    • 23/11/2016

    Windows Server 2016 / System Center 2016

    Ce poste aura pour but de vous expliquer l’infrastructure que j’ai chez moi pour mon LAB et référencera les articles qui vous aiderons à mettre en place votre LAB.

    Pour commencer, j’ai acheté 2 Intel NUC 6th génération en core i5, avec 500GB de SSD M2 et 32GB de RAM chacun.

    J’ai installé sur chacun d’eux Windows Server 2016 Server Core et j’ai installé Hyper-V. J’ai fait les configurations et j’ai ensuite déployé une VM qui contient pfSense, un firewall/routeur virtuel, très léger et pleins de fonctionnalités/plugins: https://pfsense.org/

    Sur cette VM, j'ai un VPN S2S vers Azure: http://microsofttouch.fr/default/b/florent/posts/pfsense-vpn-s2s-avec-azure

    J’ai ensuite déployé les composants System Center, dans l’ordre suivant :

    [SQL Server 2016] Installer SQL Server 2016 sur Windows Server Server Core : http://microsofttouch.fr/default/b/florent/posts/sql-server-installer-sql-server-2016-sur-windows-server-server-core

    [SCVMM 2016] Installation sur Windows Server 2016 Server Core : http://microsofttouch.fr/default/b/florent/posts/scvmm-2016-installation-sur-windows-server-2016-server-core

    [SCOM 2016] Installation sur Windows Server 2016 Server Core : http://microsofttouch.fr/default/b/florent/posts/scom-2016-installation-sur-windows-server-2016-server-core

    [SCORCH 2016] Installation sur Windows Server 2016 Server Core : http://microsofttouch.fr/default/b/florent/posts/scorch-2016-installation-sur-windows-server-2016-server-core

    [SCSM 2016] Installation sur Windows Server 2016 Server Core : http://microsofttouch.fr/default/b/florent/posts/scsm-2016-installation-sur-windows-server-2016-server-core

    [SCSPF 2016] Installation sur Windows Server 2016 : http://microsofttouch.fr/default/b/florent/posts/scspf-2016-installation-sur-windows-server-2016

    [SCSMA 2016] Installation sur Windows Server 2016 : http://microsofttouch.fr/default/b/florent/posts/scsma-2016-installation-sur-windows-server-2016

    Voici donc les VMs qui sont sur mes Intel NUC, depuis la console SCVMM :

    Comme vous pouvez le voir, en plus des composants System Center et de WAP, j'ai également un environnement Docker Datacenter et un cluster S2D sur Nano Server.

    Au final, avec mes 2 NUCs, j'ai largement de quoi faire tourner un environnement de démonstration pour mes clients, sur différentes technologies.

    Si vous avez des questions, n'hésitez pas :)

    • 4/11/2016

    [SCSMA 2016] Installation sur Windows Server 2016

    Après avoir vu comment installer SCSPF, nous allons voir comment installer SCSMA (Service Management Automation). 

    La documentation est disponible ici.

    3 modules sont disponibles à l'installation:

    • PowerShell module: PowershellModuleInstaller.msi

    • Web service: WebServiceInstaller.msi

    • Runbook worker: WorkerInstaller.msi

    PowerShell Module

    Exécutez simplement le msi PowershellModuleInstaller.msi étant donné qu'il n'y a pas de paramètre pour ce module:

    Web Service

    Pour installer le web service, il suffit d'exécuter la commande suivante, en l'adaptant avec vos paramètres:

    msiexec.exe /i WebServiceInstaller.msi /L*v C:\Users\fappointaire\Desktop\WebServiceInstaller.log APPOOLACCOUNT="FLORENTAPPOINTA\svc-smasvc" APPOOLPASSWORD="Passw0rd1!" ADMINGROUPMEMBERS="FLORENTAPPOINTA\SCSMA-Admins" CREATEDATABASE="Yes" SQLSERVER="FLOAPP-SQL01" SQLINSTANCE="SC" ETWMANIFEST="Yes" SENDTELEMETRYREPORTS="Yes" MSUPDATE="Yes" PRODUCTKEY="XXXXX-XXXXX-XXXXX-XXXXX-XXXXX"

    Les logs sont disponibles dans le fichier que vous avez créé:

    Runbook Worker

    Pour l'installation du runbook worker, il suffit d'exécuter la commande suivante, en la modifiant suivant vos paramètres:

    msiexec.exe /i WorkerInstaller.msi /L*v C:\Users\fappointaire\Desktop\WorkerInstaller.log SERVICEACCOUNT="FLORENTAPPOINTA\svc-smasvc" SERVICEPASSWORD="Passw0rd1!" SQLSERVER="FLOAPP-SQL01" SQLINSTANCE="SC" ETWMANIFEST="Yes" SENDTELEMETRYREPORTS="Yes" MSUPDATE="Yes" PRODUCTKEY="XXXXX-XXXXX-XXXXX-XXXXX-XXXXX"

    Les logs sont disponibles dans le fichiers que vous avez mentionné:

    Et depuis le panneau de configuration:

    N'oubliez pas de mettre à jour avec le dernier UR disponible.

    Vous pouvez maintenant enregistrer SMA dans WAP:

    • 4/11/2016

    [SCSPF 2016] Installation sur Windows Server 2016

    Ayant installé Windows Azure Pack sur Windows Server 2016, j'ai maintenant besoin de Service Provider Foundation, en version 2016 (support depuis l'UR9 de WAP).

    La documentation est disponible ici.

    Pour commencer, installez les prérequis avec la commande suivante:

    Import-Module ServerManager
    Add-WindowsFeature FileAndStorage-Services,Storage-Services,Web-Server,Web-WebServer,Web-Common-Http,Web-Default-Doc,Web-Dir-Browsing,Web-Http-Errors,Web-Static-Content,Web-Health,Web-Http-Logging,Web-Request-Monitor,Web-Http-Tracing,Web-Performance,Web-Stat-Compression,Web-Dyn-Compression,Web-Security,Web-Filtering,Web-Basic-Auth,Web-Url-Auth,Web-Windows-Auth,Web-App-Dev,Web-Net-Ext45,Web-Asp-Net45,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Ftp-Server,Web-Mgmt-Tools,Web-Mgmt-Console,Web-Mgmt-Compat,Web-Scripting-Tools,NET-Framework-Features,NET-Framework-Core,NET-Framework-45-Features,NET-Framework-45-Core,NET-Framework-45-ASPNET,NET-WCF-Services45,NET-WCF-HTTP-Activation45,NET-WCF-TCP-PortSharing45,ManagementOdata,FS-SMB1,PowerShellRoot,PowerShell,PowerShell-V2,PowerShell-ISE,WAS,WAS-Process-Model,WAS-Config-APIs,WoW64-Support

    Installez ensuite la console SCVMM 2016 avec l"UR1 ainsi que:

    Maintenant, créez un fichier Unattend.txt qui contiendra les paramètres de l'installation de SPF:

    -UseMicrosoftUpdate true -SpecifyCertificate false -DatabaseServer FLOAPP-SQL01 -ScvmmUserName svc-spfsvc -ScvmmPassword "Passw0rd1!1" -ScvmmDomain FLORENTAPPOINTA -ScvmmNetworkServiceSelected false -VmmSecurityGroupUsers FLORENTAPPOINTA\SCSPF-SCVMM -ScadminUserName svc-spfsvc -ScadminPassword "Passw0rd1!" -ScadminDomain FLORENTAPPOINTA -ScadminNetworkServiceSelected false -AdminSecurityGroupUsers FLORENTAPPOINTA\SCSPF-Admins -ScproviderUserName svc-spfsvc -ScproviderPassword "Passw0rd1!" -ScproviderDomain FLORENTAPPOINTA -ScproviderNetworkServiceSelected false -ProviderSecurityGroupUsers FLORENTAPPOINTA\SCSPF-Provider -ScusageUserName svc-spfsvc -ScusagePassword "Passw0rd1!" -ScusageDomain FLORENTAPPOINTA -ScusageNetworkServiceSelected false -usageSecurityGroupUsers FLORENTAPPOINTA\SCSPF-Usage

    Vous pouvez retrouver tous les paramètres avec la commande suivante:

    Cd C:\Temp\SCORCH2016\SPF
    Setup.exe /?

    Une fois ce fichier créé, vous pouvez lancer l'installation avec la commande suivante:

    Setup.exe -Silent C:\Users\fappointaire\Desktop\Unattend.txt

    Les logs se trouvent dans C:\Users\fappointaire\AppData\Local\Temp. Vous pouvez vérifier que l'installation s'est déroulée correctement:

    Mais aussi dans le panneau de configuration:

    N'oubliez d'appliquer le dernier UR disponible.

    Vous pouvez enregistrer SPF directement dans WAP:

    Cette installation est plus simple que les autres, pourquoi ne pas harmoniser toutes les installation comme celle-ci? :)

    • 24/10/2016

    [SCSM 2016] Installation sur Windows Server 2016 Server Core

     

    Il est temps de passer au dernier produit de System Center, Service Manager. Comme pour les autres produits, je vais l'installer sur un Server Core. J'installerai uniquement les rôles Server et Self Service Portal.

    Pour commencer, installer les prérequis pour le Server:

    Add-WindowsFeature Net-Framework-Core
    .\ReportViewer.exe /q
    msiexec /i SQL_AS_AMO.msi /q
    msiexec /i sqlncli.msi /q

    En exécutant le fichier setup.exe avec le point d'interrogation, vous pouvez avoir la liste des paramètres disponibles:

    Je vais commencer par installer SCSM Server sans aucun role de plus. A noter que le mot de passe n'a pas de paramètre bien précis et se met à la suite du compte de service:

    .\Setup.exe /Install:Server /AcceptEula:Yes /RegisteredOwner:"Florent Appointaire" /RegisteredOrganization:FLOAPP /ProductKey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /SqlServerInstance:FLOAPP-SQL01\SC /CreateNewDatabase /ManagementGroupName:FLOAPP /AdminRoleGroup:FLORENTAPPOINTA\SCSM-Admins /ServiceRunUnderAccount:FLORENTAPPOINTA\svc-smsvc\"P@ssw0rd1" /WorkflowAccount:FLORENTAPPOINTA\svc-smworkflow\"P@ssw0rd1" /CustomerExperienceImprovementProgram:Yes /EnableErrorReporting:Yes /Silent

    Après quelques minutes, allez voir les logs dans C:\Users\VotreUtilisateur\AppData\Local\Temp\2, et plus précisement le log SCSMInstall01.log. Si l'installation s'est déroulée correctement, vous devriez avoir le message suivant:

    Installez la console sur un autre serveur et connectez vous sur votre serveur SCSM:

    Pour la partie Self Service Portal, je vais procéder en 2 étapes. La premières sera d'installer le portail et la seconde, de le sécuriser avec un certificat. 

    Installez les prérequis du portail, qui sont les composants Web:

    Add-WindowsFeature Web-Server, Web-Asp-Net45, Web-ASP, Web-Basic-Auth, Web-Windows-Auth, NET-WCF-HTTP-Activation45 -IncludeAllSubFeature

    Lancez ensuite l'installation du portail. avec SCSM 2016, nous avons directement le portail en HTML5:

    .\Setup.exe /Install:SelfServicePortal /AcceptEula:Yes /RegisteredOwner:"Florent Appointaire" /RegisteredOrganization:FLOAPP /ProductKey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX/PortalWebSiteName:PortalWebSiteName /PortalWebSitePort:8080  /SMServerName:FLOAPP-SM01.florentappointaire.cloud /CustomerExperienceImprovementProgram:Yes /EnableErrorReporting:Yes /Silent

    Vérifiez le fichier de log SCSMInstall01.lob qui se trouve dans C:\Users\VotreUtilisateur\AppData\Local\Temp\2. Si l'installation a été effectuée correctement, à la fin du fichier, vous devriez avoir ceci:

    Si vous allez sur votre site avec un navigateur, le nom du serveur et le port que vous avez indiqué lors de l'installation, vous devriez avoir ceci:

    Nous allons maintenant sécuriser l'accès à ce site, en activant le https et en ajoutant un certificat. Pour commencer, transférer votre certificat sur votre serveur et importez le avec les commandes suivantes:

    $mypwd = Read-Host "PFX Password: " -AsSecureString
    Import-PfxCertificate -FilePath C:\Temp\star_florentappointaire_cloud.pfx -Exportable -Password $mypwd -CertStoreLocation cert:\localMachine\my

    Il faut maintenant ajouter un nouveau binding, à notre site PortalWebSiteName (adaptez la valeur en fonction du nom que vous avez donnée à votre site). J'ai également créé un enregistrement DNS correspondant à portal:

    New-WebBinding -Name "PortalWebSiteName" -IPAddress "*" -Protocol "HTTPS" -Port 443 -HostHeader "portal.florentappointaire.cloud" -SslFlags 1

    Il faut enfin associer notre certificat avec notre nouveau binding (adaptez avec vos valeurs):

    $certificate = Get-ChildItem -Path cert:\localMachine\my | Where {$_.FriendlyName -eq "*.florentappointaire.cloud"}
    New-Item -Path "IIS:\SslBindings\!443!portal.florentappointaire.cloud" -Value $certificate

    Je vais maintenant tenter d'accéder à https://portal.florentappointaire.cloud . J'ai bien le certificat:

    Voici que se termine cette série d'article pour les personnes qui veulent tester la suite System Center avec un petit serveur à la maison :) si vous avez des questions, n'hésitez pas :)

    • 21/10/2016

    [SCORCH 2016] Installation sur Windows Server 2016 Server Core

    Je continue ma suite de billet concernant l'installation des produits System Center 2016 sur Windows Server 2016 Server Core.

    Aujourd'hui, je vais vous parler de Orchestrator. Mon serveur est déjà dans le domaine et le serveur SQL est installé. 

    Mon serveur Orchestrator aura besoin du framework 3.5 et d'un serveur web pour acceuillir le serveur de management mais aussi le serveur runbook. Les composants web doivent être installés sur un serveur qui a une interface graphique, parceque les prérequis pour IIS nécéssite la console de management IIS. Installez donc les prérequis avec la commande suivante:

    Add-WindowsFeature Net-Framework-Core

    Vous allez ensuite avoir besoin du SID de votre groupe SCORCH Admins. Utilisez le script suivant, en remplaçant avec le nom de votre groupe:

    $AdObj = New-Object System.Security.Principal.NTAccount("SCORCH-Admins")
    $strSID = $AdObj.Translate([System.Security.Principal.SecurityIdentifier])
    $strSID.Value

    Déplacez-vous maintenant dans le répertoire qui contient le setup.exe de Orchestrator, pour ma part C:\Temp\SCORCH2016\Setup. Voici les paramètres disponibles pour une installation hors-ligne:

    Pour lancer l'installation, exécutez la commande suivante, en adaptant avec vos besoins/valeurs:

    Cd C:\Temp\SCORCH\Setup
    .\Setup.exe /Silent /Key:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /ServiceUserName:florentappointa\svc-orchsvc /ServicePassword:"P@ssw0rd1" /Components:ManagementServer,RunbookServer /DbServer:FLOAPP-SQL01\SC /DbNameNew:Orchestrator /OrchestratorUsersGroup:S-1-5-21-2033810102-1115657079-2170771858-2142 /OrchestratorRemote /UseMicrosoftUpdate:1 /SendTelemetryReports:1 /EnableErrorReporting:always

    Une description des paramètres est disponible ici: https://technet.microsoft.com/en-us/library/hh674378(v=sc.12).aspx 

    Les logs d'installation se trouvent dans C:\Users\username\AppData\Local\Microsoft System Center 2012\Orchestrator\LOGS

    Il faut ensuite appliquer l'UR1 pour ma part: https://support.microsoft.com/en-us/kb/3190603

    Ensuite, ouvrez les ports du pare-feu local de la VM suivants. Ces ports sont nécéssaires pour une administration depuis un autre serveur. J'ai utilisé une GPO dans mon cas:

    • ManagementService.exe: %Program Files (x86)%\Microsoft System Center 2012\Orchestrator\Management Server\ManagementService.exe
    • OrchestratorRemotingService.exe: %SystemRoot%\SysWOW64\OrchestratorRemotingService.exe
    • Règles WMI:
      • Windows Management Instrumentation (Async-In)
      • Windows Management Instrumentation (DCOM-In)
      • Windows Management Instrumentation (WMI-In)
    • Ports: 125, 1024-65535

    Les références sont disponibles ici:

    Installez ensuite la console sur un autre serveur et lancez là. Vous devriez avoir un message, comme quoi la console ne peut pas se connecter au serveur LOCALHOST:

    Cliquez sur OK et dans la console, cliquez sur l'icone à gauche, en dessous de Connections. Renseignez le nom de votre serveur Orchestrator:

    La console s'ouvre:

    Pour installer les IPs, vous pouvez téléchargerceux de base ici: http://www.microsoft.com/en-us/download/details.aspx?id=39622 

    Pour les enregistrer, rien de plus simple. Allez sur votre serveur Orchestrator, dans le dossier C:\Program Files (x86)\Microsoft System Center\Orchestrator\Management Server\Deployment Manager. Et exécutez le fichier DeploymentManager.exe. Une console devrait s'ouvrir:

    Enregistrez vos IPs sur vos Runbook Servers mais aussi sur les Runbook Designer Servers (les ports RPC doivent être ouverts). Une fois terminée, vous avez les IPs dans votre Runbook Designer:

    Pour installer les composants web sur un autre serveur (ceci peut être utile pour l'automatisation via Rest API, la connexion avec Service Manager, etc.), installez les prérequis suivants:

    Add-WindowsFeature Web-Server, Web-Static-Content, Web-Default-Doc, Web-Dir-Browsing, Web-Http-Errors, Web-Asp-Net, Web-Net-Ext, Web-CGI, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Http-Logging, Web-Log-Libraries, Web-Request-Monitor, Web-Http-Tracing, Web-Windows-Auth, Web-Digest-Auth, Web-Filtering, Web-Stat-Compression, Web-Mgmt-Console
    Add-WindowsFeature NET-WCF-Services45, NET-WCF-HTTP-Activation45, NET-WCF-Pipe-Activation45, NET-WCF-TCP-Activation45, NET-WCF-TCP-PortSharing45

    Puis, exécutez ceci, depuis le dossier où se trouve les sources de SCORCH:

    .\Setup.exe /Silent /Key:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /ServiceUserName:florentappointa\svc-orchsvc /ServicePassword:"P@ssw0rd1" /Components:WebComponents /DbServer:FLOAPP-SQL01\SC /DbNameExisting:Orchestrator /WebServicePort:81 /WebConsolePort:82 /UseMicrosoftUpdate:1 /SendTelemetryReports:1 /EnableErrorReporting:always

    Ouvrez ensuite les ports 81 et 82 dans le firewall. J'ai fait ceci via GPO. Vous pouvez maintenant accéder au serveur web, sur les ports 81 et 82, après avoir bien entendu, installé Silverlight :)

    http://floapp-rs01:81/Orchestrator2012/Orchestrator.svc/

    http://floapp-rs01:82/#/RunbooksPage

    • 20/10/2016

    [SQL Server] Changer le port dynamique d'une instance en fixe

    Souhaitant installer SCCM sur mon environnement, je dois fixer le port de mon instance SQL Server, sur le port 1433.

    Mon serveur SQL étant installé sur un Server Core, je n'ai pas de console. La console SQL Server Configuration Manager ne pouvant pas être utilisé depuis un autre ordinateur (elle essaye de se connecter aux instances locales du serveur), il a fallu trouver une autre solution.

    Le seul moyen que j'ai trouvé, est de passer en PowerShell, en exécutant le script suivant:

    [void][Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")
    [void][Reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement")
    $SQLName = "FLOAPP-SQL01"
    $Instance = "SC"
    $wmi = new-object ('Microsoft.SqlServer.Management.Smo.WMI.ManagedComputer') $SQLName
    $urn = "ManagedComputer[@Name='$SQLName']/ServerInstance[@Name='$Instance']/ServerProtocol[@Name='Tcp']"
    $Tcp = $wmi.GetSmoObject($urn)
    $Enabled = $Tcp.IsEnabled
    IF (!$Enabled)
    {$Tcp.IsEnabled = $true }
    $wmi.GetSmoObject($urn + "/IPAddress[@Name='IPAll']").IPAddressProperties[0].Value = ""
    $wmi.GetSmoObject($urn + "/IPAddress[@Name='IPAll']").IPAddressProperties[1].Value = "1433"
    $TCP.alter()

    Ici, je supprime le port dynamique et je fixe le port en 1433.

    Vous pouvez utiliser le script suivant pour vérifier les ports utilisés de vos instances:

    # Store Current Location to return to it when we're done
    Push-Location;

    # Let's get all the possible hives in the registry on a given system
    # We'll use Where-Object to filter down to only those hives which begin with MSSQL
    # This gets rid SSAS, SSIS, and SSRS for versions of SQL Server 2008 and up. It also
    # gets rid of any hives that are under "Microsoft SQL Server" that aren't for instance
    # configuration (or at least not what we're looking for)
    Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server' | Where-Object {$_.Name -like '*MSSQL*'} | foreach {

    # Get Instance Name
    $props = Get-ItemProperty -path $_.PSPath;

    # If there is no default value, this isn't an instance. We need to trap in case the
    # property doesn't exist
    try {
    $InstanceName = $props.psobject.Properties["(default)"].value;
    }
    catch {
    $InstanceName = "";
    }

    # If there is a valid instance name, proceed farther
    if ($InstanceName.length -gt 0) {

    # Navigate the child keys
    foreach ($key in Get-ChildItem -path $_.pspath){

    # Find entries belonging to actual database engine instances
    if ($key.name -like "*MSSQLServer*")
    {

    # Navigate to the key where the TCP settings are stored
    Set-Location -path $key.pspath;
    cd .\SuperSocketNetLib\tcp -ErrorAction SilentlyContinue;

    # Ensure we're only reporting against the right keys

    $TCPKey = Get-Location;

    if ($TCPKey -like '*SuperSocketNetLib*') {

    $TCPProps = Get-ItemProperty $TCPKey;

    # Find out if TCP is enabled
    $Enabled = $TCPProps.psobject.Properties["enabled"].value;

    # Begin the reporting
    Write-Host "Instance Name: $InstanceName";
    Write-Host "------------------------------------------------------------------------------";

    # If TCP is not enabled, there's point finding all the ports. Therefore, we check.
    if ($Enabled -eq 1)
    {
    foreach ($Key in gci $TCPKey)
    {
    $IPprops = Get-ItemProperty $Key.pspath;
    $IPAddress = $IPProps.psobject.Properties["IpAddress"].Value;

    # For the Key IPAll, there is no IPAddress value. therefore, we trap for it.
    if ($IPAddress -eq $null)
    {
    $IPAddress = "All"
    }

    Write-Host " IP Address: $IPAddress";
    Write-Host " Dyn. Ports: ", $IPProps.psobject.Properties["TcpDynamicPorts"].Value;
    Write-Host " Sta. Ports: ", $IPProps.psobject.Properties["TcpPort"].Value;

    }
    } else {
    Write-Host " TCP not enabled."
    }

    Write-Host "------------------------------------------------------------------------------";
    Write-Host "";
    }
    }
    }
    }
    }

    Source du script: https://www.mssqltips.com/sqlservertip/3542/automated-way-to-get-all-port-information-for-sql-server-instances/ 

    • 19/10/2016

    [SCOM 2016] Installation sur Windows Server 2016 Server Core

    Après avoir vu comment installer SQL Server sur Windows Server 2016 Server Core et SCVMM 2016 également sur Server Core, intéressons-nous à SCOM 2016, qui est sorti durant Ignite et que vous pouvez télécharger ici : https://www.microsoft.com/fr-be/server-cloud/products/system-center-2016/

    Je me suis inspiré de l’article de Tao Yang pour faire cette installation. Mon serveur SQL étant déjà prêt, je ne parlerai pas de cette étape ici.

    Commençons donc par installer les prérequis pour le management server et le web server. La console sera installée sur un autre serveur, tout comme le serveur de reporting.

    Téléchargez les fichiers suivants :

    Exécutez les commandes suivantes :

    dism /online /enable-feature /featurename:AuthManager 

    Add-WindowsFeature Web-Static-Content,Web-Default-Doc,Web-Dir-Browsing,Web-Http-Errors,Web-Http-Logging,Web-Request-Monitor,Web-Filtering,Web-Stat-Compression,Web-Metabase,Web-Asp-Net,Web-Windows-Auth,Web-ASP,Web-CGI

    Add-WindowsFeature NET-WCF-HTTP-Activation45

    msiexec /i SQLSysClrTypes.msi /q

    msiexec /i ReportViewer.msi /q

    Une fois ceci terminé, vous pouvez lancer l’installation de SCOM, avec la commande suivante, en adaptant avec vos valeurs :

    Start-Process -FilePath C:\Temp\SCOM2016\setup.exe -ArgumentList '/install /components:OMServer,OMWebConsole /ManagementGroupName:FLOAPP /SqlServerInstance:FLOAPP-SQL01\SC /DatabaseName:OperationsManager /DWSqlServerInstance:FLOAPP-SQL01\SC /DWDatabaseName:OperationsManagerDW /ActionAccountUser:FLORENTAPPOINTA\svc-omsvc /ActionAccountPassword:Password1! /DASAccountUser:FLORENTAPPOINTA\svc-omaccess /DASAccountPassword:Password1! /DataReaderUser:FLORENTAPPOINTA\svc-omreader /DataReaderPassword:Password1! /DataWriterUser:FLORENTAPPOINTA\svc-omwriter /DataWriterPassword:Password1! /WebSiteName:"Default Web Site" /WebConsoleAuthorizationMode:Mixed /EnableErrorReporting:Always /SendCEIPReports:1 /UseMicrosoftUpdate:1 /AcceptEndUserLicenseAgreement:1 /silent'

    Pour regarder l’avancement de l’installation, ouvrez les logs OpsMgrSetupWizard.log et Setup0.log qui se trouvent dans C:\Users\fappointaire\AppData\Local\SCOM\LOGS\ :

    Vous pouvez voir que l’installation est terminée. Redémarrez le serveur, et comme indiqué, une version d’évaluation est installée. Je vais donc installer ma licence, avec la commande suivante :

    Set-SCOMLicense -ProductId XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

    Installez la dernière version de l’Update Rollup, pour ma part, la version 1: https://support.microsoft.com/en-us/kb/3190029

    J’ai ensuite installé la console sur un autre serveur, et appliqué le patch UR1. Vous pouvez maintenant vous connecter à votre serveur SCOM, qui est installé sur un Server Core :)

    • 18/10/2016

    [SCVMM 2016] Installation sur Windows Server 2016 Server Core

    Dans un précédant billet, je vous ai expliqué comment installer SQL Server 2016 sur Windows Server 2016 Server Core.

    A travers ce billet, je vais vous expliquer comment installer SCVMM 2016 RTM, sur un serveur Server Core. Cette dernière version est compatible avec SQL Server 2016.

    Pourquoi j’essaye d’installer tous ces composants sur des Server Core ? Simplement pour utiliser un minimum de RAM et de stockage, étant donné que mon lab tourne sur un Intel NUC Gen 6 avec 500GB de stockage et 32GB de Ram :)

    Pour commencer, téléchargez le Windows ADK 10 version 1607 sur le serveur SCVMM. Ici, vous pouvez voir avec la commande .\adksetup.exe /list, la liste des features disponibles. Pour SCVMM 2016, nous avons besoin de Deployment Tools et de Windows Preinstallation Environment :

     Installez-les avec la commande suivante :

    .\adksetup /quiet /features OptionId.DeploymentTools OptionId.WindowsPreinstallationEnvironment

    Pour verifier que l’installation s’est bien déroulée, exécutez les commandes suivantes et vérifiez que la dernière ligne ait bien un Exit Code à 0 :

    Cd C:\Users\fappointaire\AppData\Local\Temp\adk

    Notepad “Windows Assessment and Deployment Kit___Windows_10_20161013111117.log”

    Vous pouvez maintenant lancer l’installation de SCVMM 2016 sur votre serveur. Je vais faire une installation de type « quiet », c’est-à-dire que nous lancerons l’installation avec un fichier de type unattend. Copiez le fichier VMServer.ini qui se trouve dans votre iso, dans amd64 > Setup. Et collez le dans un dossier temporaire par exemple.

    Ouvrez ce fichier pour l’éditer et complétez-le avec vos informations. Dans mon cas, j’ai ceci :

    Vous pouvez retrouver la liste de chaque paramètre ici : https://technet.microsoft.com/en-us/library/hh852761(v=sc.12).aspx?f=255&mspperror=-2147217396#Anchor_1

    Pour lancer l’installation, utilisez la commande suivante :

    .\setup.exe /server /i /IACCEPTSCEULA /f C:\Temp\VMServer.ini /VmmServiceDomain florentappointa /VmmServiceUserName svc-vmmsvc /VmmServiceUserPassword Password1!

    Si vous avez le message d’erreur suivant, regardez ce billet pour la solution :

    Il faut maintenant vérifier le fichier de log suivant et regardez à la fin du fichier que l’installation est bien terminée :

    C:\ProgramData\VMMLogs\SetupWizard.log

    Une fois que ceci est terminé, appliquez le dernier update rollup. Au moment où j’écris ce billet, nous sommes à l’UR1 : https://support.microsoft.com/en-us/kb/3190597

    Il faut désormais installer la console sur un serveur. Je l’ai installé sur une VM qui contient plusieurs outils et j’ai également appliqué l’UR1. Je me suis donc ensuite connecté au serveur SCVMM :

    Et voilà :) dans le prochain billet, nous installerons SCOM en mode Server Core également :)