cAppxPackage.psm1
enum Ensure { Absent Present } [DscResource()] class cAppxPackage { [DscProperty(Key)] [string]$Name [DscProperty(Mandatory)] [Ensure]$Ensure [DscProperty(Mandatory=$false)] [string]$InstallLocation = $null [void] Set() { Write-Verbose "Set AppxPackage $($this.name) to $($this.ensure) as $env:username" if ($this.TestSystemPriv()) { throw {'Running in System Context is not supported for Adding/Removing builtin AppxPackages'} } $appxInstalled = $this.TestAppxPresent($this.Name) if ($this.ensure -eq [Ensure]::Present) { if (-not $appxInstalled) { Write-Verbose -Message "Installing AppxPackage $($this.name)" if ($this.InstallLocation) { Add-AppxPackage -register "$($this.InstallLocation)\appxmanifest.xml" -DisableDevelopmentMode } else { Get-AppxPackage -Name $this.name -AllUsers | ForEach-Object {Add-AppxPackage -register "$($_.InstallLocation)\appxmanifest.xml" -DisableDevelopmentMode} } } else { Write-Verbose -Message "AppxPackage $($this.name) is installed, nothing to set" } } else { if ($appxInstalled) { Write-Verbose -Message "Removing AppxPackage $($this.name)" Get-AppxPackage -Name $this.name | Remove-AppxPackage } else { Write-Verbose -Message "AppxPackage $($this.name) is NOT installed, nothing to set" } } } [bool] Test() { Write-Verbose -Message "Testing if AppxPackage $($this.name) is installed as $env:username" $present = $this.TestAppxPresent($this.Name) if ($this.Ensure -eq [Ensure]::Present) { return $present } else { return -not $present } } [cAppxPackage] Get() { Write-Verbose "Get current config for AppxPackage $($this.name) as $env:username" $present = $this.TestAppxPresent($this.Name) if ($present) { $Package = Get-AppXPackage -Name $this.Name $this.Ensure = [Ensure]::Present $this.InstallLocation = $Package.InstallLocation } else { $this.InstallLocation = $null $this.Ensure = [Ensure]::Absent } return $this } [bool] TestAppxPresent([string]$name) { $present = $true $item = Get-AppxPackage -name $name -ErrorAction Ignore if ($null -eq $item) { $present = $false } return $present } [bool] TestSystemPriv() { $system = $false if ($env:COMPUTERNAME -match $env:USERNAME) { $system = $true } return $system } } |