Question Fichier MSI qui ne se lance pas sur le poste distant

Plus d'informations
il y a 8 mois 1 semaine - il y a 8 mois 1 semaine #33934 par Matthieu
Rebonjour,

Je n'ai pas de message d'erreur mais mon fichier msi ne se lance pas sur mon poste distant...
[code]# Importation de la librairie
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# Création de l'objet de formulaire
$form = New-Object System.Windows.Forms.Form
$form.Text = "Télédistribution"
$form.Size = New-Object System.Drawing.Size(600,230)
$form.StartPosition = "CenterScreen"

# Champ pour saisir le nom de la machine
$labelMachineName = New-Object System.Windows.Forms.Label
$labelMachineName.Text = "Nom de la machine ou adresse IP (*) :"
$labelMachineName.Location = New-Object System.Drawing.Point(10,20)
$labelMachineName.AutoSize="$true"
$form.Controls.Add($labelMachineName)

$textboxMachineName = New-Object System.Windows.Forms.TextBox
$textboxMachineName.Location = New-Object System.Drawing.Point(210,15)
$textboxMachineName.Width=360
$form.Controls.Add($textboxMachineName)

# Bouton pour parcourir et sélectionner le fichier MSI
$labelFilePath = New-Object System.Windows.Forms.Label
$labelFilePath.Text = "Fichier MSI (*) :"
$labelFilePath.Location = New-Object System.Drawing.Point(10,50)
$labelFilePath.AutoSize="$true"
$form.Controls.Add($labelFilePath)

$buttonBrowse = New-Object System.Windows.Forms.Button
$buttonBrowse.Text = "Parcourir"
$buttonBrowse.Location = New-Object System.Drawing.Point(210,45)
$buttonBrowse.Add_Click({
    $openFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    $openFileDialog.Filter = "Fichiers MSI (*.msi)|*.msi|Tous les fichiers (*.*)|*.*"
    $openFileDialog.Title = "Sélectionnez un fichier MSI"

    if ($openFileDialog.ShowDialog() -eq 'OK') {
        $textboxFilePath.Text = $openFileDialog.FileName
    }
})
$form.Controls.Add($buttonBrowse)

$textboxFilePath = New-Object System.Windows.Forms.TextBox
$textboxFilePath.Location = New-Object System.Drawing.Point(210,75)
$textboxFilePath.Width=360
$textboxFilePath.ReadOnly = $true
$form.Controls.Add($textboxFilePath)

# Champ pour saisir des arguments du fichier MSI
$labelArgumentsMSI = New-Object System.Windows.Forms.Label
$labelArgumentsMSI.Text = "Arguments du fichier MSI:"
$labelArgumentsMSI.Location = New-Object System.Drawing.Point(10,110)
$labelArgumentsMSI.AutoSize="$True"
$form.Controls.Add($labelArgumentsMSI)

$textboxArgumentsMSI = New-Object System.Windows.Forms.TextBox
$textboxArgumentsMSI.Location = New-Object System.Drawing.Point(210,105)
$textboxArgumentsMSI.Width=360
$form.Controls.Add($textboxArgumentsMSI)


# Bouton OK pour valider et fermer le formulaire
$buttonOK = New-Object System.Windows.Forms.Button
$buttonOK.Text = "Lancer la télédistribution"
$buttonOK.Location = New-Object System.Drawing.Point(410,145)
$buttonOK.AutoSize="$true"
$buttonOK.Add_Click({
    $Script:RemoteComputer = $textboxMachineName.Text
    $Script:FilePath = $textboxFilePath.Text
    $Script:argumentsMSI = $textboxArgumentsMSI.Text
    $form.Close()
})
$form.Controls.Add($buttonOK)


# Affichage du formulaire
$form.ShowDialog() | Out-Null

# Vérifier si la liste des TrustedHosts existe
if (-not (Test-Path WSMan:\localhost\Client\TrustedHosts)) {
    # Si elle n'existe pas, la créer avec la machine $Script:RemoteComputer
    Set-Item WSMan:\localhost\Client\TrustedHosts -Value $Script:RemoteComputer -Force
} else {
    # Si elle existe, vérifier si elle est vide
    $currentTrustedHosts = (Get-Item WSMan:\localhost\Client\TrustedHosts).Value
    if (-not $currentTrustedHosts) {
        # Si elle est vide, ajouter la machine $Script:RemoteComputer
        Set-Item WSMan:\localhost\Client\TrustedHosts -Value $Script:RemoteComputer -Force
    } else {
        # Si elle n'est pas vide, vérifier si la machine $Script:RemoteComputer existe
        $hostsArray = $currentTrustedHosts -split ','
        if ($Script:RemoteComputer -notin $hostsArray) {
            # Si elle n'existe pas, ajouter la machine $Script:RemoteComputer à la suite des autres machines
            $newTrustedHosts = $currentTrustedHosts + "," + $Script:RemoteComputer
            Set-Item WSMan:\localhost\Client\TrustedHosts -Value $newTrustedHosts -Force
        }
        # Si elle existe, ne rien faire
    }
}


# Déclaration des détails du poste distant
$RemoteFolderPath = "\\$Script:RemoteComputer\c`$\Temp\"


# Vérifier si le dossier de destination existe, sinon le créer
if (-not (Test-Path $RemoteFolderPath -PathType Container)) {
    New-Item -Path $RemoteFolderPath -ItemType Directory | Out-Null
    Write-Host "Le dossier $RemoteFolderPath a été créé."
} else {
    Write-Host "Le dossier $RemoteFolderPath existe déjà."
}


# Copie du fichier à l'emplacement du poste distant
Copy-Item -Path $FilePath -Destination $RemoteFolderPath


# Lancement de l'installation
Invoke-Command -ComputerName $Script:RemoteComputer -ScriptBlock {
    #  Récupéreration du nom du fichier sans le chemin
    $NomFichier = [System.IO.Path]::GetFileName($textboxFilePath.Text)
    # Chemin du fichier MSI sur le serveur distant
    $msiPath = "C:\temp\" + $NomFichier
    $msiWithArguments = $msiPath + ' ' + $Script:argumentsMSI
    # Lancer l'installation du fichier MSI
    Start-Process -FilePath "msiexec.exe" -ArgumentList "/i $msiWithArguments" -Wait
}


# Suppression du site dans les TrustedHosts de WinRM
$listeTrustedHosts = (Get-Item WSMan:\localhost\Client\TrustedHosts).Value
$listeMiseAJour = $listeTrustedHosts -replace "$Script:RemoteComputer,", "" -replace ",$Script:RemoteComputer", "" -replace "$Script:RemoteComputer", ""
Set-Item WSMan:\localhost\Client\TrustedHosts -Value $listeMiseAJour -Force
[/code]

Merci d'avance pour votre aide.
Dernière édition: il y a 8 mois 1 semaine par Matthieu.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 mois 1 semaine #33937 par Matthieu

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 mois 4 jours #33958 par Fabien
Bonjour Matthieu,

Pour lancer un fichier .MSI à distante il faut spécifier qu’il n’y a pas d’interface utilisateur de base pendant le processus d’installation.
Pour effectuer cette installation sans interface graphique, il faut ajouter un argument pour lancer le .MSI :
/qb!

Fabien

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 5 mois 1 semaine - il y a 5 mois 1 semaine #34214 par Frédéric FOUCAN
Salut,
Est-ce qu'il s'agit d'un msi destiné à l'installation d'un site web dans IIS ?
Si c'est le cas, il est possible qu'il manque des pré-requis d'installation Windows, pour que le msi se lanse sur la machine distante (ex. :. Net Framework 3.5 ou compatibilité IIS 6, etc.).

Frédéric
Dernière édition: il y a 5 mois 1 semaine par Frédéric FOUCAN.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 5 mois 1 semaine - il y a 5 mois 1 semaine #34221 par Arnaud Petitjean
Hello Matthieu,

Peut-être as tu déjà résolu ton problème car il commence à dater un peu...?

Ton souci vient du faire que tu cherches à adresser une variable ($textboxFilePath) à l'intérieur de ton scriptblock. Pour que ça fonctionne, il faut que tu la préfixe par $using:. Soit dans ton cas $using:textboxFilePath. C'est une astuce, pas très connue mais qui est très efficace.

Bon après, ce n'est pas dit que ton MSI va s'installer correctement, car comme le soulignaient Fabien et Frédéric il y a peut-être d'autres problèmes. Mais en tout cas, de manière certaine, dans l'état actuel, ta variable $textboxFilePath sans $using: vaut null.

Arnaud 
 

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Dernière édition: il y a 5 mois 1 semaine par Arnaud Petitjean.

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.112 secondes
Propulsé par Kunena