<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Bienvenue, on Frédéric ESNOUF's Web Log</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/fesnouf/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/fesnouf/feed.xml</link>
    <description>Microsoft France, Datacenter and Cloud</description>
    <lastBuildDate>Tue, 16 Apr 2019 06:07:16 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Utilisation de Ewelink/Sonoff et Broadlink : quand cela ne fonctionne pas.</title>
      <link>https://docs.microsoft.com/archive/blogs/fesnouf/utilisation-de-ewelink-sonoff-et-broadlink-quand-cela-ne-fonctionne-pas</link>
      <pubDate>Thu, 16 Aug 2018 14:19:53 GMT</pubDate>
      <dc:creator><![CDATA[Frédéric ESNOUF]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/fesnouf/?p=2925</guid>
      <description><![CDATA[Il y a quelques semaines, j'ai décidé d'utiliser des équipements de domotique pour automatiser...]]></description>
      <content:encoded><![CDATA[Il y a quelques semaines, j'ai décidé d'utiliser des équipements de domotique pour automatiser certaines choses à la maison, mais également automatiser des traitements à distance comme "allumer le ventilateur de ma grand mère dès qu'il fait 24 degrés".

J'ai regardé en particulier deux types d'éditeurs : Sonoff qui fait pour très peu chère des équipements connectés (prises simples, prises avec sonde température, prise avec indicateur de consommation de courant), mais également Broadlink qui fait un appareil de télécommande infrarouge et 433Mhz appelé le RM Pro.

Ces "appareils" viennent accompagnés d'applications smartphone permettant de piloter le tout que l'on soit connecté en Wifi sur son réseau privé, en mobilité, et parfois en mode automatiser (arrêter à telle heure, démarrer si température &gt; 22 degrés etc).

Très rapidement, j'ai rencontré une incapacité à faire fonctionner l'application lorsque j'étais en situation de mobilité (4G), un simple message d'erreur pour les deux éditeurs.

J'ai pris contact avec ces deux éditeurs, et malheureusement après de nombreux emails, le support a été plus que déficient. Support externalisé à un tiers ne maitrisant pas ? souhait de ne pas communiquer ? bref, en tant qu'utilisateur, support de faible qualité.

En faisait quelques tests, j'ai réussi à isoler le problème : je ne rencontre ce problème que sur un abonnement Bouygues Télécom.

&nbsp;

Mais comment contacter le support, sans plus d'élément, juste "j'ai une application qui fonctionne pas, cela vient de vous ?".

&nbsp;

J'ai de nouveau tenté de repasser par le support de ces deux éditeurs, en particulier pour Sonoff/Ewelink, mais peu d'information.

Pour avancer, j'ai installé via un Raspberry pi une passerelle me permettant au milieu de "sniffer" un minimum de chose. Mon smarphone est connecté à cet appareil, lui même connecté sur le LAN de ma box… et au milieu Wireshark.

A tout ceux qui rencontrent ce problème, voila ce que j'ai été en mesure d'identifier (en cours d'analyse auprès de l'opérateur) :

&nbsp;
<ol>
 	<li>Contrairement à ce que me disait le support, ils se connected (de l'application à leur infrastructure back end) sur de nombreuses URLs. Certaines de ces URLs pointent directemment sur des noms de domaine AWS, d'autres sont déclarés sur leur domaine d'entreprise. Quelques exemples :<a href="https://msdnshared.blob.core.windows.net/media/2018/08/sonoff1.jpg"><img width="300" height="50" class="alignnone size-medium wp-image-2935" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/08/sonoff1-300x50.jpg" /></a>, <a href="https://msdnshared.blob.core.windows.net/media/2018/08/sonoff2JPG.jpg"><img width="300" height="31" class="alignnone size-medium wp-image-2945" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/08/sonoff2JPG-300x31.jpg" /></a></li>
 	<li>On constate des connections SSL/TLS sur le port 8080. En toute logique, 8080 devrait être un port "privé" utilisant du HTTP… du HTTP"S" devrait plus passer sur du 8443.</li>
 	<li>Tous les noms de domaine "coolkit.cc" pointent vers des machines AWS.</li>
</ol>
&nbsp;

En faisant un scan de port depuis mon smartphone, je n'ai vu aucun problème de résolution DNS, ni d'ouverture de port TCP (8080, …). Cette simple comparaison de scan (à la maison Versus en 3G) ne m'a pas donné d'indice.

&nbsp;

A l'heure ou je rédige cet article, je suspecte donc un problème au niveau des couches applicative, par exemple un pare-feu voyant un flux SSL/TLS sur du 8080 ce qui est assez étrange, ou autre problème de ce type… bloquant ainsi la communication.

Conclusion rapide en attendant de trouver dans les détails.

&nbsp;

PREMIEREMENT, même si on est dans un monde ou le Lean est la référence, il faut respecter ses clients et faire tous les efforts possibles lorsque son produit ne marche pas. Les équipe Coolkit (Sonoff/ewelink) et Broadlink ne sont pas du tout au niveau attendu.

DEUXIEMEMENT, je souhaite féliciter les équipes Bouygues qui en quelques minutes ont pris ce cas à bras le corps, et avec qui j'échange pour trouver la source précise du problème, et donc une solution pour tous les clients. On se parle, on se comprend, on cherche ensemble… ca c'est une relation client, Bravo.

ENFIN, pour Broadlink, sans pour autant faire une revue de leur produit, la relation n'est pas au niveau du tout. Le titre de l'application est incompréhensible, il y a des caractères chinois partout, l'interface n'est pas du tout aboutie, et le support est inexistant. Même quand je demande à avoir confirmation qu'un bug (exemple caractères chinois) est officialisé ils ne répondent pas. Le pire, ils disent que leur application fonctionne avec des applications type Alexa et c'est faut, et quand à la date du support : un jour. !!!!!!

&nbsp;

… plus d'info asap, et j'espère tous les détails sur la raison de ce blocage et la solution.]]></content:encoded>
    </item>
    <item>
      <title>Simuler un projet Cloud avec Excel</title>
      <link>https://docs.microsoft.com/archive/blogs/fesnouf/simuler-un-projet-cloud-avec-excel</link>
      <pubDate>Fri, 29 Dec 2017 14:45:08 GMT</pubDate>
      <dc:creator><![CDATA[Frédéric ESNOUF]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/fesnouf/?p=2796</guid>
      <description><![CDATA[Simuler un projet Cloud d’envergure nécessite en amont de travailler sur son “business case”. Au...]]></description>
      <content:encoded><![CDATA[<p><font size="3">Simuler un projet Cloud d’envergure nécessite en amont de travailler sur son “business case”. Au delà de la valeur du projet et des services que l’on va obtenir, simuler les aspects financiers est important certes, mais il vous faut les maitriser.</font></p><p><font size="3"><br></font></p><p><font size="3">En effet, en raison du modèle Cloud ou le paiement est à l’usage (par exemple une VM peut être facturé à la minute, préservée à 1 ou 3 ans, ..) cela donne de nombreuses opportunités d’optimisations. Si je garde volontairement l’exemple d’une VM (mais ceci est identique pour tous les autres services), <font><strong>déplacer une VM sans changer les pratiques ne fait pas sens.</strong></font> </font></p><p><font size="3">En suivant la logique du Cloud (financière et technique, comme par exemple arrêt des machines la nuit et le WE pour le dev test, réserver ses “instances” pour les 24x7) on perçoit l’ensemble des opportunités, mais aussi les nécessités d’adaptation de ces bonnes pratiques : on ne peut plus laisser “tourner” ses machines sur la base d’aucune logique technique, et on se doit très souvent de se demande si la puissance mise dans un service est la bonne.</font></p><p><font size="3"><br></font></p><p><font size="3">Dans le cadre de mon rôle d’accompagnement de clients dans ces transformations digitales (et pas seulement des VMs), j’ai très souvent l’occasion de les aider à simuler ce type de projet, <strong>et voulais vous partager quelques bonnes pratiques et astuces sur l’approche d’analyse financière via Excel.</strong></font></p><p><font size="3"><br></font></p><p><font size="3">Pour cet article, et afin de bien comprendre la logique, prenons un projet classique de déplacement d’infrastructure dans Azure (appelé aussi “Lift and Shift”), et partons du principes - pour bien comprendre l’intérêt de cette approche - que nous avons 2000 Machines dans l’environnement source.</font></p><p><font size="3"><br></font></p><h1><font size="6"><font style="font-weight: bold"><u>La complexité</u></font></font></h1><p><font size="3">Dans l’interface hyperv ou Vmware de votre environnement, vous avez la possibilité d’exporter facilement des informations intéressantes pour effectuer la simulation comme le nom de la machine, le nombre de cœurs, la RAM, etc. Même si ce n’est pas suffisant (nous affinerons tout cela à la fin de cet article) c’est un très bon départ.</font></p><p><font size="3"><br></font></p><p><font size="3">Très simplement, ces données seront alors disponibles dans un simple fichier XLS. Disons que nous avons une structure comme ceci :</font></p><p><font size="3">* Colonne A : le&nbsp; nom de la machine</font></p><p><font size="3">* Colonne B: le nombre de cœurs</font></p><p><font size="3">* Colonne C : la RAM</font></p><p><font size="3">* Colonne D : Go utilisé pour les disques</font></p><p><font size="3"><br></font></p><p><font size="3">Si l’on doit simuler une 10zaine de machines, c’est alors très simple de regarder dans la calculatrice Azure, trouver la machine la plus proche (CPU/RAM), et donc de créer une colonne “E”, contenant le type dans Azure. </font></p><p><font size="3">Par exemple une “A2_V2”.</font></p><p><font size="3">Mais dans notre scénario nous en avons 2000 !</font></p><p><font size="3">Faut-il le faire à la main, ligne par ligne ? : humainement impossible.</font></p><p><font size="3"><br></font></p><p><font size="3"><strong>CHALLENGE 1 :</strong> comment identifier pour 2000 machines (donc 2000 lignes) le bon type de machines dans Azure ?</font></p><p><font size="3">Imaginons pour évoquer un second scénario,&nbsp; que cette colonne “E” est maintenant disponible (déjà remplie), comment alors sur ces 2000 Lignes indiquer le prix, et ensuite calculer les différentes hypothèses de travaille (paiement à la minute, instances réservées.. Windows ou Linux, valorisation AHUB).</font></p><p><font size="3"><strong>CHALLENGE 2 :</strong> connaissant le type de machine, comment indiquer en colonne “F” le prix de celle-ci ?De plus, on peut migrer cette VM, la garder pendant quelques jours/semaines en “paiement à la minute”, puis après avoir figé sa configuration la passer en “instances réservées” vont baisser drastiquement le prix.</font></p><p><font size="3"><strong>AUTRES CHALLENGES :</strong> de nombreuses autres options peuvent impacter votre simulation. Par exemple, si vous êtes propriétaire de licences Windows Serveur avec Software Assurance, vous payerez dans Azure le prix “Machine seule (Linux)” et non pas “machine + Windows”. Ce bénéfice est appelé AHUB, et la aussi va baisser le coût du projet.</font></p><p><font size="3"><br></font></p><p><font size="3">Au regard de la liste des “Challenges”, on peut voir qu’il est impossible de réaliser cette tâche à la main : c’est long, chaque modification de la logique nécessite de refaire tout, et avec toute la bonne volonté du monde, c’est source d’erreur : humainement impossible.</font></p><p><font size="3">Même si l’on peut utiliser des fonctions Excel comme RECHERCHEV, l’usage est très limité. </font></p><p><font size="3">Par exemple, “rechercher le prix pour une A2_V2, prendre le prix Linux si il reste des usages AHUB, sinon prendre le prix Windows” : impossible avec ce type de Macro.</font></p><p><font size="3"><br></font></p><p><font size="3">Nous devons donc utiliser quelque chose de plus adaptatif : faire un programme en VBA (Visual Basic pour Application).</font></p><p><font size="3">Vous n’avez pas besoin d’être un développeur aguerri, juste de connaître quelques concepts de base en programmation.</font></p><p><font size="3"> Je vous partage maintenant la logique a travers quelques exemples.</font></p><p><font size="3"><br></font></p><h1><font size="6"><font style="font-weight: bold"><u>Logique de calcul dans un programme VBA</u></font></font></h1><p><font size="3">Partons dans ce scénario sur la base d’un fichier XLS comme évoqué en amont (extrait HyperV ou Vmware).</font></p><p><font size="3">1) ouvrez votre ficher XLS et sauvegardez le de nouveau mais avec l’extension “autorisant les macros” :</font></p><p><a href="https://msdnshared.blob.core.windows.net/media/2017/12/image475.png"><font size="3"><a href="https://msdnshared.blob.core.windows.net/media/2017/12/image476.png"><img width="675" height="127" title="image" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/12/image_thumb444.png" border="0"></a></font></a></p><p><font size="3"><br></font></p><p><font size="3">2) Dans le menu développeurs de Excel (à activer dans votre ruban, dans la section Option) vous voyez maintenant apparaître ce volet développeur, le fichier en cours d’utilisation, et dans “This Workbook” vous pouvez dans la partie droite créer une fonction.</font></p><p><a href="https://msdnshared.blob.core.windows.net/media/2017/12/image464.png"><img width="676" height="309" title="image" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/12/image_thumb445.png" border="0"></a></p><p><font size="3">Dans cette image, vous pouvez voir une fonction vide commençant par “Sub &lt;nom&gt;” et finissant par “End Sub”.</font></p><p><font size="3">Passons maintenant au code.</font></p><p><font size="3"><br></font></p><p><font size="3">Le premier exemple va balayer les lignes, sortir tous les “types” de machines et fabriquer le “code” VBA permettant par la suite de trouver le bon prix (nous utiliserons une fonction appelée CASE, permettant de lister une par une les hypothèse de type de machine).</font></p><p><font size="3">Voici le code :</font></p><p><br></p><p><em><font face="Courier New" size="3"><strong>Sub ListeTypeMachines()<br>&nbsp; ToutesVMs = ""<br>&nbsp; For I = 3 To 2000<br>&nbsp;&nbsp;&nbsp;&nbsp; TypeMachine = Range("I" + Trim(Str(I)))<br>&nbsp;&nbsp;&nbsp;&nbsp; ret = InStr(1, ToutesVMs, TypeMachine)<br>&nbsp;&nbsp;&nbsp;&nbsp; If ret = 0 Then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Type non déjà trouvé, on l'ajoute<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ToutesVMs = ToutesVMs + vbCrLf + "case """ + TypeMachine + """"<br>&nbsp;&nbsp;&nbsp;&nbsp; Else<br>&nbsp;&nbsp;&nbsp;&nbsp; End If<br>

Next I</strong></font></em></p><em><font face="Courier New" size="3"><strong>
</strong></font></em><p><em><font face="Courier New" size="3"><strong>MsgBox ToutesVMs</strong></font></em></p><em><font face="Courier New" size="3"><strong>
</strong></font></em><p><em><font face="Courier New" size="3"><strong>End Sub</strong></font></em></p><p><font size="3">Pour les non informaticiens, voici la logique</font></p><p><font size="3">* Tout d’abord nous allons lire les unes après les autres les lignes du fichier Excel. Ceci est réalisé par une “boucle”. Le début est la ligne “For i=1 to 2000” (comprendre faire cela pour 2000 lignes) et la fin est le “Next I” (comprendre ligne suivante). Tout ce qui est entre les deux va être exécuté pour chaque ligne du fichier.</font></p><p><font size="3">* On récupère dans la colonne “I” de la ligne en cours (I) la valeur. Ceci correspond en fait au type de machine. Maintenant nous avons une variable “TypeMachine” qui contient ce type au format texte (A1_V2 par exemple)</font></p><p><font size="3">* Ensuite on ajoute dans une autre variable appelée ToutesVMs tous les “types” trouvés.</font></p><p><font size="3"><br></font></p><p><font size="3">En fait, il être un peu fainéant, ce code va générer le “code” que nous allons ajouter dans la prochaine fonction. </font></p><p><font size="3">Voici le résultat de cette première fonction :</font></p><p><font size="3"><br></font></p><p><font face="Courier New" size="3"><strong>Case "A2m_v2"</strong></font></p><p><font face="Courier New" size="3"><strong>
case "A1_v2"</strong></font></p><p><font face="Courier New" size="3"><strong>
case "A2_v2"</strong></font></p><p><font face="Courier New" size="3"><strong>
case "A4_v2"</strong></font></p><p><font face="Courier New" size="3"><strong>
case "D5_v2"</strong></font></p><p><font face="Courier New" size="3"><strong>
case "A4m_v2"</strong></font></p><p><font face="Courier New" size="3"><strong>
case "A8_v2"</strong></font></p><p><font face="Courier New" size="3"><strong>
case "A11"</strong></font></p><p><font face="Courier New" size="3"><strong>
case "A8m_v2"</strong></font></p><p><font face="Courier New" size="3"><strong>
case "D4_v2"</strong></font></p><p><font face="Courier New" size="3"><strong>
case "H16m"</strong></font></p><p><font face="Courier New" size="3"><strong>
case "D14_v2"</strong></font></p><p><br></p><p><font size="3">Maintenant passons à la macro 2, dans laquelle nous allons copier coller ce “code”, et ainsi enrichir avec des données détectées. Le but de la macro maintenant est de mettre à jour le fichier XLS, avec les bonnes valeurs dans la colonne “prix”. Ce “prix” peut résulter d’une certaine logique que seul du code peut traiter. Par exemple “si il me reste des AHUB le prix est celui Linux, si je n’en ai plus c’est le Prix Windows” :</font></p><p><br></p><p><font size="3"><strong>Sub <font face="Courier New">miseAjourPrix()</font></strong></font></p><font face="Courier New" size="3"><strong>
</strong></font><p><font face="Courier New" size="3"><strong>'Logique du code :<br>
' 1) regarder ligne par ligne le fichier XLS (de ligne 3 à ligne 2000): For I=3 to 782 (ici de la ligne 3 à 782)<br>
' 2) récupérer le type de machine se trouvant en colonne “I”<br>
' 3) en fonction du type , déterminer le prix récupéré dans la calculette "En ligne", et inséré à la main dans cette fonction : Select CASE<br>
' 4) ajouter en colonne J du fichier XLS le prix trouvé via la macro<br>
' 5) injecter les différents prix pour comparaison à partir de la colonne AA : permet de comprendre les options.<br>
'=&gt; Calculette : tarifs sur : </strong></font><a href="https://azure.microsoft.com/en-us/pricing/calculator/"><font face="Courier New" size="3"><strong>https://azure.microsoft.com/en-us/pricing/calculator/</strong></font></a><br><font face="Courier New" size="3"><strong>
For i = 3 To 782</strong></font></p><font face="Courier New" size="3"><strong>
</strong></font><p><font face="Courier New" size="3"><strong>&nbsp;&nbsp;&nbsp; TypeMachine = Range("I" + Trim(Str(i)))<br>&nbsp;&nbsp;&nbsp;&nbsp; 'Prix amachine par minute, machine seule (Linux).. ou windows mais avec bénéfice AHUB (Software Assurange)<br>&nbsp;&nbsp;&nbsp;&nbsp; PrixLinux = 0<br>&nbsp;&nbsp;&nbsp;&nbsp; 'prix machine par minute, machine + Windows<br>&nbsp;&nbsp;&nbsp;&nbsp; PrixWindows = 0<br>&nbsp;&nbsp;&nbsp;&nbsp; 'Idem en Reserved Instance (RI) 1 an<br>&nbsp;&nbsp;&nbsp;&nbsp; PrixLinuxRI1 = 0<br>&nbsp;&nbsp;&nbsp;&nbsp; 'Idem en Reserved instance 3 ans<br>&nbsp;&nbsp;&nbsp;&nbsp; PrixLinuxRI3 = 0<br>&nbsp;&nbsp;&nbsp;&nbsp; 'Idem RI Windows 1 an<br>&nbsp;&nbsp;&nbsp;&nbsp; PrixWindowsRI1 = 0<br>&nbsp;&nbsp;&nbsp;&nbsp; 'Idem RI Windows 3 ans<br>&nbsp;&nbsp;&nbsp;&nbsp; PrixWindowsRI3 = 0<br>&nbsp;&nbsp;&nbsp;&nbsp; Select Case TypeMachine<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Attention pas de Reserved Instance pour les séries "A"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'pas de RI pour les séries A<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case "A1_v2"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixLinux = 25.31<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixWindows = 38.27<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixLinuxRI1 = PrixLinux<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixLinuxRI3 = PrixLinux<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixWindowsRI1 = PrixWindows<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixWindowsRI3 = PrixWindows<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'RI disponible<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case "D5_v2"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixLinux = 651.86<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixWindows = 1146.94<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixLinuxRI1 = 371.61<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixLinuxRI3 = 253.46<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixWindowsRI1 = 825.94<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixWindowsRI3 = 707.79<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case "??"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ‘convention avec le client : si je ne sais pas quelle machine, ou si je ne sais pas elle devra bouger, le type est ??<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixLinux = 0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixWindows = 0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixLinuxRI1 = 0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixLinuxRI3 = 0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixWindowsRI1 = 0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrixWindowsRI3 = 0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case Else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "machine non trouvée : " + TypeMachine<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pause = 1<br>
End Select</strong></font></p><p><font size="3"><strong><font face="Courier New">
'Maintenant on a le prix de la machine sur cette ligne</font></strong></font></p><p><font size="3"><strong><font face="Courier New">
'On va mettre à jour le fichier XLS avec les bons prix</font></strong></font></p><p><font size="3"><strong><font face="Courier New">
</font></strong></font><font face="Courier New" size="3"><strong>'Logique ci dessous : Prix Linux en reserved instance 3 ans.</strong></font></p><p><font face="Courier New" size="3"><strong>‘colonne prix</strong></font></p><p><font face="Courier New" size="3"><strong>Range("J" + Trim(Str(i))) = PrixLinuxRI3 * 12</strong></font></p><p><strong><font face="Courier New" size="3">‘Colonnes permettant d’ajouter toutes les autres hypothèses a titre indicatif.</font></strong></p><p><font face="Courier New" size="3"><strong>Range("AA" + Trim(Str(i))) = PrixWindows<br></strong></font></p><p><font face="Courier New" size="3"><strong>Range("AB" + Trim(Str(i))) = PrixWindowsRI1<br></strong></font></p><p><font face="Courier New" size="3"><strong>Range("AC" + Trim(Str(i))) = PrixWindowsRI3<br></strong></font></p><p><font face="Courier New" size="3"><strong>Range("AD" + Trim(Str(i))) = PrixLinux<br></strong></font></p><p><font face="Courier New" size="3"><strong>Range("AE" + Trim(Str(i))) = PrixLinuxRI1<br></strong></font></p><p><font face="Courier New" size="3"><strong>Range("AF" + Trim(Str(i))) = PrixLinuxRI3</strong></font></p><p><font face="Courier New" size="3"><strong>Next i</strong></font></p><p><font face="Courier New" size="3"><strong><br>
'Fin du traitement.</strong></font></p><p><font face="Courier New" size="3"><strong>MsgBox "fin"</strong></font><font face="Courier New" size="3"><strong>
</strong></font></p><p><font face="Courier New" size="3"><strong>End Sub</strong></font></p><p><strong><font face="Courier New" size="3">(J’ai volontairement retiré des CASE, pour ne pas alourdir le code).</font></strong></p><p><strong><font face="Courier New" size="3"><br></font></strong></p><p><font size="3">Dans ce code j’ai mis “en dur” les prix. Il est évident que l’on pourrait rajouter quelques lignes afin d’aller chercher ces données directement via des API disponibles dans Azure. Mais faisons simple, nous ne sommes pas des experts en “développement”.</font></p><p><br></p><p><font size="3">Ce code, pour traiter toutes les lignes va prendre quelques secondes : combien de temps cela prendrait-il pour le faire à la main ?</font></p><p><font size="3">De plus, comme on peut changer ses hypothèse (plus ou moins de lignes (de machines), changer le type de VM dans Azure)… on doit relancer ce traitement assez souvent : impossible à la main.</font></p><p><font size="3">Exemple de nouvelle hypothèse : </font><font size="3">client a le droit à 300 AHUB.</font></p><p><font size="3">Etre capable de décrémenter ligne par ligne les bénéfice, et jusque 0 donner le prix Linux et non Windows, nécessite forcément de passer par du code.</font></p><p><font size="3"><br></font></p><p><font size="3">Avant de conclure, je reviens sur une des hypothèses : comment faire pour remplir la colonne du type de machine Azure ? A la main et ligne par ligne ? : certainement pas.</font></p><p><font size="3">En fait il s’agit du même algorithme que pour calcule le prix (pour chaque ligne, faire qqchose sur la base de “CASE”).</font></p><p><font size="3">Il faut juste récupérer la colonne coeur et RAM, et faire des If du type “If CPU=2 and RAM=4 then machine=”A2V2”.</font></p><p><font size="3"><br></font></p><p><font size="3">Vous avez maintenant les bases pour faire ce traitement et surtout être autonome. Un projet Cloud implique impérativement la compréhension du modèle de prix, et vous devez impérativement – en tant qu’architecte – maitriser au quotidien ce mode de fonctionnement lorsque vous bâtissez vos infrastructure.</font></p><p><font size="3"><br></font></p><p><font size="6"><strong><u>Ne pas oublier : outils et optimisations</u></strong></font></p><p><font size="3">Dans cet article, je parle de AHUB et aussi des Reserved Instances. Vous devez impérativement connaître ces bénéfices car ils réutilisent vos investissements passés et optimisent vos coûts.</font></p><p><font size="3">Microsoft met à disposition de ses clients des outils puissants pour les phases d’assessment, de migration et également de consolidation : <a title="https://azure.microsoft.com/fr-fr/migrate/virtual-machines-migration/" href="https://azure.microsoft.com/fr-fr/migrate/virtual-machines-migration/">https://azure.microsoft.com/fr-fr/migrate/virtual-machines-migration/</a></font></p><p><font size="3"><br></font></p><p><font size="3">Dans la liste des solutions à utiliser en parallèle de cette simulation financière vous avez :</font></p><p><font size="3"><strong>Azure Migrator :</strong> la solution va analyser un hyperviseur, les machines qui s’exécutent et répondre à plusieurs questions : quel type de machine il vous faut sur azure (sur la base de l’usage, et pas seulement du couple CPU/RAM), les machines éligibles à la migration (si il y a des incompatibilités, vous indiquer comment les régler)</font></p><p><font size="3"><strong>Azure Log Analytics :</strong> permet d’analyser la bonne santé de vos serveurs, le respects de recommandations (AD, SQL, sécurité), le patch management, la cartographie applicative, le réseau).</font></p><p><font size="3">Bonne mise en œuvre !</font></p><p><font size="3"><br></font></p><p><strong><font size="3"><br></font></strong></p><p><br></p><p><br></p><p><br></p><p><br></p><p><br></p><p><br></p><p><font size="3"><br></font></p><p><br></p><p><font size="3"><br></font></p><p><font size="3"><br></font></p>]]></content:encoded>
    </item>
    <item>
      <title>Raspberry PI 3, Wifi et Raspbian : Se connecter en WPA2</title>
      <link>https://docs.microsoft.com/archive/blogs/fesnouf/raspberry-pi-3-wifi-et-raspbian-se-connecter-en-wpa2</link>
      <pubDate>Sun, 19 Feb 2017 11:42:55 GMT</pubDate>
      <dc:creator><![CDATA[Frédéric ESNOUF]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/fesnouf/?p=2755</guid>
      <description><![CDATA[Dans un article précédant...]]></description>
      <content:encoded><![CDATA[<p>Dans un article précédant (<a href="https://blogs.technet.microsoft.com/fesnouf/2017/02/14/raspberry-pi-3-wifi-et-raspbian-se-connecter-en-wep/">https://blogs.technet.microsoft.com/fesnouf/2017/02/14/raspberry-pi-3-wifi-et-raspbian-se-connecter-en-wep/</a>), j’ai exposé la configuration à mettre en œuvre pour connecter un Raspberry PI version « 3 » (qui a maintenant une cadte Wifi intégrée) sur un réseau domestique.  <p>L’objectif était de regrouper toutes les commandes utilises pour voir, débugger, et configurer une configuration de ce type. <p>Dans ce précédant exemple, j’utilisais le WEB (oui je sais, pas du tout sécurisé). <p>Passons maintenant à une configuration plus avancée, la configuration WPA2-PSK [AES], sur la base de la configuration précédante. <p><b>sudo nano /etc/network/interfaces</b> <p>Mettre en remarque (ajouter # devant) les lignes Wireless essid et key. Ensuite, retirer le # devant la ligne faisant référence au fichier WPA_supplicant.conf.  <p>C’est dans ce fichier que nous allons repositionner la configuration. <p><b>sudo nano /etc/wpa_supplicant/wpa_supplicant.conf</b> <p>Ajouter la configuration suivante : <p>network={<br>ssid="Votre SSID"<br>psk="Votre mot de passe"<br>proto=RSN<br>key_mgmt=WPA-PSK<br>pairwise=CCMP<br>auth_alg=OPEN<br>} <p>Proto et pairwise correspondent à WPA2. <p><b>Sudo reboot</b> <p>Une fois connecté de nouveau en Wifi (si cela ne fonctionne pas, repasser en filaire) on peut vérifier avec la commande <b>sudo iwlist wlan0 scan</b> la configuration des bornes émétrices.</p>]]></content:encoded>
    </item>
    <item>
      <title>Raspberry PI 3, Wifi et Raspbian : Se connecter en WEP</title>
      <link>https://docs.microsoft.com/archive/blogs/fesnouf/raspberry-pi-3-wifi-et-raspbian-se-connecter-en-wep</link>
      <pubDate>Tue, 14 Feb 2017 18:22:53 GMT</pubDate>
      <dc:creator><![CDATA[Frédéric ESNOUF]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/fesnouf/?p=2745</guid>
      <description><![CDATA[Voici quelques jours, j’ai reçu un Raspberry PI « 3 » pour un projet personnel.  La version « 3 »...]]></description>
      <content:encoded><![CDATA[<p>Voici quelques jours, j’ai reçu un Raspberry PI « 3 » pour un projet personnel.  <p>La version « 3 » possède de nouvelles caractéristiques, et en particulier embarque maintenant une carte Wifi. <p>Après avoir installé Raspbian et fait toutes les mises à jour, impossible de se connecter à mes bornes. Depuis l’interface graphique, je vois les bornes, j’entre la clé d’authentification… aucun message mais manifestement je ne suis pas connecté. <p>Dans mon environnement, j’ai plusieurs bornes wifi (vieille BOX, répéteur B/G/N, téléviseur connecté) et impossible de connecter la moindre machine. J’utilise du WEP pour l’authentification et aucun autre appareil n’a de problème. <p>Voici ci-dessous, après pas mal de recherches, la configuration qui fonctionne chez moi, ainsi qu’une liste de commandes utilisées pour la configuration et le « débug ». Tout ceci à taper en ligne de commande. <h1>Scanner ses bornes Wifi</h1> <p>Cette commande va scanner les bornes wifi environnantes, et vous en donner les caractéristiques. Depuis mon PC Windows, j’utiliser également l’application « Wifi Analizer » pour double vérifier. <p>La commande :  <p>sudo iwlist wlan0 scan <p>Le résultat (j’ai retiré quelques lignes, et remplacé quelques variables comme les MAC address, nom de borne etc.). La première est une vieille Freebox (mimo) qui fonctionne en « B », et la suivante un répéteur B/GN : <p>wlan0 Scan completed : <p>Cell 01 - Address: 9E:AA:BB:CC:DD:EE <p>Channel:7 <p>Frequency:2.442 GHz (Channel 7) <p>Quality=56/70 Signal level=-54 dBm <p>Encryption key:on <p>ESSID:"Wifi1" <p>Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s <p>Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s <p>36 Mb/s; 48 Mb/s; 54 Mb/s <p>Mode:Master <p>Extra:tsf=0000000000000000 <p>Cell 02 - Address: 28:AA:BB:CC:DD:EE <p>Channel:7 <p>Frequency:2.442 GHz (Channel 7) <p>Quality=70/70 Signal level=-30 dBm <p>Encryption key:on <p>ESSID:"Wifi2" <p>Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s <p>24 Mb/s; 36 Mb/s; 54 Mb/s <p>Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 48 Mb/s <p>… (volontairement coupé pour cet article). <p>Attention : j’ai noté dans certains articles trouvés ici ou là que les canaux 12 et 13 peuvent poser problème car interdit aux USA. Si c’est le cas, un scan de ce type va aider à comprendre votre configuration. Vous pouvez alors forcer une configuration sur un autre canal. <p>Note : Je n’ai pas eu l’occasion de tester cette hypothèse. <h1>Configurer sa borne Wifi</h1> <p>J’ai le sentiment que le WEP est ce qui a posé problème dans l’authentification via l’interface. <p>Après avoir testé différentes configurations proposées ici ou la, voici celle qui a fonctionné pour moi. Editer le fichier de configuration à l’aide de la commande : <p>sudo nano /etc/network/interfaces <p>et la configuration :  <p>auto lo <p>#Carte lan <p>iface lo inet loopback <p>iface eth0 inet dhcp <p>#Wifi <p>auto wlan0 <p>allow-hotplug wlan0 <p>iface wlan0 inet dhcp <p>wireless-essid wifi1 <p>wireless-key lacle <p>#wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf <p>La dernière ligne (en remarque) est importante. <p>J’ai trouvé de nombreux articles proposant de configurer le wifi dans ce fichier, mais sans résultat. En l’ajoutant en remarque, et en ajoutant directement dans ce fichier les deux lignes « wireless », cela a fonctionné. <p>Notez ici qu’il n’y a pas de Quote pour ces deux paramètres. Entrez le nom de votre SSID, et la clé WEB en texte (pas hexa). <h1>Les commandes utiles </h1> <p>Pour arrêter et redémarrer une carte (après changement de configuration), voici la syntaxe : <p>sudo ifdown wlan0  <p>sudo ifup wlan0 <p>Lors de l’exécution de « ifup » vous verrez le dialogue DHCP. S’il ne trouve rien, c’est que la connexion Wifi n’a pas fonctionné.  <p>Dans le cas contraire vous verrez le dialogue (DHCPOffer, ..). <p>Autre commande intéressante :  <p>ifconfig wlan0 <p>Ici vous verrez la configuration de votre carte au sens large (MAC, IP, etc..) . Notez ici la présence de « inet adr », ce qui veut dire que la connexion et le DHCP a fonctionné. <p>wlan0 Link encap:Ethernet HWaddr b8:aa:bb:cc:dd:ee <p>inet adr:192.168.zz.34 Bcast:192.168.zz.255 Masque:255.255.255.0 <p>adr inet6: fe80::baa:bb:cc:dd/64 Scope:Lien <p>UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 <p>RX packets:2275 errors:0 dropped:0 overruns:0 frame:0 <p>TX packets:432 errors:0 dropped:0 overruns:0 carrier:0 <p>collisions:0 lg file transmission:1000 <p>RX bytes:281857 (275.2 KiB) TX bytes:93318 (91.1 KiB) <p>La prochaine étape pour moi sera de faire pareil non pas avec Raspbian, mais avec Windows IoT. <p>Bonne mise en œuvre !</p>]]></content:encoded>
    </item>
    <item>
      <title>Raspberry PI 3 : Wifi, but limited ?</title>
      <link>https://docs.microsoft.com/archive/blogs/fesnouf/raspberry-pi-3-wifi-but-limited</link>
      <pubDate>Sat, 14 Jan 2017 12:32:27 GMT</pubDate>
      <dc:creator><![CDATA[Frédéric ESNOUF]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/fesnouf/?p=2735</guid>
      <description><![CDATA[This is really the first draft of this article since I am working on it now. A few days ago, I have...]]></description>
      <content:encoded><![CDATA[<p>This is really the first draft of this article since I am working on it now.</p> <p>A few days ago, I have received a Raspberry Pi version 3. This V3 contains many enhancements, including now a Wifi Chipset embeded (you don’t need a dongle anymore).</p> <p>After a few hours of work I am just stuck : my RB3 can’t see any wifi.</p> <blockquote> <p>* DSL box is invible, </p> <p>* I have a netgear repeater, same.</p> <p>* … and also several equipments such as TV. </p> <p>And the RB device is really up to date.</p></blockquote> <p>A clue came when I turned on Wifi sharing on my Nokia 930. My RB3 can see it !</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2017/01/image293.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/01/image_thumb233.png" width="256" height="45"></a></p> <p>So back to old days, where OSI model was my “bible”, I started to investigate a bit. </p> <p>Running a Wifi Scanner, I can see that RB3 can only see 802.11 “N”, and my devices are running on “G”.</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2017/01/image294.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;margin: 0px;padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/01/image_thumb234.png" width="244" height="155"></a></p> <p>&nbsp;</p> <p>What is very confusing is this :</p> <blockquote> <p>* In RB3 device, the drivers says that it is “N” (not specifying only, just N)</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2017/01/image295.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/01/image_thumb235.png" width="244" height="44"></a></p> <p>* This web site mention “N” too : </p> <p><a href="https://www.raspberrypi.org/magpi/raspberry-pi-3-specs-benchmarks/">https://www.raspberrypi.org/magpi/raspberry-pi-3-specs-benchmarks/</a> introducing chipset BCM43438 <p>* Chipset manufacturer says BGN :</p></blockquote> <p><a href="https://msdnshared.blob.core.windows.net/media/2017/01/image296.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/01/image_thumb236.png" width="244" height="23"></a>&nbsp; <p><a title="http://www.cypress.com/file/298076/download" href="http://www.cypress.com/file/298076/download">http://www.cypress.com/file/298076/download</a></p> <p>Is it a chipset problem (N only) or a driver problem (N today, but can support B/G/N) ? … but for sure this is blocking several scenarios.</p> <p>What would be the plan B ? Buy another “N” only dongle, or upgrade your entire infrastructure with a very recent hardware.</p> <p>.. investigating.</p>]]></content:encoded>
    </item>
    <item>
      <title>(Part 3) Backup is good. Restore is great. But test your data is even better: the script : security checks.</title>
      <link>https://docs.microsoft.com/archive/blogs/fesnouf/part-3-backup-is-good-restore-is-great-but-test-your-data-is-even-better-the-script-security-checks</link>
      <pubDate>Sun, 01 Jan 2017 08:43:19 GMT</pubDate>
      <dc:creator><![CDATA[Frédéric ESNOUF]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/fesnouf/?p=2616</guid>
      <description><![CDATA[As I mentioned in the previous posts (click here : post 1 : the concept, post 2 : the script),...]]></description>
      <content:encoded><![CDATA[<p><font size="2">As I mentioned in the previous posts (click here : post 1 : <a href="https://blogs.technet.microsoft.com/fesnouf/2016/12/27/part-1-backup-is-good-restaure-is-great-but-test-your-data-is-even-better/">the concept</a>, post 2 : <a href="https://blogs.technet.microsoft.com/fesnouf/2016/12/27/part-2-backup-is-good-restaure-is-great-but-test-your-data-is-even-better/">the script</a>), “Backup” is one of the key pilars in terms of security. </font></p> <p><font size="2">It will not only help you in case you did a mistake (so restore the data to fix it), but also cope with security attacks.</font></p> <p><font size="2">Most of the countries all around the world have security agencies here to help you, not only as a company but also as a citizen.</font></p> <p><font size="2">In France, ANSSI (<a title="https://www.ssi.gouv.fr/entreprise/precautions-elementaires/dix-regles-de-base/" href="https://www.ssi.gouv.fr/entreprise/precautions-elementaires/dix-regles-de-base/">https://www.ssi.gouv.fr/entreprise/precautions-elementaires/dix-regles-de-base/</a>) reminds you the 10 rules of security which of course, contains the backup Pilar.</font></p> <p><font size="2"></font>&nbsp;</p> <p><font size="2">FBI, in the USA also recommends “Cloud Backup” to face Ransomware problems : <a title="https://www.fbi.gov/news/stories/incidents-of-ransomware-on-the-rise" href="https://www.fbi.gov/news/stories/incidents-of-ransomware-on-the-rise">https://www.fbi.gov/news/stories/incidents-of-ransomware-on-the-rise</a></font></p> <p><font size="2"></font>&nbsp;</p> <p><font size="2"><strong>If you think “hybrid infrastructure”,</strong> you can easilly turn this very standard “Backup” concept <strong>into something more modern and more efficient.</strong> </font></p> <p><font size="2">Then, you will not only lower your costs by storing your data in Microsoft Datacenters, but you will also embrace the power of hybrid to add more “value” in this backup scenario.</font></p> <p><font size="2"></font>&nbsp;</p> <p><font size="2">In the previous posts I introduced in details the concept I wanted to cover in this suite of 3 articles : </font></p> <p><font size="2">1) <strong>Ability to backup in the Cloud leveraging Azure Backup</strong> (servers and workstation) : no more tapes, no more devices to read these tapes, no more expensive external storage, etc. </font></p> <p><font size="2">2) Now that data is stored and secured in Azure, <strong>you can automate the restore tests on a monthly basis to validate</strong> at 100% that your data is ready to be used in case of a problem. Backup is good, restore is better ! and it can be totally automated. Some regulations ask you to “test” restore to be compliant. This will be done from Azure (storage) to Azure (a VM automating this), same Datacenter, so extremly quick.</font></p> <p><font size="2">3) <strong>But let’s go higher, why don’t we leverage this restored data and run on them security checks, just to make sure that we have not in this data some threats that were not detectable in the past.</strong></font></p> <p><font size="2"></font>&nbsp;</p> <p><font size="2">If you combine all the layers (backup, restore, securitychecks) of this approach, you are really in an hybrid world !</font></p> <p><font size="2"></font>&nbsp;</p> <h1>What are these checks ?</h1> <p><font size="2">It is always interesting to see that if you are asking the same question to different people (so with different roles in a team), you may have different answers. In fact the sum of their answers make the global concept even bigger. Here is my quick experience on this question : </font></p> <p><font size="2"></font>&nbsp;</p> <p><font size="2">1) Some people told me that they wanted technical statistics about the data itself, in terms of quantity, type, volume : why don’t you run solutions such as TreeSize or others? </font><font size="2"></font>&nbsp;</p> <p><font size="2">2) Security folks asked me to run an Antivirus Scan, a deep one. As you may know, by default, Windows 2016 (the OS I selected for my VM in Azure) contains by default Defender. This product is also scriptable, we will leverage this too.</font></p> <p><font size="2">3) Some others will ask to check for ransomware, and not only on servers, but also on workstations.. Especially VIPs.</font></p> <p><font size="2"></font>&nbsp;</p> <p><font size="2">.. but sky is the limit.</font></p> <p><font size="2"></font>&nbsp;</p> <p><font size="2">For your company, you really need to go though this brainstorming phase, and identify what makes sense for you, in fact for all members of the team. But let’s see how to implement these 3 examples :</font></p> <p><font size="2"></font>&nbsp;</p> <h1><font size="3">Example 1 : data statististics</font></h1> <p><font size="2">There are many products on the market to analyze data (a disk, a volume, ..). </font></p> <p><font size="2">I choosed for this article to use TreeSize&nbsp; (I installed the free/Eval version which is scriptable), a powerfull application that can generate reports and bring benefits to your team.</font></p> <p><font size="2"></font>&nbsp;</p> <p><font size="2">Here is the code I used :</font></p> <p><font size="2"></font>&nbsp;</p> <p><font size="2"><strong>$programme="Treesize.EXE"<br>$params="/SAVE d:\Myreport.txt /NOHEADERS /EXPAND 5 /SIZEUNIT 3 /NOGUI /SORTTYPE 1 c:\"<br>Set-Location -Path "c:\Program Files\JAM Software\TreeSize"<br>Start-Process $programme $params</strong></font></p> <p><font size="2"></font>&nbsp;</p> <p><font size="2">Once the report is generated, I can just “Add” the file to an automated email for that will contain the result of all my checks, including the ones below.</font></p> <p>&nbsp;</p> <p><font size="3">Example 2 : Virus (and stuffs) deep search</font></p> <p><font size="2">As I mentioned, Windows 2016 has by default Defender installed. You can also script this great product with this code below :</font></p> <p><font size="2"></font>&nbsp;</p> <p><font size="2"><strong>"Updating definition file"<br>Update-MpSignature<br>"Starting SCAN, Custom"<br>Start-MpScan&nbsp; -ScanType CustomScan -ScanPath "D:\RESTAURE"<br></strong></font></p> <p><font size="2"><strong>"Extracting detected problems. Criteria is 'detected today'"<br>#Get-MpThreatDetection | Where {$_.InitialDetectionTime.Date -eq (Get-Date).Adddays(0).Date}<br>$AVFound=Get-MpThreatDetection | out-string<br></strong></font><font size="2">The line in remark is an example of what you can add to the search. In this example “Adddays” could be 0 (today), –1 (yesterday.</font></p> <p><font size="2"></font>&nbsp;</p> <p><font size="3">Example 3 : anticipate Ransomware attacks</font></p> <p><font size="2">That is not an easy topic.</font></p> <p><font size="2">Browsing arround for expert feedback, I found this article : </font><a href="https://www.netfort.com/blog/methods-for-detecting-ransomware-activity/"><font size="2">https://www.netfort.com/blog/methods-for-detecting-ransomware-activity/</font></a><font size="2">. </font></p> <p><font size="2">The Author mentioned that it could be interesting to look for some specific file extensions, in fact the most common ones used by developpers of such bad product.</font></p> <p><font size="2"></font>&nbsp;</p> <p><font size="2">So it took just a few seconds to add a search in the global script :</font></p> <p><font size="2"><br><em><strong>$ransom=Get-ChildItem d:\RESTAURE -Filter *.* -Force -Include *.enc, *.R5A, *.R4A, *.encrypt, *.locky, *.clf, *.lock, *.cerber, *.crypt,&nbsp; *.coverton, *.enigma, *.czvxce, *.scl, *.crinf, *.crjoker, *.encrypted, *.code, *.CryptoTorLocker2015!, *.crypt, *.ctbl,&nbsp; *.locked, *.ha3, *.enigma, *.cry, *.crime, *.btc, *.kkk, *.fun, *.gws, *.keybtc@inbox_com, *.kimcilware.LeChiffre, *.crime, *.oor, *.magic, *.fucked, *.KEYZ, *.KEYH0LES, *.crypted, *.LOL!, *.OMG!, *.porno, *.RDM, *.RRK, *.RADAMANT, *.kraken, *.darkness, *.nochance, *.oshit, *.oplata@qq_com, *.relock@qq_com, *.crypto, *.helpdecrypt@ukr, *.pizda@qq_com, *.dyatel@qq_com_ryp, *.nalog@qq_com, *.chifrator@qq_com, *.gruzin@qq_com, *.troyancoder@qq_com, *.encrypted, *.cry, *.AES256, *.enc, *.hb15, *.vscrypt, *.infected, *.bloc, *.korrektor, *.remind, *.rokku, *.encryptedAES, *.encryptedRSA, *.encedRSA, *.justbtcwillhelpyou, *.btcbtcbtc, *.btc-help-you, *.only-we_can-help_you, *.sanction, *.sport, *.surprise, *.vvv, *.ecc, *.exx, *.ezz, *.abc, *.aaa, *.zzz, *.xyz, *.biz, *.micro, *.xxx, *.ttt, *.mp3, *.Encrypted, *.better_call_saul, *.xtbl, *.enc, *.vault, *.xort, *.trun, *.CrySiS, *.EnCiPhErEd, *.73i87A, *.p5tkjw, *.PoAr2w, *.xrtn, *.vault, *.PORNO -Recurse&nbsp; | out-string<br></strong></em></p></font> <p><font size="2"><em><strong></strong></em></font>&nbsp;</p> <p><font size="3"></font><font size="3">Conclusion</font></p> <p><font size="3">So it is extremly easy to write a script that will both restore data, and also run several security checks. At the end, you will receive an email with all the informations you need.</font></p> <p><font size="3"></font>&nbsp;</p> <p><font size="3">This can be done in Powershell leveraging of course Azure Backup scripting, but also the power of Powershell in general.</font></p> <p><font size="3"></font>&nbsp;</p> <p><font size="3">In this last post, I showed you a few basic example of “security checks” you can add in your process. This way, you are not only checking if restored worked, but also check the data.</font></p> <p><font size="3"></font>&nbsp;</p> <p><font size="3">Feel free to send me some example of your checks, I will add them on this page with cudos !</font></p> <p><font size="2">&nbsp;</p></font> <p><font size="2"></font></p>]]></content:encoded>
    </item>
    <item>
      <title>(Part 2) Backup is good. Restore is great. But test your data is even better: the script.</title>
      <link>https://docs.microsoft.com/archive/blogs/fesnouf/part-2-backup-is-good-restaure-is-great-but-test-your-data-is-even-better</link>
      <pubDate>Tue, 27 Dec 2016 13:13:49 GMT</pubDate>
      <dc:creator><![CDATA[Frédéric ESNOUF]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/fesnouf/?p=2565</guid>
      <description><![CDATA[In part one of this Blog, I have introduced the idea which is to automate (via Powershell) data...]]></description>
      <content:encoded><![CDATA[<p><font size="2">In part one of this Blog, I have introduced the idea which is to automate (via Powershell) data restore, and then run checks (antivirus, data structure, ransomware) on this restored data. </font> <p><font size="2"></font>&nbsp; <p><font size="2"><a href="https://blogs.technet.microsoft.com/fesnouf/2016/12/27/part-1-backup-is-good-restaure-is-great-but-test-your-data-is-even-better/">Click here to read Part 1</a> which contains the introduction of the concept, and how to configure your machine used to restore data.</font>  <p><font size="2"><a href="https://blogs.technet.microsoft.com/fesnouf/2017/01/01/part-3-backup-is-good-restore-is-great-but-test-your-data-is-even-better-the-script-security-checks/">Click here to read Part 3</a> that will focus on security checks (examples).</font>  <p><font size="2"></font>&nbsp; <p><font size="2">In this second Post, I will focus now on the script itself, and share with you a few thoughts to even enhance this. The global structure of the API follows this diagram :</font>  <p><font size="2"></font>&nbsp; <p><img alt="Recovery Services object hierarchy" src="https://docs.microsoft.com/en-us/azure/backup/media/backup-azure-vms-arm-automation/recovery-services-object-hierarchy.png" width="475" height="162">  <p>&nbsp; <p>&nbsp; <p>Let’s see now how it works.  <p>&nbsp; <h1>Step 1 : Authenticate Azure</h1> <p><font size="2">As I mentioned in Post 1, this script has to be executed as an administrator otherwise you will get explicit errors asking for this level of privilege. </font> <p><font size="2">First of all, you will need to authenticate Azure in order to read the properties of your Vaults. </font> <p><font size="2">To do so, run this <strong>Login-AzureRmAccount</strong> command. Depending on the level of security you set for this account you will be asked for an indentifier and a password. If you turned on Stong Authentication on this identity, you will be called by MFA to validate who you are. </font> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/12/clip_image00217.jpg"><img title="clip_image002" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/2016/12/clip_image002_thumb13.jpg" width="244" height="156"></a>  <p><font size="2">TIP : if you need to run this&nbsp; script several times - for example if you are testing/enhancing it – note that you just need to run this authentication command once. When first authentication has succeded, the best practice is to just comment (by adding #) the line. </font> <p><font size="2">Once authenticated, the command will return this : </font> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/12/image578.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/12/image_thumb514.png" width="244" height="75"></a>  <h4>&nbsp;</h4> <h1>Step 2 : Connect the Vault</h1> <p><font size="2">The Vault is where the data has arrived when you did backup a server or a workstation.</font>  <p><font size="2">This Vault has several properties that you can set in the Azure portal (such as the name, type of storage( LRS/GRS), some of them are exposed by the Powershell API, some others are not. </font> <p><font size="2">Calling this API will give me in return an array containing the list of « Vaults » I have on my subscription. </font> <p><font size="2">Note : In my scenario I just have one, so $vault[0] is my first (and only) Vault. </font> <p>&nbsp; <p><a href="https://msdnshared.blob.core.windows.net/media/2016/12/image579.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/12/image_thumb515.png" width="244" height="75"></a>  <p><font size="2">Here you can see the name starting with « bac… », the datacenter used (northerneurope) to store the data, and several confidential data that I have hidden. </font> <p>&nbsp; <h1>Step 3 : Get Vault properties and access it</h1> <p><font size="2">In this command below, I pass a parameter named $Vault[0] which specifies the Vault I want to work with. This is in fact what we got from the previous command. </font> <p><font size="2">But you can’t access the structure of a Vault if you don’t have an “access key”, sort of temporary certificate. </font> <p><font size="2">With the 3 first lines of code, I download locally this « access key ». </font><font size="2">The file is an XML structure, it contains some credentials (the “certificate”) that will be available only for 2 days. </font> <p><a href="https://msdnshared.blob.core.windows.net/media/2017/01/image141.png"><font size="2"><a href="https://msdnshared.blob.core.windows.net/media/2017/01/image142.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/12/image_thumb528.png" width="510" height="84"></a></font></a><font size="2"> </font> <p><font size="2">Now that I have this key, I can call the <strong>Get-OBAlternateBackupServer</strong> command to access the Vault. I just pass the key as a parameter, and get in return an array that will contain interesting information about the Vault itself. </font> <p>&nbsp; <h1>Step 4 : List servers backing up in this Vault.</h1> <p><font size="2">We have access to the Vault now. We need to see who (servers, workstation) is backing up in this vault in order to select the machine, and then go to the restore phase. </font> <p><font size="2">This script below has in fact two goals. </font> <p><font size="2">1) The two first lines just create a variable that will contain the name of the server I want to work with. </font> <p><font size="2">2) This basic « for » code laverages the result generated by the « <strong>Get-OBAlternateBackupServer</strong>» command and just display the result (What we get in this array). Then, having the list of machines in the vault, you can pick the one you want, identify the position in the array, and set accordingly the value in the 2 first lines of code. </font> <p><font size="2">TIP : As you probably know, if you select these « if » lines in the ISE interace, and if you press F8… the GUI will just execute the selected lines. In our scenario, it will list the servers contained in the Vault. </font> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/12/image581.png"><font size="2"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/12/image_thumb517.png" width="244" height="69"></font></a><font size="2"> </font> <p><font size="2">Now that we identified the machine we want to work with, and set our $Obj variable with its name, we call the appropriate Azure Backup command to connect this server. To do so, we call below the <strong>Get-OBRecoverableSource</strong> command and pass the name as a parameter. </font> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/12/image582.png"><font size="2"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/12/image_thumb518.png" width="244" height="66"></font></a><font size="2"> </font> <p><font size="2">Then we display the value of the object created ($source[0]), and it displays again the ServerName we have passed. We are good ! </font> <p>&nbsp; <h1>Step 4 : Select the Backup (Recovery Point) to restore</h1> <p><font size="2">Since we can do backup every day, our Vault will contain a lot of « recovery points », and we need to specify in the script which « day » to restore. </font> <p><font size="2">As you can see in the code, the parameter passed to the command is in fact the variable that is connected to the server. </font> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/12/image583.png"><font size="2"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/12/image_thumb519.png" width="244" height="82"></font></a><font size="2"> </font> <p><font size="2">Same remark as previously, if you run the « For » code you will get the list of recovery point. </font> <p><font size="2">TIP : I am not a powershell Guru, but a nice Function where we can pass a date, and get in return the index in the Array would be usefull in production ! </font> <p><font size="2">We will require the « index » of that recovery point in order to call the next command. As an example, here is what displays the « for » code (here index=11). The key value would be the Date. </font> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/12/image584.png"><font size="2"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/12/image_thumb520.png" width="244" height="79"></font></a><font size="2"> </font> <p><font size="2">TIP : Surprisingly (under investigation) ItemSize is empty. </font> <p>&nbsp; <h1>Step 5 : Let’s restore now</h1> <p><font size="2">We are almost ready to restore the data. </font> <p><font size="2">First we need to create a « recovery option » variable (array) that will contains several « options » for our restore phase. In the example below, we set the destination directory, and provide some guidance in case some files are already there. </font> <p><font size="2">We also prepare a $key variable that will in fact contain the encryption key used when you installed the agent, and generated this key. Since the data is encrypted « at the source » when we run the backup, without this key we can’t access the data and start the restore phase. </font> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/12/image585.png"><font size="2"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/12/image_thumb522.png" width="244" height="25"></font></a><font size="2"> </font> <p><font size="2">Now we are ready to go ! </font> <p><font size="2">Below, I have of course added some code to display text to analyze performance (time to start/end) of such restore. </font> <p><font size="2">The « Recovery » command takes some basic parameters such as : </font> <ul> <li><font size="2">Recovery point to restore, </font> <li><font size="2">Options to do such process and if course the key to restore this data.</font></li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/12/image589.png"><font size="2"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/12/image_thumb525.png" width="244" height="64"></font></a></p> <p><font size="2"></font>&nbsp;</p> <h1>User experience when you run this script</h1> <p><font size="2">It is very interesting to notice that when you run the Script, it will in fact « remote control » the Azure Backup Agent. </font> <p><font size="2">Below you can see that the script is saying that « it is estimating size »… and if you run the Backup agent GUI at the same time, you will also get the same information demonstrating this « remote control » approach. </font> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/12/image590.png"><font size="2"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/12/image_thumb526.png" width="244" height="130"></font></a><font size="2"> </font> <p><font size="2">Just to let you know, the script will start by an « Estimating size of a backup », then it will turn into a « Transferring data ». Then after a few mn/hours depending of the size, you get your data. </font> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/12/image591.png"><font size="2"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/12/image_thumb527.png" width="154" height="105"></font></a><font size="2"> </font> <p><font size="2">TIP : You can run the Azure Backup Agent to see the size of the data restored : </font> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/12/clip_image0261.jpg"><font size="2"><img title="clip_image026" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="clip_image026" src="https://msdnshared.blob.core.windows.net/media/2016/12/clip_image026_thumb1.jpg" width="244" height="101"></font></a><font size="2"> </font> <p><font size="2"></font>&nbsp;</p> <h1>The full script</h1> <p><font size="2">Here is the script I used to restore the data. </font></p> <p><font size="2">You will need to add your key in the corresponding variable :</font></p> <p>&nbsp;</p> <p><br><font size="1" face="Courier New">Login-AzureRmAccount<br>$vault =&nbsp; Get-AzureRmRecoveryServicesVault<br>$vault[0]</font></p> <p><font size="1" face="Courier New">$credspath = "C:\restaure"<br>$credsfilename = Get-AzureRmRecoveryServicesVaultSettingsFile -Backup -Vault $vault[0] -Path $credspath <br>$fileToLoad=$credsfilename[0].FilePath<br>$AltSrv = Get-OBAlternateBackupServer –VaultCredentials $FileToLoad<br>$AltSrv[0] </font></p> <p><br><font size="1" face="Courier New">$obj = new-object Microsoft.Internal.CloudBackup.ObjectModel.OMCommon.CBBackupServer<br>$obj.ServerName = $AltSrv[2].ServerName[0] <br>"List of Servers found : "<br>for ($i=0;$i -le $AltSrv[2].Count-1;$i++)<br>{<br>&nbsp;&nbsp;&nbsp; "$i : "<br>&nbsp;&nbsp;&nbsp; $AltSrv[2].ServerName[$i] <br>}</font></p> <p><font size="1" face="Courier New">$source = Get-OBRecoverableSource -Server $obj<br>$source[0] <br>$rps = Get-OBRecoverableItem -Source $source[0]<br>$rps[0] </font></p> <p><font size="1" face="Courier New">$recoverysource=$source[0]<br>$RecoveryPoint = Get-OBRecoverableItem&nbsp; -Source $recoverysource<br>$RecoveryPoint[0]<br>"List of recoverypoints (Array 0 is the last one): "<br>for ($i=0;$i -le $RecoveryPoint.Count-1;$i++)<br>{<br>&nbsp;&nbsp;&nbsp; "$i : "<br>&nbsp;&nbsp;&nbsp; $RecoveryPoint[$i] <br>}</font></p> <p><font size="1" face="Courier New">$key = ConvertTo-SecureString -String<font style="background-color: #ffff00"> </font><font style="background-color: #ffff00">"&lt;</font><font style="background-color: #ffff00">yourkey&gt;"</font><font style="background-color: #ffff00"> </font>-AsPlainText -Force <br>$recovery_option = New-OBRecoveryOption -DestinationPath "d:\restaure" -OverwriteType Skip<br>$recovery_option[0]</font></p> <p><font size="1" face="Courier New">$thebegin=Get-date<br>$RecoveryPoint[0]<br>".. we backup : start ====&gt;"<br>Start-OBRecovery -RecoverableItem $RecoveryPoint[0] -RecoveryOption $recovery_option -EncryptionPassphrase $key&nbsp; <br>"Get Statistics : (check in the agent backup GU for volume of data transfered)"<br>"== Started at :"<br>$thebegin<br>"== ended at :"<br>Get-Date</font></p> <p><font size="1" face="Courier New">#Add your security checks here…</font></p> <p>&nbsp;</p> <p><font size="2">Now it is your turn ! </font></p> <p><font size="2">In real life, this script will have to be enhanced :</font></p> <blockquote> <p><font size="2">1) Add the security checks I was talking about.</font></p> <p><font size="2">2) Add a loop, running this script several time, once per service in a list.</font></p> <p><font size="2">3) Generate some tracing (especially during the Checks), or send results automatically via email to the security team.</font></p></blockquote> <p><font size="2"></font>&nbsp;</p> <p><font size="2">Enjoy Azure Backup !</font></p>]]></content:encoded>
    </item>
    <item>
      <title>(Part 1) Backup is good. Restore is great. But test your data is even better : the concept.</title>
      <link>https://docs.microsoft.com/archive/blogs/fesnouf/part-1-backup-is-good-restaure-is-great-but-test-your-data-is-even-better</link>
      <pubDate>Tue, 27 Dec 2016 08:19:12 GMT</pubDate>
      <dc:creator><![CDATA[Frédéric ESNOUF]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/fesnouf/?p=2325</guid>
      <description><![CDATA[I think you will agree with me, backing up your data (workstation &amp; servers) is one of the key...]]></description>
      <content:encoded><![CDATA[<p><font size="2">I think you will agree with me, backing up your data (workstation &amp; servers) is one of the key pilar of security. Nobody can garantee that due to a hardware failure, a security attack or just a error done by a team member… we can’t prevent major data loss, impacting the business.</font>  <p><font size="2">In this article, I want to focus on Azure Backup, especially how to automate restore via scripting, with a great final goal : <strong>now that the data is restore, why don’t we check and detect problems we have not detected a month ago ?</strong></font>  <p><a href="https://blogs.technet.microsoft.com/fesnouf/2016/12/27/part-2-backup-is-good-restaure-is-great-but-test-your-data-is-even-better/"><font size="2">Click here</font></a><font size="2"> to see the second part of this article (the scripting part).</font>  <p>&nbsp; <h1>Quick intro about Azure Backup</h1> <p><font size="2">Microsoft has a long history around security in general and of course backup. No matter if it is workstation or server, we have always provided great products to backup and secure data.</font>  <p><font size="2">Azure Backup – Microsoft’s Backup solution - fully embrace the cloud model leveraging the best of « on premisses » and « cloud ». </font> <p><font size="2">An agent on the machine can either backup directly on the internet (small sites, workstations, ..) or on a local « backup server » (JBOD) that will then archive data in Azure for long . This way we have the best approach to fully take advantage of hybrid infrastructure.</font>  <p><font size="2">In this blog, we will not only leverage the GUI (server side or Azure Portal) but <strong>also Scripting</strong>.</font>  <h1>The goal of this blog : what a bright approach</h1> <p><font size="2">The idea came discussing with financial institutions. For them (rules, regulations, certifications) validating a backup scenario is not just receiving an email from the software saying « it worked », but really the ability – following a very strinct process in terms of rythm during the year – to test restore from A to Z.</font>  <p><font size="2">With a classical approach, especially if Archiving is done on tapes (which requires hardware equipements to write/read such tapes) it is a bit complex since you need first to get these items from a storage location (usually a few kilometers away), and then make sure you have the appropriate device to read such tape format : </font><font size="2"><strong>For long term archiving (months or 5/15 even&nbsp; 99 years) that is a bit challenging since you would need to keep in spare a lot of devices.</strong></font>  <p><font size="2">Of course when you think hybrid, you just remove this tape/device problem, and store this data (you need to have good bandwith though, Express Route for example) a few thousands kilometers away on a very high secured - totally private - and very un expensive storage.</font>  <p><font size="2">Continguing this discussion with these financial companies, they asked me to set up a prototype of vision leveraging Microsoft Datacenters all around the world, and even add some nice features in this global process : check data consistency !</font>  <p><font size="2">The final idea they put on the table is simple but so efficient : </font> <p><font size="2">1) We backup the data Microsoft Datacenter via Azure Backup, let’s say Europe West.</font>  <p><font size="2">2) On this same Datacenter, we run every month - for just a few hours (time to run the A to Z process) - a machine named « RestoreData », which contains a magic script that will in fact restore locally this data, and perform the consistency checks. If restore worked, we are good and compliant for this phase.</font>  <p><font size="2">3) <strong>but now that we have the data ready, why don’t we run several checks such as Antivirus (maybe files are infected, not detectable a few month/years ago but detectable now), Disk usage, .. why not behaviors to identify Ransomware</strong> ? </font> <p><font size="2">Here comes the idea of this blog, share with you how automate this process, especially the restore phase.</font>  <h1>How to automate restore with Azure Backup : let’s install the components</h1> <p><font size="2">Azure Backup is totally scriptable via Powershell. You can create Vaults, create policies, automate backup and of course, restore this Data.</font>  <p><font size="2">But to do so, the machine performing this job needs to get several components. Let’s see together how to do it (</font><font size="2">This process usually takes 15 to 30 mn).</font>  <p><font size="2"></font>&nbsp; <p><font size="2">Here is the list of the tiny steps you need to follow to run this scenario :</font>  <ul> <li><font size="2">Create your machine in Azure. An A2 is a great approach, providing a C and a D (restore) drive.</font>  <ul> <li><font size="2">I would recommend to use Windows 2016 image, since it includes by default a lot security features of course, especially Defender pre installed (we will use it for the “checks” phase).</font>  <li><font size="2">It makes sense to run this machine in the same Datacenter as your backup Vault is located. This is just quicker.</font></li></ul> <li><font size="2">I would recommend to add network rules on this VM, so only your IP address (the one of your proxy, your home DSL) can reach this machine. Why leaving a machine alone on the internet if it is not necessary ?</font></li></ul> <p><font size="2"></font>&nbsp;</p> <p><font size="2">Now the machine is running, Install Azure Backup agent : </font><a href="https://go.microsoft.com/fwLink/?LinkID=288905&amp;clcid=0x040c"><font size="2">https://go.microsoft.com/fwLink/?LinkID=288905&amp;clcid=0x040c</font></a><font size="2">. This will in fact install the Powershell commands to automate any kind of process, especially restore.</font>  <p><font size="2">TIP : to authorize download on this brand new machine, change IE settings set by default on windows 2016 . Internet Zone, go Download section, enable download. Otherwise IE will block this download… then go back to previous config if needed.</font>  <p><font size="2"></font>&nbsp; <p><font size="2">Now the agent is installed, it has to be registered to the backup Vault. To do so, just follow the classical procedure, same as if you wanted to also backup this machine (this is not our goal indeed). Once registered, this machine will be able to “talk” to the vault.</font>  <p><font size="2">So far so good, but the machine is not ready yet. </font> <p><font size="2"></font>&nbsp; <p><font size="2">We have several other steps to talk via Powershell. </font><font size="2">To follow the steps below, you must run Powershell ISE as an administrator, otherwise some commands will fail :</font>  <ul> <li><font size="2">Install las version of Powershell : </font><a href="https://github.com/Azure/azure-powershell/releases"><font size="2">https://github.com/Azure/azure-powershell/releases</font></a><font size="2">. Download the EXEcutable and run it, it will install the components</font>  <li><font size="2">In Powershell ISE, run this command : « <strong>Install-Module -Name AzureRM</strong> » ... will be prompted several times, say « yes » or « yes to all ». This process takes a while, be patient.</font></li></ul> <p><font size="2">Now to continue the configuration, you will need to authenticate Azure from powershell ISE.</font>  <p><font size="2">To do so, run this command « <strong>Login-AzureRmAccount</strong> » and provide your identity, password and strong authentication if you have enabled it. </font> <p><font size="2">Once authenticated (I assume you have sufficient right in Azure on&nbsp; this identity) we can continue the installation.&nbsp; </font><font size="2">Run this command « <strong>Register-AzureRmResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"</strong> »</font>  <p><font size="2">TIP : You can check modules installed : <strong>Get-Command *azurermrecoveryservices*</strong></font>  <p><font size="2">Now comes the weird part, this is for me&nbsp; a bug. </font><font size="2">Run Powershell Command prompt (but not the ISE !!!!) as an administrator. </font><font size="2">Then run this command « <strong>Import-module MSOnlineBackup</strong> ». </font> <p><font size="2">TIP : If you are not administrator, or running it in <strong>Powershell ISE</strong>, you will get an error message.</font>  <p><font size="2">Now you are all set : </font><font size="2">This VM in Azure contains all the components to automate restore phase.</font>  <p><font size="2">You can run your script.</font>  <p><font size="2"></font>&nbsp; <p><font size="2">... in the next blog, I will explain to you the script I used and the purpose of each command, etc. </font> <p><font size="2">Note : I have noticed working on this scenario that sometimes the online documentation is a bit partial. To reach this goal, I had to read and merge several technical documentations.</font>  <p><font size="2"></font>&nbsp; <p><font size="2"></font></p>]]></content:encoded>
    </item>
    <item>
      <title>OMS log Analytics et Designer : vos requêtes</title>
      <link>https://docs.microsoft.com/archive/blogs/fesnouf/oms-log-analytics-et-designer-vos-requtes</link>
      <pubDate>Tue, 01 Nov 2016 12:48:51 GMT</pubDate>
      <dc:creator><![CDATA[Frédéric ESNOUF]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/fesnouf/?p=2065</guid>
      <description><![CDATA[Log Aalytics (LA)est un outil magique, proposé par les équipes infrastructure et sécurité de...]]></description>
      <content:encoded><![CDATA[<p>Log Aalytics (LA)est un outil magique, proposé par les équipes infrastructure et sécurité de Microsoft. En quelques minutes, il va analyser votre infrastructure interne (et cloud comme Azure ou AWS) et vous indiquer les zones d’amélioration (respect des recommandations, performance, réseau, Windows, Linux, ..) et les zones à risques.</p> <p>Au delà des packs d’intelligence (ensemble de règles pour un produit, réalisé par le développeur de l’application comme AD, SQL, … ou équipe expert comme cybercriminalité), la fonction “Designer” vous permet de construire vos propres rapports, sur la base de vos propres requêtes, sur vos propres données collectées et stockées par Log Analytics.</p> <p>En effet, Microsoft connaît mieux que personne “ses” produits, et va vous donner à travers des “packs d’intelligence” les requêtes vous permettant d’optimiser votre infrastructure, mais il existe tellement d’autres produits sur votre infrastructure que ceux de Microsoft !!! Comment utiliser la puissance de la solution en créant vos propres requêtes ? la réponse est la fonction Designer.</p> <p>&nbsp;</p> <p>Une fois un rapport Designer confectionné (contenant Y requêtes donc Y axes d’analyse de votre infrastructure) il est possible de l’exporter et de le réimporter dans un autre workspace, idéal par exemple pour un consultant qui va déployer chez chacun de ses clients “ses” rapports, basé sur son expérience, et ainsi en quelques minutes capitaliser sur ses expériences du passé.</p> <p>&nbsp;</p> <p>Je vous propose ici de vous expliquer comment le faire, et partager avec vous des requêtes compilées pour vous, et provenant à la fois de spécialistes de Microsoft mais aussi du réseau <strong>dense de partenaires qui œuvrent au quotidien pour sécuriser et rendre performantes les infrastructures des clients Français.</strong></p> <p>Merci à eux pour leur participation à ce blog !</p> <p>&nbsp;</p> <h1>Comment procéder ? Quelle est l’approche ?</h1> <p>Personnellement, après avoir déployé la solution je commence toujours par “me balader” au sein de l’infrastructure d’un client exposé par les données de Log Analytics, afin d’extraire les informations que me donnent des pistes d’amélioration et ce sans aucune effort. </p> <p>Ensuite, petit à petit, et en utilisant des requêtes personnelles, je commence à aller au delà des packs d’intelligence, et découvrir à quel rythme bât le cœur de l’infrastructure au sens large. </p> <p>Par exemple, et c’est aussi simple que cela, en regardant les journaux d’évènements qui sont une mine d’or ! Mais il y a tellement d’informations que sans Log Analytics, cette source est juste inexploitable pour vous, et vous n’écoutez ni n’entendez votre infrastructure.</p> <p>&nbsp;</p> <p><strong>N’oubliez pas :</strong> les produits (Microsoft ou non) vous parlent à travers ces journaux, Windows ou syslog, firewall, etc..!!</p> <p>&nbsp;</p> <p>Sur la base ce cette méthode, et en particulier sur le nombre important de clients que nous avons aidé, nous avons été en mesure (Microsoft, nos partenaires ) d’en extraire une liste de cas “type” à regarder (des requêtes). Le résultat est que nous avons confectionné des rapports que nous savons pertinents dans la majorité des cas. </p> <p>Ces rapports, regroupés par l’intermédiaire de l’option Designer sous forme de portail peut être exporté, et donc réimporté en un clic dans n’importe quel nouvel environnement (workspace) client.</p> <p>Sur ce lien (<a title="https://1drv.ms/f/s!Ar4iATQNy343h5BZCqtEZR_eFHsrig" href="https://1drv.ms/f/s!Ar4iATQNy343h5BZCqtEZR_eFHsrig">https://1drv.ms/f/s!Ar4iATQNy343h5BZCqtEZR_eFHsrig</a> , version 1.8), vous pouvez télécharger un fichier de configuration que vous pourrez importer directement dans votre Workspace, via l’interface de Designer. </p> <p>En 3 clicks, vous aurez à la fois des rapports très courants, mais aussi des requêtes vous permettant de découvrir votre infrastructure.</p> <p>Donc une fois le fichier télécharger sur votre PC via le lien ci-dessus, connectez vous en administrateurs à votre portail Log Analytics, et cliquez sur “View Designer”(si il n’apparait pas c’est que vous de n’avez pas activé dans la configuration du portail) :</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/image184.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/11/image_thumb167.png" width="244" height="190"></a></p> <p>Dans le menu de Designer, sélectionnez importer, puis le fichier charger depuis votre PC, et le rapport apparaît dans votre espace sous le nom “your health” (votre santé):</p> <p>&nbsp;</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/image342.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;margin: 0px;padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/11/image_thumb286.png" width="244" height="147"></a></p> <p><strong>Important : </strong>si vous voulez donner un nom différent au rapport, avant de l’importer dans l’interface, éditez le avec un simple “notepad”. </p> <p>Faite un Search and Replace sur ce nom, car l’interface de Log Analytics ne le permet pas.</p> <p>&nbsp;</p> <p>Comme vous pouvez le voir, et sans effort, le report commence à parler :</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/image343.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/11/image_thumb287.png" width="668" height="336"></a></p> <p>Notez dans le titre de la première colonne la version du rapport (nous la mettrons à jour au fil du temps). Egalement, certains rapports nécessite l’ajout de collecte de certaines données comme les compteurs de performance, cela peut vous demander quelques ajustements en fonction de votre configuration.</p> <p>&nbsp;</p> <p>Ce portail contient donc de nombreux rapports (par colonne) que nous trouvons utiles à chaque client.</p> <p>&nbsp;</p> <p>A la droite de cette suite de rapports, vous avez une zone texte sur laquelle nous avons ajouté les requête de découverte, celles qui feront parler votre infra et vous permettront de découvrir les problèmes sur cet environnement :</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/image187.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/11/image_thumb170.png" width="244" height="175"></a></p> <p>&nbsp;</p> <h1>Les requêtes, explications</h1> <p>Voici les requêtes de découverte que nous vous proposons dans le rapport (quelques exemples, nous ne mettrons par la suite à jour que le fichier d’importation). Certaines sont issues d’autres consultants qui apportent ainsi leur expérience à ce blog :</p> <p>&nbsp;</p> <h2>R1 : nombre d’évènements par Source</h2> <p>Une “source” est en fait une application au sein du serveur. Cette requête donc afficher, et classé par “count”,&nbsp; ces messages renvoyés vous permettant d’identifier les applications les plus bavardes, de regarder ce qu’elles vous disent et de s’adapter aux messages. Regardez les 2 requêtes suivantes …</p> <p>Type=Event | Measure count() by Source</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/image188.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/11/image_thumb171.png" width="519" height="335"></a></p> <h2>R2 : Nombre d’évènements, par Source mais de type “Error”</h2> <p>Pourquoi ne pas commencer de regarder sur les évènements de type erreur ? logique, l’application vous appelle à l’aide !</p> <p>J’ai souvent trouvé des application non Microsoft indiquer ici qu’elles rencontrent des problèmes, et l’application Log Analytics a pour objectif d’aider bien au delà des applications Microsoft.</p> <p>Regarder ensuite le descriptif de chaque messager, afin de faire ensuite une requête “maison”, par exemple sur la base d’un mot clé, que vous pourrez ajouter ensuite au rapport quotidien. Ex : “toutes les erreurs de l’application XYZ (un antivirus, un outil Microsoft, ..)”</p> <p>Type=Event (EventLevelName=error) | measure count() by Source</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/SNAGHTMLabc5b58.png"><img title="SNAGHTMLabc5b58" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="SNAGHTMLabc5b58" src="https://msdnshared.blob.core.windows.net/media/2016/11/SNAGHTMLabc5b58_thumb.png" width="661" height="349"></a></p> <p>&nbsp;</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/image301.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/11/image30_thumb.png" width="671" height="129"></a></p> <p>&nbsp;</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/image331.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/11/image33_thumb.png" width="675" height="130"></a></p> <h2>R3 : Même chose sur les Warnings</h2> <p>Maintenant que l’on a découvert les “erreurs”, regardons les Warnings. Il faudra ensuite regler les problèmes à la source, l’objectif est que dans quelques jours, ce rapport vous dise “plus de souci”.</p> <p>Type=Event (EventLevelName=warning) | measure count() by Source</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/image361.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/11/image36_thumb.png" width="683" height="109"></a></p> <h2>R4 : les applications “clear Text”</h2> <p>Ceci est remonté par le pack de sécurité, et je le retrouve très souvent dans les audits. </p> <p>Des applications mal configurées autorisent l’authentification clair (précisément, encodé). Une simple capture via Wireshark par, et un pirate (interne ou externe) vole “tous” les mots de passe de l’entreprise car ils circulent en clair.</p> <p>Type=SecurityEvent EventID=4624 LogonType=8 | measure count() by Computer</p> <p>Ici 6 serveurs qui acceptent ce type d’authentification, ce n’est pas normal ! Et regardez le nb de connexion pour les 2 premiers !!!</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/image391.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/11/image39_thumb.png" width="683" height="196"></a></p> <p>&nbsp;</p> <h2>R5: comptes verrouillés</h2> <p>Il n’est pas normal d’avoir des comptes verrouillés, c’est un état d’auto protection de l’infrastructure.</p> <p>Faire les investigations, et si le compte n’a plus d’intérêt alors le désactiver. La gestion des “identités” (automatiser l’arrivée et le départ des employés) a toujours été compliqué pour les clients. </p> <p>Note : La solution “MIM (Microsoft Identity Manager)” serveur est gratuite sous SA, ne reste que les “CALs” pour automatiser ce process de A à Z. D’autres modes d’acquisition existent comme via le bundle EMS (Enterprise Mobility Suite).</p> <p>Type=SecurityEvent EventID=4740 | Measure Count() by TargetAccount</p> <p>&nbsp;</p> <h2>R6 : les authentification qui échouent</h2> <p>Mais pourquoi cela arrive ? un utilisateur a oublié son mot de passe ? Un mot de passe est codé en dur dans un script, un service ? Une attaque en cours ?</p> <p>Il faut regarder cela !!</p> <p>Type=SecurityEvent AccountType=user EventID=4625 | measure count() by IpAddress</p> <p>&nbsp;</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/SNAGHTMLacc4ff0.png"><img title="SNAGHTMLacc4ff0" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="SNAGHTMLacc4ff0" src="https://msdnshared.blob.core.windows.net/media/2016/11/SNAGHTMLacc4ff0_thumb.png" width="629" height="340"></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>D’autres exemples vont arriver plus tard, mais nous allons nous focaliser sur la mise à jour du fichier d’exemple à importer directement dans votre interface. Penser donc à le télécharger régulièrement.</p>]]></content:encoded>
    </item>
    <item>
      <title>Suivre l’actualité : faire son outil pour collecter les données pertinente, gagner en temps et efficacité</title>
      <link>https://docs.microsoft.com/archive/blogs/fesnouf/suivre-lactualit-faire-son-outil-pour-collecter-les-donnes-pertinente-gagner-en-temps-et-efficatit</link>
      <pubDate>Tue, 01 Nov 2016 09:09:12 GMT</pubDate>
      <dc:creator><![CDATA[Frédéric ESNOUF]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/fesnouf/?p=1995</guid>
      <description><![CDATA[Dans le cadre de mon rôle chez Microsoft, j’ai le plaisir de non seulement couvrir les architectures...]]></description>
      <content:encoded><![CDATA[<p><font size="3">Dans le cadre de mon rôle chez Microsoft, j’ai le plaisir de non seulement couvrir les architectures internes à l’entreprise et les thématiques associées (Windows, System Center, ..) mais également Azure.</font></p> <p><font size="3">Parler Azure, c’est un peu comme parler de l’informatique au sens large, c’est une conversation sans fin.</font></p> <p><font size="3">Connaître Azure (au sens large) est impossible, on ne peut connaître que quelques composants en fonction de son métier, car il y en a des quantités astronomiques de services, avec en plus dans le monde DevOps des nouveautés tous les jours.</font></p> <p><font size="3">Mais comment se tenir informé sur l’actualité d’Azure ? j’ai très souvent cette question, et voici peut-être une façon d’y répondre, en tout cas c’est ce que je fais au quotidien.</font></p> <h2>Aller chercher des sources fiables, pertinentes : votre expérience</h2> <p><font size="3">Peu importe le format (RSS, Blog, ..) la personne qui va pousser l’information est importantes. Au fil des années, j’ai identifié des sources de confiance, tant sur la qualité de l’information que sur l’analyse qui en est faite par l’auteur. </font></p> <p><font size="3">C’est la première chose à identifier : vos sources.</font></p> <h2>Collecter ces données et les consommer</h2> <p><font size="3">A ce niveau nous avons nos sources d’information, mais elles sont de différents formats (Twitter, RSS, Blog, autre..), il faut les collecter, les fusionner, afin de pouvoir les lire facilement, et quasiment quotidiennement. </font></p> <p><font size="3">On lance Visual studio pour quelques pages de C# ? Mais non !</font></p> <p><font size="3"></font>&nbsp;</p> <h2>Windows App Studio (ex projet Sienna)</h2> <p><font size="3">Il y a 3 ans, Microsoft a lancé une application dont le nom de code était “Projet Sienna”. Le but était assez simple : faire une application capable de consommer des données et restituer celles-ci sans la moindre ligne de code.</font></p> <p><font size="3">Ce projet est devenu une réelle application, appelée “Windows App Studio” : <a href="https://appstudio.windows.com">https://appstudio.windows.com</a>.</font></p> <p><font size="3">Vous pouvez créer différents projets, puis ajouter des sources d’information, puis expliquez comment les fusionner, et les restituer. </font></p> <p><font size="3">Après quelques minutes de découverte et d’aguerrissement, vous obtenez “votre” application, que vous pouvez installer sur votre PC ou votre téléphone.</font></p> <h2>MesNews : mon application de suivi de l’actualité</h2> <p><font size="3">Voici un exemple du résultat que l’on peut obtenir :</font></p> <h2>Aucun code : l’interface de création d’une application</h2> <p><font size="3">Vous voyez ici l’interface de l’application les différentes sources (carrés verts) et un exemple de rendu avant même de générer l’application :</font></p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/sienna1.png"><img title="sienna1" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="sienna1" src="https://msdnshared.blob.core.windows.net/media/2016/11/sienna1_thumb.png" width="1150" height="715"></a></p> <p>&nbsp;</p> <h2>L’application sur mon PC</h2> <p><font size="3">Tous les jours, je lance l’application, elle se charge de collecter les informations et de me les afficher.</font></p> <p><font size="3"></font>&nbsp;</p> <h2>Source 1 : Agréger via Twitter</h2> <p><font size="3">J’ai tout simplement créé un compte Twitter, et ajouté une liste de source d’auteurs. Ensuite je n’ai plus qu’à référencer “mon” compte twitter, et l’application fait une sorte de “récupérer tout” à chaque lancement, via les API de Twitter, mais sans que vous vous souciiez 1 seconde de comment cela fonctionne.</font></p> <p><font size="3">Pour ajouter une nouvelle source d’information, il faut alors l’ajouter dans votre propre compte Twitter, rien à faire coté application ensuite.</font></p> <p><font size="3"></font>&nbsp;</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/sienna2.png"><img title="sienna2" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="sienna2" src="https://msdnshared.blob.core.windows.net/media/2016/11/sienna2_thumb.png" width="747" height="663"></a></p> <p><font size="3">Le bouton “Edit Current API key” est la seule partie où vous déposerez les clés de confection à votre compte Twitter, la procédure est décrite sur le site d’App Studio.</font></p> <p>&nbsp;</p> <h2>Source 2 : Agréger via RSS</h2> <p><font size="3">Le format RSS est pour moi très important encore à ce jour, car il permet de rendre lisible des Blogs. Le Blog est encore, qu’on le veuille ou non, un format très important, car il permet d’être très détaillé, contenir des photos (screenshots), etc.</font></p> <p><font size="3">Pour faire cette fusion, “Sienna” ne propose pas de service de ce type, il ne peut lire qu’un seul blog à la fois.</font></p> <p><font size="3"></font>&nbsp;</p> <p><font size="3">Pour obtenir cette fusion, il faut alors juste procéder ainsi :</font></p> <p><font size="3">1) Que ce soit sur votre PC (mon cas) ou sur Azure (WebApp, qui peut être gratuit), faire tourner un service Web sur lequel vous allez déposer du code qui va faire ce travail. </font></p> <p><font size="3">2) Vous référencez dans Sienna l’url de ce code afin de l’appeler. Il va récupérer les infos, et vous restituer cette fusion et en donner le résultat à votre application.</font></p> <p><font size="3"></font>&nbsp;</p> <p><font size="3">Voici comment configurer cet appel dans l’interface (ma machine exécuter IIS) :</font></p> <p><font size="3"></font>&nbsp;</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/sienna3.png"><img title="sienna3" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="sienna3" src="https://msdnshared.blob.core.windows.net/media/2016/11/sienna3_thumb.png" width="631" height="592"></a></p> <p><font size="3">Le code au sein de la page (il faut d’autres fichiers dans ce répertoire, qui contiennent le code de fusion en C#, ici on ne voit que la page de configuration) contient simplement une liste de “feed”, c’est à dire d’URL permettant de récupérer des informations au format RSS. </font></p> <p><font size="3">Ensuite, une fois exécuté, le code va restituer un un seul flux de données toutes les informations collectées de ces différentes sources. Sienne se charge de l’affichage.</font></p> <p><font size="3">Vous pouvez tester l’appel de cette URL dans un simple navigateur Web pour valider qu’il n’y a pas d’erreur de frappe.</font></p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/sienna4.png"><img title="sienna4" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="sienna4" src="https://msdnshared.blob.core.windows.net/media/2016/11/sienna4_thumb.png" width="1150" height="248"></a></p> <p>&nbsp;</p> <h2>Le résultat : Overview</h2> <p><font size="3">Dans cet exemple, j’arrive sur la page principale ou j’ai un résumé de l’actualité. Vous voyez ici le logo “Maison” (menu principal). </font></p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/S2-1.png"><img title="S2-1" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="S2-1" src="https://msdnshared.blob.core.windows.net/media/2016/11/S2-1_thumb.png" width="1000" height="752"></a></p> <p><font size="3">Soit en cliquant sur une news, ou alors sur le logo de la section qui m’importe (RSS, Twitter..) j’obtiens la liste des nouveautés.</font></p> <p>Le résultat : Twitter</p> <p><font size="3">Si je click sur le second icône (les deux personnes) j’arrive alors sur les flux Twitter :</font></p> <p><font size="3"></font>&nbsp;</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/image8.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/11/image_thumb7.png" width="1077" height="680"></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <h2>Le résultat :RSS</h2> <p><font size="3">En cliquant sur l’icône Livre (les Flux RSS) j’obtiens un menu similaire, mais avec plus de détails car RSS le permet (versus Twitter) : </font></p> <p>&nbsp;</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/image9.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/11/image_thumb8.png" width="1126" height="630"></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font size="4">Je n’ai plus alors qu’à cliquer sur l’une des news, et la lire :</font></p> <p>&nbsp;</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/11/image10.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/11/image_thumb9.png" width="1123" height="559"></a></p> <p><font size="3"></font>&nbsp;</p> <p>&nbsp;</p> <h2>Conclusions</h2> <p><font size="4">Microsoft AppStudio (ex Sienna) est une application permettant de créer “vos” propres applications sans code. Je parle ici d’applications capables de se connecter à différentes sources d’informations, le les collecter, les fusionner le cas échéant et les restituer.</font></p> <p><font size="4">Appliqué à votre quotidien, vous pouvez 1) sélectionner vos sources de confiance 2) les fusionner et les collecter 3) les afficher dans votre propre portail.</font></p> <p><font size="4"></font>&nbsp;</p> <p><font size="4">Ainsi le résultat sera pertinent pour “vous” dans la mesure ou vous aurez vous même fiabilisé l’ensemble de la chaîne d’information.</font></p> <p><font size="4"></font>&nbsp;</p> <p><font size="4">Bonne lecture ! (et me contacter pour le code RSS si besoin).</font></p>]]></content:encoded>
    </item>
  </channel>
</rss>