Blog de Florent Appointaire

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

    [Powershell] Configuration de vos cartes réseaux

    Powershell

    En référence à mon premier article (Programme Batch) j'ai créé le même script comme promis. Cette version prend en charge Powershell de A à Z version 2.

    J'ai insérer Powershell V3 pour activer ou non le Firewall, je ferai ceci pour tous les modules courant 2013. Il y a encore pas mal de boulot comme faire toutes les vérifications, gérer les erreurs, etc.

    Voici l'interface d'utilisation :

     Capture6

    Je me forme actuellement sur Powershell avec interface graphique. Je pense que je convertirai ce script en interface graphique plus tard.

    Ce script fonctionne sur Windows 7, Windows 8, Windows Server 2008 R2, Windows Server 2012.

    En attendant je vous souhaite une bonne utilisation et si vous avez des remarques/suggestions, n'hésitez pas à me le laisser en commentaire ou à m'envoyer un mail :)

    Pour le téléchargement du script, c'est ici. Renommez le fichier texte en ps1. N'oubliez pas de lancer le script en Administrateur.

    Le code source :

    #// ===========================================================================================
    #//  Created 	       : 26/12/2012      
    #//  Last modification : 26/12/2012                 
    #//  For    	       : http://florent-appointaire.fr    
    #// ===========================================================================================
    #//  Object : IP Configuration with Powershell
    #// ===========================================================================================
    #//  
    #//                             | Author: Florent APPOINTAIRE | 
    #//      
    #// ===========================================================================================
    
    $powershellVersion = $Host.Version
    $powershellVersion = $powershellVersion.Major
    $date = Get-Date -Format dd-MM-yyyy
    $hour = Get-Date -Format t
    $userName = [Environment]::UserName
    $location = $MyInvocation.MyCommand.Path
    
    Function ipconfig/all { 
        ipconfig /all 
    }
    
    Function DHCP {
        Clear-Host
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host "`t" -NoNewLine
        Write-Host '||                     (1) = DHCP                      ||'
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host "`t" -NoNewLine
        $selectCard = Get-WmiObject Win32_NetworkAdapterConfiguration | Format-Table  Description,Index,DHCPEnabled -AutoSize
        $selectCard
        Write-Host "`t" -NoNewLine
        $select = Read-Host 'Select a DeviceID for the DHCP'
        $selectCard = Get-WmiObject Win32_NetworkAdapterConfiguration | Where {$_.Index -eq $select} 
        $selectCard.EnableDHCP()
        $selectCard.SetDNSServerSearchOrder()
        Write-Host "`t" -NoNewLine
        Write-Host "Press any key to continue ..."
        $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
        powershell $location
    } 
    
    Function Config {
        Clear-Host
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host "`t" -NoNewLine
        Write-Host '||                (2) = Switch Configuration           ||'
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host "`t" -NoNewLine
        $selectCard = Get-WmiObject Win32_NetworkAdapterConfiguration | Format-Table  Description,Index,DHCPEnabled -AutoSize
        $selectCard
        Write-Host "`t" -NoNewLine
        $select = Read-Host 'Select a DeviceID for the automatic configuration'
        $selectCard = Get-WmiObject Win32_NetworkAdapterConfiguration | Where {$_.Index -eq $select} 
        $selectCard.EnableStatic("192.168.1.2", "255.255.255.0")
        $selectCard.SetGateways("192.168.1.1", 1)
        Write-Host "`t" -NoNewLine
        Write-Host "Press any key to continue ..."
        $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
        powershell $location
    } 
    
    Function NetworkCard {
        Clear-Host
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host "`t" -NoNewLine
        Write-Host '||       (3) = Activate/Desactivate Network Card       ||'
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host "`t" -NoNewLine
        $selectCard = Get-WmiObject win32_NetworkAdapter | Format-Table  AdapterType,DeviceID,Name -AutoSize
        $selectCard
        Write-Host "`t" -NoNewLine
        $select = Read-Host 'Select a DeviceID'
        $selectCard = Get-WmiObject win32_NetworkAdapter | Where {$_.DeviceID -eq $select} 
        Write-Host "`t" -NoNewLine
        $response = Read-Host 'You want to activate or desactivate the network card with the id' $select '? (A/D)'
        if ($response -eq 'A'){
                $selectCard.Enable()
                $myDir
        } elseif ($response -eq 'D'){
                $selectCard.Disable()
                $myDir
        } else {
            Write-Host 'Please write (A)ctivate or (D)esactivate'
            NetworkCard
        }
        Write-Host "`t" -NoNewLine
        Write-Host "Press any key to continue ..."
        $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
        powershell $location
    }
    
    Function Ip {
        Clear-Host
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host "`t" -NoNewLine
        Write-Host '||                   (4) = Change IP                   ||'
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host "`t" -NoNewLine
        $selectCard = Get-WmiObject Win32_NetworkAdapterConfiguration | Format-Table  Description,Index,DHCPEnabled -AutoSize
        $selectCard
        Write-Host "`t" -NoNewLine
        $select = Read-Host 'Select a DeviceID to change the IP address of a network card'
        $selectCard = Get-WmiObject Win32_NetworkAdapterConfiguration | Where {$_.Index -eq $select}
        $IPAddress = Read-Host 'IP Address'
        $netMask = Read-Host 'Mask'
        $gateway = Read-Host 'Gateway'
        $DNS = Read-Host 'DNS'
        $selectCard.EnableStatic($IPAddress, $netMask)
        $selectCard.SetGateways($gateway, 1)
        $selectCard.SetDNSServerSearchOrder($DNS)
        Write-Host "`t" -NoNewLine
        Write-Host "Press any key to continue ..."
        $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
        powershell $location
    } 
    
    Function Ipc {
        Clear-Host
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host "`t" -NoNewLine
        Write-Host '||                   (5) = IPCONFIG                    ||'
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host "`t" -NoNewLine
        ipconfig/all
        Write-Host "`t" -NoNewLine
        Write-Host "Press any key to continue ..."
        $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
        powershell $location
    } 
    
    Function Firewall {
        Clear-Host
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host "`t" -NoNewLine
        Write-Host '||                (6) = Firewall On/Off                ||'
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host "`t" -NoNewLine
        $response = Read-Host 'You want to activate or desactivate your firewall (A/D) ?'
        if ($response -eq 'A'){
            if ($powershellVersion -eq 2){
                netsh advfirewall set allprofiles state on
            } elseif ($powershellVersion -eq 3){
                Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True 
            }
        } elseif ($response -eq 'D'){
            if ($powershellVersion -eq 2){
                netsh advfirewall set allprofiles state off
            } elseif ($powershellVersion -eq 3){
                Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False 
            }
        } else {
            Write-Host 'Please write (A)ctivate or (D)esactivate'
            Firewall
        }
        Write-Host "`t" -NoNewLine
        Write-Host "Press any key to continue ..."
        $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
        powershell $location
    } 
    
    Function Quit {
        Clear-Host
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host "`t" -NoNewLine
        Write-Host '||                      (7) Quit                       ||'
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host "`t" -NoNewLine
        $response = Read-Host 'Are you sur you want to quit (Y/N) ? '
        if ($response -eq 'Y'){
            $process =  Get-Process -ProcessName powershell
            Stop-Process $process.Id 
        } elseif ($response -eq 'N'){
            powershell $location    
        } else {
            Write-Host 'Please, write (Y)es or (N)o'
            Quit
        }   
    }
    
    Function Help {
        Clear-Host
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host "`t" -NoNewLine
        Write-Host '||                      (H) Help                       ||'
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host " "
        Write-Host "`t" -NoNewLine
        Write-Host "This script support the OS Windows 7, Windows 8, Windows"
        Write-Host "`t" -NoNewLine
        Write-Host "Server 2008 R2, Windows Server 2012."
        Write-Host " "
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host "`t" -NoNewLine
        Write-Host '||                Improvements / Bugs                  ||'
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host " "
        Write-Host "`t" -NoNewLine
        Write-Host "If you have any suggestions or ideas for improvements, or"
        Write-Host "`t" -NoNewLine
        Write-Host "if you encounter bugs, don't hesitate to contact me at "
        Write-Host "`t" -NoNewLine
        Write-Host "the address below."
        Write-Host " "
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host "`t" -NoNewLine
        Write-Host '||                       About                         ||'
        Write-Host "`t" -NoNewLine
        Write-Host '========================================================='
        Write-Host " "
        Write-Host "`t" -NoNewLine
        Write-Host "Author  : Florent APPOINTAIRE"
        Write-Host "`t" -NoNewLine
        Write-Host "Contact : florent.appointaire@gmail.com"
        Write-Host "`t" -NoNewLine
        Write-Host "Website : http://www.florent-appointaire.fr"
        Write-Host "`t" -NoNewLine
        Write-Host "Version : 1.0"
        Write-Host " "
        Write-Host "`t" -NoNewLine
        Write-Host "Press any key to continue ..."
        $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
        powershell $location
    }
    
    Clear-Host
    Write-Host "`t" -NoNewLine
    Write-Host '========================================================='
    Write-Host "`t" -NoNewLine
    Write-Host '|| CONFIGURATION IP AUTOMATIQUE [Windows 7/ Windows 8] ||'
    Write-Host "`t" -NoNewLine
    Write-Host '========================================================='
    
    Write-Host ''
    Write-Host "`t" -NoNewLine
    Write-Host 'Hello' $userName
    Write-Host ''
    Write-Host "`t" -NoNewLine
    Write-Host 'Nous sommes le' $date 'et il est' $hour
    
    Write-Host ''
    Write-Host "`t" -NoNewLine
    Write-Host '========================================================='
    Write-Host "`t" -NoNewLine
    Write-Host '||       (1) = DHCP                                    ||'
    Write-Host "`t" -NoNewLine
    Write-Host '||       (2) = Switch Configuration                    ||'
    Write-Host "`t" -NoNewLine
    Write-Host '||       (3) = Activate/Desactivate Network Card       ||'
    Write-Host "`t" -NoNewLine
    Write-Host '||       (4) = Change IP                               ||'
    Write-Host "`t" -NoNewLine
    Write-Host '||       (5) = IPCONFIG                                ||'
    Write-Host "`t" -NoNewLine
    Write-Host '||       (6) = Firewall On/Off                         ||'
    Write-Host "`t" -NoNewLine
    Write-Host '||       (7) = Quit                                    ||'
    Write-Host "`t" -NoNewLine
    Write-Host '||       (H) = Help                                    ||'
    Write-Host "`t" -NoNewLine
    Write-Host '========================================================='
    
    Write-Host ''
    Write-Host "`t" -NoNewLine
    $choice = Read-Host 'What is your choice ? '
    
    switch ($choice) 
        {
            1 { DHCP }
            2 { Config }
            3 { NetworkCard }
            4 { Ip }
            5 { Ipc }
            6 { Firewall }
            7 { Quit }
            H { Help } 
            default { C:\Users\Administrator\Desktop\Test2.ps1 }
        }
    • 27/12/2012

    [Exchange 2013] La version finale est disponible

    Capture5

    Hier soir Microsoft a rendu public la version finale de Exchange Server 2013.

    Cette version est disponible uniquement en 64 bits et dans les langues suivantes :

    • Arabic, English, Chinese (Simplified), Chinese (Traditional), Dutch, French, German, Hebrew, Italian, Japanese, Korean, Portuguese (Brazil), Russian, Spanish

    Vous pourrez télécharger l'iso sur le site de Microsoft. Une période d'essai de 180 jours est offerte.

    Pour les prérequis système et matériel, c'est par ici.

    • 26/12/2012

    [SCOM 2012] Erreur Alert generation was temporarily suspended due to too many alerts.

    SCOM2012

    En créant une nouvelle règle dans SCOM 2012, qui cherchait différents évenements dans l'Event Viewer (4 au total), j'ai vu apparaitre un warning dans la console SCOM :

    Alert generation was temporarily suspended due to too many alerts.

    A rule has generated 50 alerts in the last 60 seconds. Usually, when a rule generates this many alerts, it is because the rule definition is misconfigured. Please examine the rule for errors. In order to avoid excessive load, this rule will be temporarily suspended until 2012-12-26T11:30:05.4153287+01:00.

    Rule: MomUIGeneratedRule8f602621811448a7b42d7b4873d9cd79

    Instance: computername.contoso.com

    Instance ID: {7B3F8239-BD22-93BE-D532-9EFF6B963A07}

    Management Group: MG

     Je me suis donc douté que ma nouvelle alerte resortait beaucoup trop de réponse, plus de 50 en une minute, c'est pour ceci que j'ai eu une alerte. Le nom de la règle en question n'est pas très explicite :

    MomUIGeneratedRule8f602621811448a7b42d7b4873d9cd79

    Après quelques recherches, j'ai découvert le moyen avec Powershell de découvrir la règle qui posait problème. J'ai donc fait :

    (Get-Rule | Where {$_.name -match 'MomUIGeneratedRule8f602621811448a7b42d7b4873d9cd79'}).DisplayName

    Attention à bien ouvrir la bonne console Powershell avec les modules de SCOM importés.

    Une fois la commande exécutée, il vous remonte le nom de la règle qui a généré l'alerte:

    Capture4

    Il suffit maintenant de désactiver ou de refaire votre règle pour désactiver l'alerte.

    Vous pouvez également chercher l'alerte avec la console de management de SQL Server :

    SELECT DisplayName FROM ruleview
    WHERE name = 'MomUIGeneratedRule8f602621811448a7b42d7b4873d9cd79'

    A noter que c'est la même chose pour récupérer un monitor qui pourrait poser problème (Get-SCOMMonitor et la table est monitorview).

    En espérant vous avoir rendu service :)

    • 21/12/2012

    [SP 2013] Installer les prérequis sans connection internet

    Voulant installé aujourd'hui Sharepoint 2013 sur un serveur qui n'avait pas accès à internet, j'ai rencontré l'erreur suivante après l'installation des prérequis :Capture1

    En cherchant un peu sur internet, j'ai découvert qu'il fallait lancer l'installation des prérequis en ligne de commande et en ayant téléchargé les logiciels prérequis à la bonne installation de Windows Server Appfabric.

    Il vous faut télécharger les prérequis suivant :

    Capture2

    Pour éviter de faire des recherches sur internet pour chaque logiciel, j'ai cherché un peu et j'ai trouvé un blog où son propriétaire a créé un script powershell pour récupérer tous les logiciels :

    Import-Module BitsTransfer
    $DestPath = Read-Host -Prompt "- Enter the destination path for downloaded files"
    If (Test-Path "$DestPath" -Verbose)
    {
        $DestFolder = "$DestPath\PrerequisiteInstallerFiles"
        New-Item -ItemType Directory $DestFolder -ErrorAction SilentlyContinue
    }
    Else
    {
        Write-Warning " - Destination path appears to be invalid."
        Write-Host " - Please check the path, and try running the script again."
        Write-Host "- Press any key to exit..."
        $null = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
        break
    }
    $UrlList = ("http://download.microsoft.com/download/D/0/F/D0F564A3-6734-470B-9772-AC38B3B6D8C2/dotNetFx45_Full_x86_x64.exe", # Microsoft .NET Framework 4.5
                "http://download.microsoft.com/download/5/2/B/52B59966-3009-4F39-A99E-3732717BBE2A/Windows6.1-KB2506143-x64.msu", # Windows Management Framework 3.0 (CTP2)
            "http://download.microsoft.com/download/9/1/3/9138773A-505D-43E2-AC08-9A77E1E0490B/1033/x64/sqlncli.msi", #Microsoft SQL Server 2008 r2 Native Client
            "http://download.microsoft.com/download/D/7/2/D72FD747-69B6-40B7-875B-C2B40A6B2BDD/Windows6.1-KB974405-x64.msu", #Windows Identity Foundation (KB974405)
            "http://download.microsoft.com/download/E/0/0/E0060D8F-2354-4871-9596-DC78538799CC/Synchronization.msi", # Microsoft Sync Framework Runtime v1.0 SP1 (x64) 
            "http://download.microsoft.com/download/A/6/7/A678AB47-496B-4907-B3D4-0A2D280A13C0/WindowsServerAppFabricSetup_x64.exe", #Windows Server AppFabric
                "http://download.microsoft.com/download/0/1/D/01D06854-CA0C-46F1-ADBA-EBF86010DCC6/r2/MicrosoftIdentityExtensions-64.msi", # Windows Identity Extensions
                "http://download.microsoft.com/download/9/1/D/91DA8796-BE1D-46AF-8489-663AB7811517/setup_msipc_x64.msi", # Microsoft Information Protection and Control Client
                "http://download.microsoft.com/download/8/F/9/8F93DBBD-896B-4760-AC81-646F61363A6D/WcfDataServices.exe", # Microsoft WCF Data Services 5.0
                "http://download.microsoft.com/download/7/B/5/7B51D8D1-20FD-4BF0-87C7-4714F5A1C313/AppFabric1.1-RTM-KB2671763-x64-ENU.exe" # CU Package 1 for Microsoft AppFabric 1.1 for Windows Server (KB2671763)
                )
    ForEach ($Url in $UrlList)
    {
        $DestFileName = $Url.Split('/')[-1]
        Try
        {
            If (!(Test-Path "$DestFolder\$DestFileName"))
            {
                Start-BitsTransfer -Source $Url -Destination $DestFolder\$DestFileName -DisplayName "Downloading `'$DestFileName`' to $DestFolder" -Priority High -Description "From $Url..." -ErrorVariable err
                If ($err) {Throw ""}
            }
            Else
            {
                Write-Host " - File $DestFileName already exists, skipping..."
            }
        }
        Catch
        {
            Write-Warning " - An error occurred downloading `'$DestFileName`'"
            break
        }
    }
    Invoke-Item $DestFolder
    Write-Host "- Downloads completed, press any key to exit..."
    $null = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

    Une fois le téléchargement terminé, il suffit de déplacer le dossier contenant les prérequis sur le server, pour ma part c'est C:\SP-Install\PrerequisiteInstaller\

    Il suffit maintenant de se rendre en ligne de commande dans ce dossier et de lancer la commande suivante (à adapter suivant votre cas pour le début du chemin):

    D:\prerequisiteinstaller.exe /SQLNCli:sqlncli.msi /PowerShell:Windows6.1-KB2506143-x64.msu /NETFX:dotNetFx45_Full_x86_x64.exe /IDFX:Windows6.1-KB974405-x64.msu /Sync:Synchronization.msi /AppFabric:WindowsServerAppFabricSetup_x64.exe /MSIPCClient:setup_msipc_x64.msi /WCFDataServices:WcfDataServices.exe /KB2671763:AppFabric1.1-RTM-KB2671763-x64-ENU.exe

    Une fenêtre UAC devrait apparaîte, cliquez sur Yes et continuez l'installation des prérequis.

    Une fois l'étape des prérequis terminée, il ne vous reste plus qu'à relancer le setup et vous devriez voir apparaître cette jolie fenêtre :

    Capture3

    Elle est pas belle la vie? :)

    • 20/12/2012

    [SCOM 2012] Ouverture des ports pour la Gateway

    SCOM2012

    En montant un lab avec SCOM 2012 d'un côté et la Gateway SCOM 2012 dans la DMZ, j'ai rencontré un problème au niveau de l'ouverture des ports au niveau du pare-feu qui sépare les deux réseaux.
    Après avoir lu la documentation Microsoft concernant les ports à ouvrir, j'en ai conclu l'ouverture du port 5723 dans la direction Gateway -> Management Server.

    Capture

     Or, après plusieurs tentatives, je me suis rendu compte que la documentation Microsoft est fausse. En effet, pour que la Gateway se connecte au Management Server, il faut bien ouvrir les ports dans les deux sens, le port 5723 en source et en destination quand vous créez vos deux règles :

    ACCEPT tcp opt -- in * out * 10.10.10.241 -> 10.10.11.241 tcp spt:5723
    
    ACCEPT tcp opt -- in * out * 10.10.11.241 -> 10.10.10.241 tcp dpt:5723

    En espérant vous avoir rendu service :)

    • 19/12/2012

    [Office 2013] Office 2013 RTM

    New-Office-2013-logo16x9-format-580-751

    Microsoft a rendu publique hier la version RTM de Office 2013.
    Vous pourrez la trouver en version Professional Plus ici en français ou ici en anglais.

    Cette version est la dernière à sortir avant la version finale.
    La clé CD vous sera fournit juste avant le début du téléchargement, après vous êtes identifié.

    Pour les prérequis matériel et logiciel, je vous donne rendez-vous sur le site de Microsoft. Il est bon de noter que vous pouvez installer Office 2013 sur les système Windows 7 et Windows 8 mais aussi sur Windows Server 2008 R2 et Windows Server 2012.
    Et pour le support, c'est par ici que ca se passe : Office 2013

    Si vous souhaitez l'installer sur votre tablette Windows 8, vérifiez bien la version de votre OS avant, j'ai téléchargé pour ma part la version 64 bits alors que l'OS de ma tablette Acer est un 32 bits.

    Bonne utilisation :)

    • 18/12/2012

    [SP 2013] SharePoint Server 2013 RTM

    sharepoint-2013-logo

    C'est officiel, Microsoft a rendu publique la version RTM de Sharepoint 2013.

    Vous pourrez la trouver ici en français ou ici en anglais. A noter que vous pourrez choisir la langue au moment de l'installation.

    Cette version est la dernière à sortir avant la version finale.
    La clé CD est NQTMW-K63MQ-39G6H-B2CH9-FRDWJ

    Pour les prérequis matériel et logiciel, je vous donne rendez-vous sur le site de Microsoft.
    Et pour le support, c'est par ici que ca se passe : SharePoint Products and Technologies

    N'hésitez pas à me faire part de vos retours sur SharePoint Server 2013 :)