Comment l'installer.MSI utilisant PowerShell

Je suis très nouveau à PowerShell et j'ai de la difficulté à comprendre.

Je veux installer un .MSI à l'intérieur d'un script PowerShell.

Pouvez s'il vous plaît m'expliquer comment faire ou me donner des cours débutant tutoriel.

$wiObject = New-Object -ComObject WindowsInstaller.Installer
?????
13
demandé sur JasonMArcher 2013-07-24 09:07:35

7 réponses

Pourquoi devenir si fantaisiste à ce sujet? Il suffit d'invoquer l' .msi fichier:

& <path>\filename.msi

ou

Start-Process <path>\filename.msi

Edit: liste complète des paramètres Start-Process

https://ss64.com/ps/start-process.html

12
répondu Adi Inbar 2017-08-28 01:10:17
#Variables
$computername = Get-Content 'M:\Applications\Powershell\comp list\Test.txt'
$sourcefile = "\server\Apps\LanSchool 7.7\Windows\Student.msi"
#This section will install the software 
foreach ($computer in $computername) 
{
    $destinationFolder = "\$computer\C$\download\LanSchool"
    #This section will copy the $sourcefile to the $destinationfolder. If the Folder does not exist it will create it.
    if (!(Test-Path -path $destinationFolder))
    {
        New-Item $destinationFolder -Type Directory
    }
    Copy-Item -Path $sourcefile -Destination $destinationFolder
    Invoke-Command -ComputerName $computer -ScriptBlock { & cmd /c "msiexec.exe /i c:\download\LanSchool\Student.msi" /qn ADVANCED_OPTIONS=1 CHANNEL=100}
}

j'ai cherché partout pour moi-même et est venu avec rien, mais ont finalement pavées ce scénario. C'est génial de travailler! J'ai pensé poster ici avec un peu de chance que quelqu'un d'autre puisse en profiter. Il tire dans une liste d'ordinateurs, copie les fichiers vers le bas aux machines locales et l'exécute. :) parti!

6
répondu bonedog73 2017-08-28 01:10:39

Vous pouvez utiliser:

msiexec /i "c:\package.msi"

vous pouvez aussi ajouter quelques paramètres optionnels. Il existe des paramètres et paramètres msi communs qui sont spécifiques à votre installateur. Pour les paramètres communs suffit d'appeler msiexec

4
répondu Andrey Marchuk 2013-07-24 08:02:09

une personne qui est tout à fait nouvelle à PowerShell ou d'autres obus de commande pourrait être confondue par le <path> partie dans @Dja réponse.

pour trouver la valeur de votre chemin en utilisant L'interface graphique de windows, cliquez sur le bouton droit de la souris .msi fichier, sélectionnez "propriétés", puis "détails". sous "chemin du Dossier" vous allez voir ce qui doit être écrit .

ainsi votre commande ressemblera à (par exemple)

& C:\Users\YourName\YourDirectory\filename.msi

c'est évident pour la plupart des gens qui utilisent StackOverflow, mais un vrai newbie peut facilement s'égarer.

4
répondu ngks 2013-07-25 16:14:49

après quelques épreuves et tribulations, j'ai pu tout trouver .fichiers msi dans un répertoire donné et installez-les.

foreach($_msiFiles in 
($_msiFiles = Get-ChildItem $_Source -Recurse | Where{$_.Extension -eq ".msi"} |
 Where-Object {!($_.psiscontainter)} | Select-Object -ExpandProperty FullName)) 
{
    msiexec /i $_msiFiles /passive
}
1
répondu micsea64 2017-08-28 01:11:17
#$computerList = "Server Name"
#$regVar = "Name of the package "
#$packageName = "Packe name "
$computerList = $args[0]
$regVar = $args[1]
$packageName = $args[2]
foreach ($computer in $computerList)
{
    Write-Host "Connecting to $computer...."
    Invoke-Command -ComputerName $computer -Authentication Kerberos -ScriptBlock {
    param(
        $computer,
        $regVar,
        $packageName
        )

        Write-Host "Connected to $computer"
        if ([IntPtr]::Size -eq 4)
        {
            $registryLocation = Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\"
            Write-Host "Connected to 32bit Architecture"
        }
        else
        {
            $registryLocation = Get-ChildItem "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"
            Write-Host "Connected to 64bit Architecture"
        }
        Write-Host "Finding previous version of `enter code here`$regVar...."
        foreach ($registryItem in $registryLocation)
        {
            if((Get-itemproperty $registryItem.PSPath).DisplayName -match $regVar)
            {
                Write-Host "Found $regVar" (Get-itemproperty $registryItem.PSPath).DisplayName
                $UninstallString = (Get-itemproperty $registryItem.PSPath).UninstallString
                    $match = [RegEx]::Match($uninstallString, "{.*?}")
                    $args = "/x $($match.Value) /qb"
                    Write-Host "Uninstalling $regVar...."
                    [diagnostics.process]::start("msiexec", $args).WaitForExit() 
                    Write-Host "Uninstalled $regVar"
            }
        }

        $path = "\$computer\Msi$packageName"
        Write-Host "Installaing $path...."
        $args = " /i $path /qb"
        [diagnostics.process]::start("msiexec", $args).WaitForExit()
        Write-Host "Installed $path"
    } -ArgumentList $computer, $regVar, $packageName
Write-Host "Deployment Complete"

}
1
répondu sumit 2017-08-28 01:11:38

lors de l'installation silencieuse D'un MSI via PowerShell en utilisant cette commande:

Start-Process $webDeployInstallerFilePath -ArgumentList '/quiet' -Wait

je recevais le message d'erreur:

l'exécutable spécifié n'est pas une application valide pour cette plate-forme OS.

j'ai plutôt passé à l'aide de msiexec.exe pour exécuter le MSI avec cette commande, et cela a fonctionné comme prévu:

$arguments = "/i `"$webDeployInstallerFilePath`" /quiet"
Start-Process msiexec.exe -ArgumentList $arguments -Wait

espérons que d'autres trouveront cela utile.

0
répondu deadlydog 2018-05-14 23:11:09