Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

Récupérer les paramètres Firefox quel que soit la version par USMT

Vous souhaitez récupérer via l’outil USMT les favoris Firefox.

Cependant depuis quelques temps, le nombre de versions de Firefox a augmenté de façon importante.

Pour supporter l’ensemble des versions de Firefox, ouvrez donc le fichier xml MigApp de USMT.

Identifiez la partie consacrée à Firefox

<!– Mozilla Firefox 3 –>

<component context="UserAndSystem" type="Application">

<displayName _locID="migapp.firefox3">Mozilla Firefox</displayName>

<environment name="GlobalEnv"/>

<environment name="GlobalEnvX64"/>

<role role="Settings">

<detection>

<conditions>

<condition>MigXmlHelper.DoesObjectExist("Registry","%HklmWowSoftware%\Mozilla\Mozilla Firefox 3.*\bin [PathToExe]")</condition>

</conditions>

</detection>

<rules context="User">

<destinationCleanup>

<objectSet>

<pattern type="File">%CSIDL_LOCAL_APPDATA%\Mozilla\Firefox\Profiles\*\Cache\* [*]</pattern>

</objectSet>

</destinationCleanup>

<include>

<objectSet>

<pattern type="File">%CSIDL_APPDATA%\Mozilla\Firefox\* [*]</pattern>

<pattern type="File">%CSIDL_LOCAL_APPDATA%\Mozilla\Firefox\Profiles\* [*]</pattern>

</objectSet>

</include>

<exclude>

<objectSet>

<pattern type="File">%CSIDL_APPDATA%\Mozilla\Firefox\Crash Reports\* [*]</pattern>

<pattern type="File">%CSIDL_APPDATA%\Mozilla\Firefox\Profiles\*\ [pluginreg.dat]</pattern>

<pattern type="File">%CSIDL_LOCAL_APPDATA%\Mozilla\Firefox\Profiles\*\Cache\* [*]</pattern>

</objectSet>

</exclude>

<merge script="MigXmlHelper.SourcePriority()">

<objectSet>

<pattern type="File">%CSIDL_APPDATA%\Mozilla\Firefox\* [*]</pattern>

<pattern type="File">%CSIDL_LOCAL_APPDATA%\Mozilla\Firefox\Profiles\* [*]</pattern>

</objectSet>

</merge>

</rules>

</role>

</component>

Pour supporter l’ensemble des versions de Firefox, il suffit de modifier un seul caractère correspondant à la version par le caractere « * » à la ligne correspondant à :

<condition>MigXmlHelper.DoesObjectExist("Registry","%HklmWowSoftware%\Mozilla\Mozilla Firefox 3.*\bin [PathToExe]")</condition>

Exemple :

<!– Mozilla Firefox –>

<component context="UserAndSystem" type="Application">

<displayName _locID="migapp.firefox3">Mozilla Firefox</displayName>

<environment name="GlobalEnv"/>

<environment name="GlobalEnvX64"/>

<role role="Settings">

<detection>

<conditions>

<condition>MigXmlHelper.DoesObjectExist("Registry","%HklmWowSoftware%\Mozilla\Mozilla Firefox *.*\bin [PathToExe]")</condition>

</conditions>

</detection>

<rules context="User">

<destinationCleanup>

<objectSet>

<pattern type="File">%CSIDL_LOCAL_APPDATA%\Mozilla\Firefox\Profiles\*\Cache\* [*]</pattern>

</objectSet>

</destinationCleanup>

<include>

<objectSet>

<pattern type="File">%CSIDL_APPDATA%\Mozilla\Firefox\* [*]</pattern>

<pattern type="File">%CSIDL_LOCAL_APPDATA%\Mozilla\Firefox\Profiles\* [*]</pattern>

</objectSet>

</include>

<exclude>

<objectSet>

<pattern type="File">%CSIDL_APPDATA%\Mozilla\Firefox\Crash Reports\* [*]</pattern>

<pattern type="File">%CSIDL_APPDATA%\Mozilla\Firefox\Profiles\*\ [pluginreg.dat]</pattern>

<pattern type="File">%CSIDL_LOCAL_APPDATA%\Mozilla\Firefox\Profiles\*\Cache\* [*]</pattern>

</objectSet>

</exclude>

<merge script="MigXmlHelper.SourcePriority()">

<objectSet>

<pattern type="File">%CSIDL_APPDATA%\Mozilla\Firefox\* [*]</pattern>

<pattern type="File">%CSIDL_LOCAL_APPDATA%\Mozilla\Firefox\Profiles\* [*]</pattern>

</objectSet>

</merge>

</rules>

</role>

</component>

SQL Server – Script Table Row Count in a Database

Ce script très utile pour des travaux d’inventaire ou de statistiques, permet de compter le nombre de lignes que disposent les tables d’une base de données :

USE [DB]
GO
SELECT OBJECT_NAME(OBJECT_ID) TableName, st.row_count
FROM sys.dm_db_partition_stats st
WHERE index_id < 2
ORDER BY st.row_count DESC
GO

Powershell: Générateur de Mot-de-passe

Il arrive souvent dans le cadre de migration ou de création de nouvelle forêt/Domaine Active Directory, de générer des nouveau mots de passe pour les nouveau comptes. Afin d’automatiser cette opération, le PowerShell nous permet de scripter cette étape et de la faire correspondre à la stratégie de mot-de-passe mise en œuvre.

Voici un exemple de fonction qui permet de générer des mots-de-passe correspondant à la stratégie par défaut (complexité et 8 caractères):

#============================================
# Fonction de création de Password aléatoire   
#============================================
function RandomPassword ([int]$intPasswordLength)
       {
          if ($intPasswordLength -lt 4) {return "password cannot be <4 chars"}   # -lt inférieur à
             
          $strNumbers = "1234567890"
          $strCapitalLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
          $strLowerLetters = "abcdefghijklmnopqrstuvwxyz"
          $strSymbols = "@-?!#"
          $rand = new-object random
 
          for ($a=1; $a -le $intPasswordLength; $a++)  #inférieur -le inférieur ou égal à
               {
                    if ($a -gt 4) #supérieur à
                       {
                             $b = $rand.next(0,4) + $a
                             $b = $b % 4 + 1
                       } else { $b = $a }
                    switch ($b)
                       {
                             "1" {$b = "$strNumbers"}
                             "2" {$b = "$strCapitalLetters"}
                             "3" {$b = "$strLowerLetters"}
                             "4" {$b = "$strSymbols"}
                       }
                    $charset = $($b)
                    $number = $rand.next(0,$charset.Length)
                    $RandomPassword += $charset[$number]
               }
          return $RandomPassword
       }
 
#######################
# PROGRAMME PRINCIPAL
#######################
                # Génération aléatoire du Password en lançant la fonction définie précédemment                 
             RandomPassword 8
              

Il suffit de modifier le programme principal pour générer des mots-de-passe plus longs. Il ne reste plus qu’à intégrer et appeler la fonction dans un script global de création des comptes Active Directory.