Accueil > Exchange, Microsoft > Exchange 2010 Test-ServiceHealth Exchange 2007

Exchange 2010 Test-ServiceHealth Exchange 2007

S’il y a bien une chose qui m’a gêné la première fois que j’ai installé Exchange 2010, c’est au moment des vérifications post-installation lorsque j’ai lancé ma commande préférée, la commande au combien vitale et indispensable, j’ai nommé Test-ServiceHealth, que le drame se produisit !!! Le retour de la commande n’était plus comme dans Exchange 2007 et la clarté du retour devenait hasardeuse car sous forme de liste et non plus sous forme de table formatée :(
Mettant cela de coté je m’étais dit que je regarderai le pourquoi du comment lorsque j’aurai un peu de temps.
6 mois plus tard … c’est chose faite :p
Voyons un peu comment retrouver le formatage de la version Exchange 2007 de Test-ServiceHealth !

Nous allons voir un peu de PowerShell aujourd’hui :)

Tout d’abord il faut savoir que le formatage de retour d’une commande passe par le paramétrage fait dans un fichier spécifique « .format.ps1xml »

 pshome
Par défaut ils se trouvent dans le répertoire de powershell :
C:\Windows\System32\WindowsPowerShell\v1.0

 exchangebin
Et pour les formats d’exchange il est dans le répertoire des binaires de l’installation d’exchange :
C:\Program Files\Microsoft\Exchange Server\Bin (pour Exchange 2007)
C:\Program Files\Microsoft\Exchange Server\v14\Bin (pour Exchange 2010)

Si on edite le fichier exchange.format.ps1xml on tombe sur :
 format2k7
Ici on voit par exemple le format associé à la commande get-AcceptedDomain
Le format est paramétré entre la balise <View></View>
De plus pour que le format s’applique par défaut en retour sur la commande tapée il faut que son type corresponde :
Le type de la commande get- AcceptedDomain est défini entre la balise <TypeName></TypeName> :
Microsoft.Exchange.Data.Directory.SystemConfiguration.AcceptedDomain

 cmdgm
Pour verifier le type associé à la commande Test-ServiceHealth il suffit de la taper et de la piper à la commande get-member (Alias gm).
Ici le type est Microsoft.Exchange.Monitoring.ExchangeServicesStatus

Maintenant cherchons ce type dans notre fichier des formats exchange 2007 :
 format2k7ok
On peut voir ici que le format traite un tableau et qu’il exécute des scriptblock pour retraiter la sortie des propriétés de la commande.

Coté Exchange 2010 :
 cmdgm2
Le type est le même que dans Exchange 2007.

Regardons le fichier des formats :
 exchangebin2

 format2k10ok
Et voilà !! on peut voir que la commande ne subit pas le même traitement !!! Elle est maintenant traitée comme une liste et aucun reformatage des données n’est fait :/

Qu’a cela ne tienne, nous allons remettre ca dans l’ordre :)
Les fichiers sont signés donc on ne peut pas les modifier directement.
Il suffit de créer notre propre fichier de format et de le mettre en bonne endroit.

Le fichier s’appelera : Test-ServiceHealth2k7.format.ps1xml
Et comportement comme code :
<?xml version=”1.0″ encoding=”utf-8″ ?>
<Configuration>
    <ViewDefinitions>
        <View>
            <Name>Microsoft.Exchange.Monitoring.ExchangeServicesStatus</Name>
            <ViewSelectedBy>
                <TypeName>Microsoft.Exchange.Monitoring.ExchangeServicesStatus</TypeName>
            </ViewSelectedBy>
            <TableControl>
                <TableHeaders>
                    <TableColumnHeader>
                        <Label>Role</Label>
                        <Width>13</Width>
                        <Alignment>Left</Alignment>
                    </TableColumnHeader>
                    <TableColumnHeader>
                        <Label>RequiredServicesRunning</Label>
                        <Width>23</Width>
                        <Alignment>Left</Alignment>
                    </TableColumnHeader>
                    <TableColumnHeader>
                        <Label>ServicesRunning</Label>
                        <Width>30</Width>
                        <Alignment>Left</Alignment>
                    </TableColumnHeader>
                    <TableColumnHeader>
                        <Label>ServicesNotRunning</Label>
                        <Width>30</Width>
                        <Alignment>Left</Alignment>
                    </TableColumnHeader>
                </TableHeaders>
                <TableRowEntries>
                    <TableRowEntry>
                        <Wrap />
                        <TableColumnItems>
                            <TableColumnItem>
                                <!– Role –>
                                <ScriptBlock>
                                    $_.Role.Replace(” Server Role”,”")
                                </ScriptBlock>
                            </TableColumnItem>
                            <TableColumnItem>
                                <!– Required Services Running? –>
                                <PropertyName>RequiredServicesRunning</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <!– Services Running –>
                                <ScriptBlock>
                                    ([string]($_.ServicesRunning|foreach{$_})).replace(” “,”`n”)
                                </ScriptBlock>
                            </TableColumnItem>
                            <TableColumnItem>
                                <!– Services Not Running –>
                                <ScriptBlock>
                                    ([string]($_.ServicesNotRunning|foreach{$_})).replace(” “,”`n”)
                                </ScriptBlock>
                            </TableColumnItem>
                        </TableColumnItems>
                    </TableRowEntry>
                </TableRowEntries>
            </TableControl>
        </View>
    </ViewDefinitions>
</Configuration>

Test-ServiceHealth2k7format.ps1xml

Pour le charger manuellement il faudra utiliser la commande Update-FormatData et spécifier le chemin vers le fichier format.ps1xml
Le retour de la commande Test-serviceHealth qu’il faudra transformer en tableau à l’aide du pipe Format-Table (Alias ft) :
 

finalUpdate-FormatData “C:\Program Files\Microsoft\Exchange Server\V14\Bin\Test-ServiceHealth2k7.format.ps1xml”
Test-ServiceHealth | ft
Pour automatiser le chargement notre format il faudra utiliser les mécanismes de chargement automatique de personnalisation de profile, ci-dessous les 4 possibilités :
 profiles

Nous allons utiliser la 4eme option en créant un fichier Profile.ps1 dans le répertoire de powersell :
C:\Windows\System32\WindowsPowerShell \v1.0\

Avec comme contenu la commande vu précédemment :
Update-FormatData “C:\Program Files\Microsoft\Exchange Server\V14\Bin\Test-ServiceHealth2k7.format.ps1xml”

Ainsi lorsque vous taperez Test-ServiceHealth vous obtiendrez le bon format de sortie (sans avoir besoin d’utiliser le | ft)

Attention : Si votre environnement est en AllSigned il vous faudra signer les 2 fichiers que nous avons crée :
Test-ServiceHealth2k7.format.ps1xml
Profile.ps1

Si votre environnement est en RemoteSigned il n’y aura pas de problèmes.

Bonne lecture.
Pour toutes questions n’hésitez pas.

Anthony Exchange, Microsoft , , , ,

  1. Pas encore de commentaire
  1. Pas encore de trackbacks