I'm trying to set up the Keeper Desktop app for all users but want to ensure it updates automatically. I've been exploring different methods mentioned on their official deployment guide, especially the AppInstaller option. However, I'm unsure how to proceed since I need to use the `Add-AppxProvisionedPackage` command, but I've read that .appinstaller files aren't compatible with it. The `Add-AppxPackage` command seems limited to single-user installs.
Here's the command I tried:
Add-AppxProvisionedPackage -AppInstallerFile \serverAction1InstallersKeeperPasswordManager.appinstaller
Using the Windows Store version isn't an option either because my RMM tool, Action1, doesn't recognize installed Store apps. The MSI installer isn't ideal since that would mean I'd have to update it manually every time there's a new release. Does anyone have suggestions for properly installing this app for all users while also ensuring it updates?
1 Answer
.appinstaller and .msix files are tied to the Microsoft Store. If your RMM software can't detect them, installing through the Store or manually won't change that. However, you can install .appinstaller files for all users since they act as links to the actual msix/msixbundle files. Here’s a script I've used:
# (Offline-)Install an .appinstaller package for all users on a computer
# Prep
Add-Type -AssemblyName System.Web
if (-not (Test-Path "C:InstallKeeperPasswordManagerFiles")) {
mkdir "C:InstallKeeperPasswordManagerFiles"
}
curl.exe -L "https://download.keepersecurity.com/desktop_electron/packages/KeeperPasswordManager.appinstaller" -o "C:InstallKeeperPasswordManager.appinstaller" --ssl-no-revoke --fail-with-body
[xml]$ai_xml = Get-Content "C:InstallKeeperPasswordManager.appinstaller" -Raw
# Download dependencies
Push-Location C:InstallKeeperPasswordManagerFiles -ErrorAction Stop
[System.Environment]::CurrentDirectory = Get-Location
$ai_xml.AppInstaller.Dependencies.Package.Uri | % {
$encoded = [System.Web.HttpUtility]::UrlPathEncode($_)
curl.exe -LO "$encoded" --ssl-no-revoke --fail-with-body
}
# Main app
$appname = $ai_xml.AppInstaller.MainBundle.Name
$dl_url = $ai_xml.AppInstaller.MainBundle.Uri
$encoded_dl_url = [System.Web.HttpUtility]::UrlPathEncode($dl_url)
curl.exe -LO "$encoded_dl_url" --ssl-no-revoke --fail-with-body
# Install
$depsList = @(ls C:InstallKeeperPasswordManagerFiles | Where Extension -notlike ".msixbundle")
$mainapp = ls C:InstallKeeperPasswordManagerFiles | Where Extension -like ".msixbundle"
try {
Add-AppxProvisionedPackage -Online -PackagePath $mainapp.FullName -DependencyPackagePath $depsList.FullName -Verbose -SkipLicense
} catch {
$_ | Select-Object * | Format-List *
Write-Error $_
}
Pop-Location
# Verify
Get-AppxProvisionedPackage -Online | ? DisplayName -like "$appname"
Get-AppxPackage | ? Name -like "$appname"
Thanks a bunch for the script! I gave it a shot and it did install the app, but I noticed it only appears in the settings under 'Installed Apps' and not in the Control Panel. Do you know why that might be? Also, the Microsoft Store still shows the option to download it. Since this uses the .msix format, does that mean it won't auto-update? Do I just need to rerun the script for new versions?