Dans le cadre de l'évolution du parc informatique de mon client, nous avons fait évoluer Office, passant de l'honorable (mais vieillissant) Office 2010 à la version Office 365.
Bien entendu, (car rien n'est simple dans la vie) certaines installations d'Office 2010 sont en x86, alors que d'autres sont sur du x64, et c'est un message d'incompatibilité explicite qui vous saute au visage lorsque vous cherchez à installer une version x86 de 365 sur un 2010 en x64 (et réciproquement).
Il nous est donc nécessaire de connaitre au préalable la version d'office installée sur chaque ordinateur... Mais comment faire, oui?
Solution 1, alias "Moi, J'adore bien bosser 20 fois plus pour rien" : Aller dans n'importe quel logiciel de la suite Office, ouvrir "Fichier", puis "Aide" et regarder la réponse dans la fenêtre. Vous pouvez maintenant aller sur CHAQUE ordinateur pour aller vérifier quelle version est installée.
Solution 2, alias "Oui, je suis un SysAdmin qui se respecte" : Mon script Powershell, une GPO, un répertoire public, et on peut bosser sur autre chose le temps que l'information remonte d'elle même.
Dans cet exemple, le répertoire public sera nommé "publicshare" (ou publicshare$ si vous voulez le rendre invisible) et sera stocké sur \serveur
Vous pouvez le télécharger sur mon espace gitea
#Au lancement du script, nous vérifions si le fichier de log de l'exécution du script n'est pas encore présent.
if (-not (Test-Path "\\serveur\publicshare\office_version\office_version_$($env:computername).txt"))
{
#S'il ne l'est pas, nous créons un fichier de log, qui est un transcript des informations de la console.
Start-Transcript "\\serveur\publicshare\office_version\office_version_$($env:computername).txt" -Force
try
{
try
{
Write-Output "Recherche de l'information de clé"
#Les informations sur le type d'installation d'office est dans le registre. La version 14.0 correspond à Office 2010. Si vous recherchez pour d'autres versions, vous n'avez qu'a remplacer cette valeur par une autre (voir la liste en fin d'article). Peu importe qu'Outlook soit installé ou non, cette clé est présente.
$bitness = (Get-ItemProperty -Path HKLM:\Software\Microsoft\Office\14.0\Outlook\ -ErrorAction stop).bitness
}
catch
{
#Dans le cas d'une installation x86 sur un Windows 64, les clés peuvent être présentes non pas dans Microsoft, mais dans la partie Wow6432 (Windows 32-bit on Windows 64-bit). Nous recherchons ici si aucune valeur n'est trouvé en premier lieu.
Write-Output "Aucune Valeur. Essai avec la clé dans Wow6432"
try
{
$bitness = (Get-ItemProperty -Path HKLM:\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Outlook\ -ErrorAction Stop).bitness
}
catch
{
Write-Output "Aucune valeur trouvée"
$bitness = "Aucune_Valeur"
}
}
#Les valeurs sont exportées dans un fichier CSV, pour pouvoir les consulter ensuite.
Write-Output "Export des données dans le fichier CSV"
"`"$($env:COMPUTERNAME)`";`"$bitness`"" | Out-File -filePath "\\serveur\publicshare\office_version\office_version.csv" -Append -Encoding utf8 -ErrorAction Stop -Force
}
catch
{
#Un petit peu de débuggage, si jamais un problème survient.
Write-Output "Erreur! Ligne $($error[0].InvocationInfo.ScriptLineNumber) : $($error[0].Exception.Message)"
(get-date).ToLongDateString() + " " + (get-date).ToLongTimeString() + " : $($env:computername) - Ligne $($error[0].InvocationInfo.ScriptLineNumber) : $($error[0].Exception.Message)" | out-file -FilePath "\\serveur\publicshare\office_version\office_version_error.txt" -Append -Encoding utf8
Write-Output "Arret du transcript et modification du fichier"
Stop-Transcript
Move-Item "\\serveur\publicshare\office_version\office_version_$($env:computername).txt "\\serveur\publicshare\office_version\office_version_$($env:computername)_error.txt"
}
if ($onerror -eq $false)
{
Stop-Transcript
}
}
else
{
Write-Output "Aucune action a effectuer, fichier présent : fin du transcript"
Stop-Transcript
}
Créez une GPO ou modifiez une existante afin d'avoir une exécution du script à l'ouverture de session. Pour éviter toute exécution inutile du script, j'exécute une vérification de la présence ou non du fichier de log crée à la fin de l'exécution du-dit script. Ainsi, s'il est déjà présent, cela veut dire que les informations ont déjà été récoltées.
Voici les différentes versions d'office que vous pourrez trouver, remplacez l'identifiant de version par celle qui correspond à celui déployé dans votre parc