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
?????
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
#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!
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
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.
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
}
#$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"
}
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.