Il est possible de télécharger les fichiers nécessaires via Online link generator for Microsoft Store.
Dans cet exemple, j'ai fait un package pour installer Microsoft Company Portal
Voici un schéma de l'arborescence du dossier avec un sous dossier Dependencies
\—Dependencies
Microsoft.NET.Native.Framework.2.2_2.2.27912.0_x64__8wekyb3d8bbwe.appx
Microsoft.NET.Native.Runtime.2.2_2.2.28604.0_x64__8wekyb3d8bbwe.appx
Microsoft.Services.Store.Engagement_10.0.19011.0_x64__8wekyb3d8bbwe.appx
Microsoft.UI.Xaml.2.3_2.32002.13001.0_x64__8wekyb3d8bbwe.appx
Microsoft.VCLibs.140.00_14.0.27810.0_x64__8wekyb3d8bbwe.appx
Voici mes fichiers script PowerShell, le premier pour installer et le second pour désinstaller.
# Install Microsoft.WhiteBoard Appx
# Information :
# Name : Microsoft.Whiteboard
# Publisher : CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
# Architecture : X64
# ResourceId :
# Version : 20.10420.5102.0
# PackageFullName : Microsoft.Whiteboard_20.10420.5102.0_x64__8wekyb3d8bbwe
# InstallLocation : C:\Program Files\WindowsApps\Microsoft.Whiteboard_20.10420.5102.0_x64__8wekyb3d8bbwe
# IsFramework : False
# PackageFamilyName : Microsoft.Whiteboard_8wekyb3d8bbwe
# PublisherId : 8wekyb3d8bbwe
# IsResourcePackage : False
# IsBundle : False
# IsDevelopmentMode : False
# NonRemovable : False
# Dependencies : {Microsoft.VCLibs.140.00_14.0.27810.0_x64__8wekyb3d8bbwe,
# Microsoft.NET.Native.Framework.2.2_2.2.27912.0_x64__8wekyb3d8bbwe,
# Microsoft.NET.Native.Runtime.2.2_2.2.28604.0_x64__8wekyb3d8bbwe}
# IsPartiallyStaged : False
# SignatureKind : Store
# Status : Ok
#=============== Variable for use Root folder of PS1 ====================
If ($psISE)
{
$currentScriptDirectory = Split-Path -Parent -Path $psISE.CurrentFile.FullPath
}
If (!$currentScriptDirectory)
{
If ($MyInvocation.MyCommand.CommandType -eq "ExternalScript")
{
$currentScriptDirectory = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
}
Else
{
$currentScriptDirectory = Split-Path -Parent -Path ([Environment]::GetCommandLineArgs()[0])
}
}
# Function Write-Log
Function Write-Log {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$False)]
[ValidateSet("INFO","WARN","ERROR","FATAL","DEBUG")]
[String]
$Level = "INFO",
[Parameter(Mandatory=$True)]
[string]
$Message,
[Parameter(Mandatory=$False)]
[string]
$logfile
)
$Stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
$Line = "$Stamp $Level $Message"
If($logfile) {
Add-Content $logfile -Value $Line
}
Else {
Write-Output $Line
}
}
#========================================================================
# Log Path
$Manufacturer = 'Microsoft'
$ManufacturerApplicationName = 'Whiteboard'
$Version = '20.10420.5102.0'
$logpath = 'C:\Windows\Packages\Logs\' + $Manufacturer + '_' + $ManufacturerApplicationName + '_' + $Version + '_INSTALL.log'
If ((Test-path -Path 'C:\Windows\Packages\Logs\') -eq $false){
New-item -Path 'C:\Windows\Packages\Logs\' -ItemType Directory -ErrorAction SilentlyContinue | Out-Null
}
Write-Log -Level INFO -Message "Install $Manufacturer $ManufacturerApplicationName $Version" -logfile $logpath
Write-Log -Level INFO -Message 'Install Appx for All Users' -logfile $logpath
# Install
Try{
$DependenciesPath = Join-Path -Path $currentScriptDirectory -ChildPath Dependencies -Resolve
Add-AppxProvisionedPackage -Online -PackagePath $(Join-Path -Path $currentScriptDirectory -ChildPath "Microsoft.Whiteboard_20.10420.5102.0_x64__8wekyb3d8bbwe.appx") -SkipLicense -LogPath $(Join-Path -Path $currentScriptDirectory -ChildPath "Temp.log") -DependencyPackagePath $(Join-Path -Path $DependenciesPath -ChildPath Microsoft.NET.Native.Framework.2.2_2.2.27912.0_x64__8wekyb3d8bbwe.Appx),$(Join-Path -Path $DependenciesPath -ChildPath Microsoft.NET.Native.Runtime.2.2_2.2.28604.0_x64__8wekyb3d8bbwe.Appx),$(Join-Path -Path $DependenciesPath -ChildPath Microsoft.VCLibs.140.00_14.0.27810.0_x64__8wekyb3d8bbwe.Appx) | Out-Null
Get-Content $(Join-Path -Path $currentScriptDirectory -ChildPath "Temp.log") | ForEach-Object {Add-Content $logpath -Value $_}
Remove-Item -Path $(Join-Path -Path $currentScriptDirectory -ChildPath "Temp.log") -Force
Write-Log -Level INFO -Message "Appx is Provisioned" -logfile $logpath
}
Catch
{
$ErrorMessage = $_.Exception.Message
Write-Log -Level ERROR -Message $ErrorMessage -logfile $logpath
}
Désinstallation d'un APPX
# Uninstall Microsoft.WhiteBoard Appx
#=============== Variable for use Root folder of PS1 ====================
If ($psISE)
{
$currentScriptDirectory = Split-Path -Parent -Path $psISE.CurrentFile.FullPath
}
If (!$currentScriptDirectory)
{
If ($MyInvocation.MyCommand.CommandType -eq "ExternalScript")
{
$currentScriptDirectory = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
}
Else
{
$currentScriptDirectory = Split-Path -Parent -Path ([Environment]::GetCommandLineArgs()[0])
}
}
# Function Write-Log
Function Write-Log {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$False)]
[ValidateSet("INFO","WARN","ERROR","FATAL","DEBUG")]
[String]
$Level = "INFO",
[Parameter(Mandatory=$True)]
[string]
$Message,
[Parameter(Mandatory=$False)]
[string]
$logfile
)
$Stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
$Line = "$Stamp $Level $Message"
If($logfile) {
Add-Content $logfile -Value $Line
}
Else {
Write-Output $Line
}
}
# Log Path
$Manufacturer = 'Microsoft'
$ManufacturerApplicationName = 'Whiteboard'
$Version = '20.10420.5102.0'
$logpath = 'C:\Windows\Packages\Logs\' + $Manufacturer + '_' + $ManufacturerApplicationName + '_' + $Version + '_UNINSTALL.log'
If ((Test-path -Path 'C:\Windows\Packages\Logs\') -eq $false){
New-item -Path 'C:\Windows\Packages\Logs\' -ItemType Directory -ErrorAction SilentlyContinue | Out-Null
}
Write-Log -Level INFO -Message "Uninstall $Manufacturer $ManufacturerApplicationName $Version" -logfile $logpath
Get-AppxProvisionedPackage -Online | Where-Object Displayname -ceq "Microsoft.Whiteboard" | Remove-AppxProvisionedPackage -Online -LogPath $(Join-Path -Path $currentScriptDirectory -ChildPath "Temp.log") | Out-Null
Get-Content $(Join-Path -Path $currentScriptDirectory -ChildPath "Temp.log") | ForEach-Object {Add-Content $logpath -Value $_}
Remove-Item -Path $(Join-Path -Path $currentScriptDirectory -ChildPath "Temp.log") -Force
Write-Log -Level INFO -Message "Remove Microsoft.Whiteboard already install on all users" -logfile $logpath
Get-AppxPackage -AllUsers | Where-Object Name -ceq "Microsoft.Whiteboard" | Remove-AppxPackage -AllUsers