Echec des installations avec InstallManager

En préparant le déploiement d’un logiciel, notre labo Citrix refusait systématiquement d’installer des logiciels via InstallManager, y compris un MSI tout bête.

En y regardant de plus prêt, l’erreur détecté par Citrix n’était pas beaucoup plus clair.

Erreur IM

capture_im_2

Heureusement l’erreur dans le journal des évènements était un peu plus précise et permettait de deviner que le problème venait de clés de registres absentes. A priori, il manquait les clés LogFolder et TempFolder sous la ruche HKLM\SOFTWARE\Citrix\IMS\2.0. Après la création de ses deux clé, l’installation s’est déroulé normalement.

capture_erreur_1 capture_erreur_2

Go To Powershell

Le but va être de vérifier sur tous les serveurs d’une ferme la présence de ses deux clés. Et nous allons prévoir la possibilité via un switch (un exemple de switch ici) d’ajouter ses clés à une valeur par défaut, en général C:\Program Files\Citrix\Installer\{Temp,Logs}. La lecture de clé de registre a été déjà traité (ici et la ). Pour écrire une valeur dans le registre nous utilisons la fonction SetValue avec 3 paramètres :  KeyName, KeyValue, KeyType. Pour réussir la modification du registre, la ruche doit avoir été ouverte au préalable en lecture/ecriture.

$reg=[microsoft.win32.registrykey]::OpenRemoteBaseKey('LocalMachine',"MyComputer")
# Ouverture de la Ruche en écriture
$writekey = $reg.openKey("Path/to/my/key", $true)
# Ajout de la clé MyName de type String avec pour valeur MyValue
$writekey.setValue("MyName","MyValue","String")

Soit dans notre exemple :

Param(
    [switch]$CreateRequiredValue
)
$defaultTemp ="C:\\Program Files\\Citrix\\Installer\\Temp"
$defaultLog = "C:\\Program Files\\Citrix\\Installer\\Logs"

$uninstallkey = "SOFTWARE\\Citrix\\IMS\\2.0"

Get-XAServer | % {
$reg=[microsoft.win32.registrykey]::OpenRemoteBaseKey('LocalMachine',$_.ServerName)
$regkey=$reg.OpenSubKey($uninstallkey)

$folder = $regkey.getValueNames() | where { $_ -match "Folder" }
	if( $folder -contains "LogFolder" -and $folder -contains "TempFolder"){
        Write-Host  -NoNewLine $_.ServerName
        Write-Host -ForegroundColor Green "[OK]"
	}elseif($folder -contains "LogFolder") {
        Write-Host  -NoNewLine $_.Servername
        if($CreateRequiredValue){
            $writekey = $reg.OpenSubKey($uninstallkey)
            $writekey.setValue('TempFolder',$defaultTemp,'String')
            Write-Host -ForegroundColor Yellow "[PASSED]"
            Write-Host "$UninstallKey\\TempFolder created"
        }else {
            Write-Host -ForegroundColor Red "[KO]"
            Write-Host "Besoin de creer $UninstallKey\\TempFolder"
        }
	}elseif ($folder -contains "TempFolder") {
        Write-Host  -NoNewLine $_.Servername
        if($CreateRequiredValue){
            $writekey = $reg.OpenSubKey($uninstallkey)
            $writekey.setValue('LogFolder',$defaultLog,'String')
            Write-Host -ForegroundColor Yellow "[PASSED]"
            Write-Host "$UninstallKey\\LogFolder created"
        }else {
            Write-Host -ForegroundColor Red "[KO]"
            Write-Host "Besoin de creer $UninstallKey\\LogFolder"
        }
	}else {
       Write-Host  -NoNewLine $_.Servername
        if($CreateRequiredValue){
            $writekey = $reg.OpenSubKey($uninstallkey)
            $writekey.setValue('TempFolder',$defaultTemp,'String')
            Write-Host -ForegroundColor Yellow "[PASSED]"
            Write-Host "$UninstallKey\\TempFolder created"
            $writekey.setValue('LogFolder',$defaultLog,'String')
            Write-Host "$UninstallKey\\LogFolder created"
        }else {
            Write-Host -ForegroundColor Red "[KO]"
            Write-Host "Besoin de creer $UninstallKey\\TempFolder"
            Write-Host "Besoin de creer $UninstallKey\\LogFolder"
        }
	}
}

Leave a Reply

Your email address will not be published. Required fields are marked *