====== Créer un package pour déployer un APPX ====== Il est possible de télécharger les fichiers nécessaires via [[https://store.rg-adguard.net/|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 | Install-Appx.ps1 | Microsoft.CompanyPortal_2020.521.2255.0_neutral_~_8wekyb3d8bbwe.appxbundle | Remove-Appx.ps1 | \---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