114 lines
5.7 KiB
PowerShell
114 lines
5.7 KiB
PowerShell
class DiagnosticViewModel : FirefoxAddinManager.ObservableBase {
|
|
|
|
[System.Collections.ObjectModel.ObservableCollection[PolicyCheckModel]] $PolicyChecks
|
|
[System.Windows.Input.ICommand] $RunCheckCommand
|
|
[System.Windows.Input.ICommand] $FixSelectedCommand
|
|
[System.Windows.Input.ICommand] $FixAllErrorsCommand
|
|
[System.Windows.Input.ICommand] $OpenAboutPoliciesCommand
|
|
[System.Windows.Input.ICommand] $ImportRegCommand
|
|
|
|
hidden [PolicyCheckModel] $_selectedCheck = $null
|
|
hidden [string] $_statusMessage = ""
|
|
hidden [bool] $_isIntuneManaged = $false
|
|
|
|
[PolicyCheckModel] $SelectedCheck {
|
|
get { return $this._selectedCheck }
|
|
set { $this._selectedCheck = $value; $this.OnPropertyChanged("SelectedCheck") }
|
|
}
|
|
|
|
[string] $StatusMessage {
|
|
get { return $this._statusMessage }
|
|
set { $this._statusMessage = $value; $this.OnPropertyChanged("StatusMessage") }
|
|
}
|
|
|
|
[bool] $IsIntuneManaged {
|
|
get { return $this._isIntuneManaged }
|
|
set { $this._isIntuneManaged = $value; $this.OnPropertyChanged("IsIntuneManaged") }
|
|
}
|
|
|
|
DiagnosticViewModel() {
|
|
$this.PolicyChecks = [System.Collections.ObjectModel.ObservableCollection[PolicyCheckModel]]::new()
|
|
$this.IsIntuneManaged = [FirefoxService]::IsIntuneManaged()
|
|
$this._InitCommands()
|
|
}
|
|
|
|
hidden [void] _InitCommands() {
|
|
$vm = $this
|
|
|
|
$this.RunCheckCommand = [FirefoxAddinManager.RelayCommand]::new({
|
|
$vm.PolicyChecks.Clear()
|
|
[PolicyService]::RunChecks() | ForEach-Object { $vm.PolicyChecks.Add($_) }
|
|
$errors = ($vm.PolicyChecks | Where-Object { $_.Status -eq "FEHLER" }).Count
|
|
$vm.StatusMessage = if ($errors -gt 0) { "$errors Fehler gefunden." } else { "Keine Fehler gefunden." }
|
|
}, { $true })
|
|
|
|
$this.FixSelectedCommand = [FirefoxAddinManager.RelayCommand]::new({
|
|
if (-not $vm.SelectedCheck) { return }
|
|
if (-not [FirefoxService]::IsAdmin()) {
|
|
[System.Windows.MessageBox]::Show("Administratorrechte erforderlich.", "Kein Admin", "OK", "Warning")
|
|
return
|
|
}
|
|
[PolicyService]::FixError($vm.SelectedCheck)
|
|
$vm.RunCheckCommand.Execute($null)
|
|
$vm.StatusMessage = "Korrektur angewendet. Firefox neu starten."
|
|
}, { return $null -ne $this.SelectedCheck -and $this.SelectedCheck.Status -eq "FEHLER" })
|
|
|
|
$this.FixAllErrorsCommand = [FirefoxAddinManager.RelayCommand]::new({
|
|
if (-not [FirefoxService]::IsAdmin()) {
|
|
[System.Windows.MessageBox]::Show("Administratorrechte erforderlich.", "Kein Admin", "OK", "Warning")
|
|
return
|
|
}
|
|
$errors = $vm.PolicyChecks | Where-Object { $_.Status -eq "FEHLER" }
|
|
foreach ($e in $errors) { [PolicyService]::FixError($e) }
|
|
$vm.RunCheckCommand.Execute($null)
|
|
$vm.StatusMessage = "$($errors.Count) Fehler behoben. Firefox neu starten."
|
|
}, { return ($this.PolicyChecks | Where-Object { $_.Status -eq "FEHLER" }).Count -gt 0 })
|
|
|
|
$this.OpenAboutPoliciesCommand = [FirefoxAddinManager.RelayCommand]::new({
|
|
try { Start-Process "firefox" "about:policies" }
|
|
catch { [System.Windows.MessageBox]::Show("Firefox konnte nicht gestartet werden.", "Fehler", "OK", "Error") }
|
|
}, { $true })
|
|
|
|
$this.ImportRegCommand = [FirefoxAddinManager.RelayCommand]::new({
|
|
if (-not [FirefoxService]::IsAdmin()) {
|
|
[System.Windows.MessageBox]::Show("Administratorrechte erforderlich.", "Kein Admin", "OK", "Warning")
|
|
return
|
|
}
|
|
$dlg = New-Object Microsoft.Win32.OpenFileDialog
|
|
$dlg.Filter = "Registry-Datei (*.reg)|*.reg"
|
|
if (-not $dlg.ShowDialog()) { return }
|
|
|
|
$lines = Get-Content $dlg.FileName -Encoding Unicode -ErrorAction SilentlyContinue
|
|
if (-not $lines) { $lines = Get-Content $dlg.FileName -Encoding UTF8 -ErrorAction SilentlyContinue }
|
|
|
|
$currentKey = $null; $applied = 0; $skipped = 0
|
|
foreach ($line in $lines) {
|
|
$line = $line.Trim()
|
|
if ($line -eq "" -or $line.StartsWith(";") -or $line.StartsWith("Windows")) { continue }
|
|
if ($line -match '^\[(.+)\]$') {
|
|
$rawKey = $Matches[1]
|
|
if ($rawKey -match 'SOFTWARE\\Policies\\Mozilla\\Firefox') {
|
|
$currentKey = $rawKey -replace '^HKEY_LOCAL_MACHINE','HKLM:' -replace '^HKEY_CURRENT_USER','HKCU:'
|
|
} else { $currentKey = $null; $skipped++ }
|
|
continue
|
|
}
|
|
if (-not $currentKey) { continue }
|
|
if ($line -match '^"(.+)"=dword:(.+)$') {
|
|
if (-not (Test-Path $currentKey)) { New-Item -Path $currentKey -Force | Out-Null }
|
|
Set-ItemProperty $currentKey -Name $Matches[1] -Value ([Convert]::ToInt32($Matches[2],16)) -Type DWord
|
|
$applied++
|
|
} elseif ($line -match '^"(.+)"="(.*)"$') {
|
|
if (-not (Test-Path $currentKey)) { New-Item -Path $currentKey -Force | Out-Null }
|
|
Set-ItemProperty $currentKey -Name $Matches[1] -Value ($Matches[2] -replace '\\"','"') -Type String
|
|
$applied++
|
|
} elseif ($line -match '^"-(.+)"$') {
|
|
Remove-ItemProperty $currentKey -Name $Matches[1] -ErrorAction SilentlyContinue
|
|
$applied++
|
|
}
|
|
}
|
|
$vm.RunCheckCommand.Execute($null)
|
|
$vm.StatusMessage = "REG-Import: $applied Werte gesetzt, $skipped Keys uebersprungen. Firefox neu starten."
|
|
}, { $true })
|
|
}
|
|
}
|