class DeployViewModel : FirefoxAddinManager.ObservableBase { [System.Collections.ObjectModel.ObservableCollection[AddonModel]] $Addons [System.Windows.Input.ICommand] $DeployCommand [System.Windows.Input.ICommand] $ExportScriptCommand [System.Windows.Input.ICommand] $DownloadXpisCommand hidden [string] $_statusMessage = "" hidden [bool] $_isDeploying = $false [string] $StatusMessage { get { return $this._statusMessage } set { $this._statusMessage = $value; $this.OnPropertyChanged("StatusMessage") } } [bool] $IsDeploying { get { return $this._isDeploying } set { $this._isDeploying = $value; $this.OnPropertyChanged("IsDeploying") } } DeployViewModel() { $this.Addons = [System.Collections.ObjectModel.ObservableCollection[AddonModel]]::new() $this._LoadDefaultAddons() $this._InitCommands() } hidden [void] _LoadDefaultAddons() { @( @("uBlock Origin", "uBlock0@raymondhill.net", "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi", "https://addons.mozilla.org/firefox/addon/ublock-origin/", "Effizienter Werbeblocker"), @("Dark Reader", "addon@darkreader.org", "https://addons.mozilla.org/firefox/downloads/latest/darkreader/latest.xpi", "https://addons.mozilla.org/firefox/addon/darkreader/", "Dunkles Design"), @("Bitwarden", "{446900e4-71c2-419f-a6a7-df9c091e268b}", "https://addons.mozilla.org/firefox/downloads/latest/bitwarden-password-manager/latest.xpi", "https://addons.mozilla.org/firefox/addon/bitwarden-password-manager/", "Passwort-Manager"), @("KeePassXC", "keepassxc-browser@keepassxc.org", "https://addons.mozilla.org/firefox/downloads/latest/keepassxc-browser/latest.xpi", "https://addons.mozilla.org/firefox/addon/keepassxc-browser/", "KeePass-Integration"), @("Acrobat Reader", "acrobat_reader@adobe.com", "https://addons.mozilla.org/firefox/downloads/latest/acrobat-reader/latest.xpi", "https://addons.mozilla.org/firefox/addon/adobe-acrobat-dc-pdf/", "PDF-Viewer"), @("Foxit Reader", "foxitreader@foxitsoftware.com", "https://addons.mozilla.org/firefox/downloads/latest/foxit-reader/latest.xpi", "https://addons.mozilla.org/firefox/addon/foxit-reader/", "Foxit PDF-Viewer") ) | ForEach-Object { $this.Addons.Add([AddonModel]::new($_[0], $_[1], $_[2], $_[3], $_[4])) } } hidden [void] _InitCommands() { $vm = $this $this.DeployCommand = [FirefoxAddinManager.RelayCommand]::new( { if (-not [FirefoxService]::IsAdmin()) { [System.Windows.MessageBox]::Show( "Administratorrechte erforderlich.", "Kein Admin", "OK", "Warning"); return } $vm.IsDeploying = $true $vm.StatusMessage = "Deploying..." # JSON-String loeschen [RegistryService]::RemoveJsonString() # Wildcard setzen [RegistryService]::SetWildcard("blocked") # Ausgewaehlte Add-ons deployen $count = 0 foreach ($addon in $vm.Addons) { if ($addon.IsSelected) { [RegistryService]::DeployAddon($addon) $count++ } } $vm.IsDeploying = $false $vm.StatusMessage = "$count Add-on(s) deployed. Firefox neu starten." }, { return ($this.Addons | Where-Object { $_.IsSelected }).Count -gt 0 } ) $this.ExportScriptCommand = [FirefoxAddinManager.RelayCommand]::new( { $selected = $vm.Addons | Where-Object { $_.IsSelected } if (-not $selected) { [System.Windows.MessageBox]::Show("Bitte Add-ons auswaehlen.", "Hinweis", "OK", "Information") return } $dlg = New-Object Microsoft.Win32.SaveFileDialog $dlg.Filter = "PowerShell (*.ps1)|*.ps1" $dlg.FileName = "Deploy-FirefoxAddons.ps1" if (-not $dlg.ShowDialog()) { return } $lines = @( "#Requires -RunAsAdministrator" '$base = "HKLM:\SOFTWARE\Policies\Mozilla\Firefox\ExtensionSettings"' 'Remove-ItemProperty "HKLM:\SOFTWARE\Policies\Mozilla\Firefox" -Name ExtensionSettings -ErrorAction SilentlyContinue' '$wc = "$base\*"; if (-not (Test-Path $wc)) { New-Item $wc -Force | Out-Null }' 'Set-ItemProperty $wc -Name installation_mode -Value blocked' ) foreach ($a in $selected) { $lines += "" $lines += "# $($a.Name)" $lines += '$k = "' + "HKLM:\SOFTWARE\Policies\Mozilla\Firefox\ExtensionSettings\$($a.Id)" + '"' $lines += 'if (-not (Test-Path $k)) { New-Item $k -Force | Out-Null }' $lines += 'Set-ItemProperty $k -Name installation_mode -Value force_installed' $lines += 'Set-ItemProperty $k -Name install_url -Value "' + $a.InstallUrl + '"' } $lines | Out-File $dlg.FileName -Encoding UTF8 $vm.StatusMessage = "Skript exportiert: $($dlg.FileName)" }, { $true } ) } [AddonModel[]] GetSelectedAddons() { return @($this.Addons | Where-Object { $_.IsSelected }) } }