# Chocolatey

Paketmanager wie in Linux, nur halt für Windows und weil Communitybasiert nicht unbedingt vergleichbar, aber immerhin besser als zu Fuß zu laufen.

# Nennenswerte packages

### Backup &amp; Restore

- [InstChoco](https://community.chocolatey.org/packages/InstChoco) kann Paketlisten sichern und wiederherstellen. (Gibt Virusmeldungen, weil der Dev die Prüfsumme noch keinem AV gemeldet hat)

### Automatisierung

- [choco-upgrade-all-at\*](https://community.chocolatey.org/packages?q=choco-upgrade-all-at) für Taskplaner-Paketupdates

geht natürlich auch alles ohne package, aber mit packages ist das Leben halt einfacher

## Inspirationen

Einfach mal die [Recently Updated Packages](https://community.chocolatey.org/packages?q=&moderatorQueue=&moderationStatus=all-statuses&prerelease=false&sortOrder=package-created) durchschauen. Ist oft was dabei, was man noch nicht kannte. Unterschied zu Google-Suchen? Keine "Toplists" oder "Alternative to software X" Werbebannerseiten, sondern nur Software, die jemand eines Chocolatey-Pakets für würdig befunden hat.

[Meine Chocolatey-Pakete](https://community.chocolatey.org/profiles/paradonym) konzentrieren sich überwiegend auf Chrome-Extensions. Dort ists halt für Chocolatey (und Viren) am einfachsten Benutzern Extensions unterzujubeln, weils einfach per Registry-Key geht und kaum Maintenance benötigt. Schließlich updatet Chrome selbsttätig.

# Browser Extension Packages

### Chrome

#### chocolateyInstall.ps1

```Powershell
$bits = Get-ProcessorBits
$packageName = 'oblockorigin-chrome'
$extensionID = 'cjpalhdlnbpafiamejdnhcphjbkeiagm'
if ($bits -eq 64)
   {
    if (Test-Path -Path "HKLM:\SOFTWARE\Wow6432node\Google\Chrome\Extensions\$extensionID")
       {
       Write-Host "Extension already installed." -foreground "magenta" –backgroundcolor "blue"
       } else {
         New-Item -Force -Path "HKLM:\SOFTWARE\Wow6432node\Google\Chrome\Extensions\$extensionID" | out-null
         New-ItemProperty -Path "HKLM:\SOFTWARE\Wow6432node\Google\Chrome\Extensions\$extensionID\" -Name "update_url" -Value "https://clients2.google.com/service/update2/crx" | out-null
         New-ItemProperty -Path "HKLM:\SOFTWARE\Wow6432node\Google\Chrome\Extensions\$extensionID\" -Name "ChocolateyPackageName" -Value "$packageName" | out-null
         }
    } else {
      New-Item -Force -Path "HKLM:\SOFTWARE\Google\Chrome\Extensions\$extensionID" | out-null
      New-ItemProperty -Path "HKLM:\SOFTWARE\Google\Chrome\Extensions\$extensionID\" -Name "update_url" -Value "https://clients2.google.com/service/update2/crx" | out-null
      }
```

#### chocolateyUninstall.ps1

```Powershell
$bits = Get-ProcessorBits
$packageName = 'ublockorigin-chrome'
$extensionID = 'cjpalhdlnbpafiamejdnhcphjbkeiagm'
 
if ($bits -eq 64) {
    Remove-Item "HKLM:\SOFTWARE\Wow6432node\Google\Chrome\Extensions\$extensionID" -Force -ErrorAction SilentlyContinue | out-null
   }else{
    Remove-Item "HKLM:\SOFTWARE\Google\Chrome\Extensions\$extensionID" -Force -ErrorAction SilentlyContinue | out-null
}
```

### Firefox

<p class="callout warning">Mag nicht mehr der aktuellste Weg sein, Firefox speichert Extensions eher im Profil statt im Programmordner, wie es das Script hier tut. C:\\Program Files\\Mozilla Firefox\\browser\\extensions würde ohne dieses Script nicht angelegt sein.  
  
Gibt aber unter HKLM\\SOFTWARE\\WOW6432Node\\Mozilla\\Firefox\\TaskBarIDs auch nur den Programmpfad und nicht den Profilpfad. Der Profilpfad aus <a>about:profiles</a> steht nicht mal eben so einfach in der Registry zum auslesen.  
</p>

#### chocolateyInstall.ps1

```Powershell
$packageName = 'adblockplus-firefox'
$url = 'https://addons.mozilla.org/firefox/downloads/latest/1865/addon-1865-latest.xpi'
$extensionID = "{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}"
#xpi download, extract like zip files, open manifest.json, Ctrl+F, id (may/should also be an email-adress these days)

if(test-path 'hklm:\SOFTWARE\Mozilla\Firefox\TaskBarIDs'){
	$installDir = Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Firefox\TaskBarIDs | Select-Object -ExpandProperty Property
}
if(test-path 'hklm:\SOFTWARE\Wow6432Node\Mozilla\Firefox\TaskBarIDs'){
	$installDir = Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Firefox\TaskBarIDs | Select-Object -ExpandProperty Property
}

$browserFolder = Join-Path $installDir "browser"
$extensionsFolder = Join-Path $browserFolder "extensions"
$extFolder = Join-Path $extensionsFolder "$extensionID"
if (!(Test-Path $extFolder)) {
	New-Item -Force -ItemType directory -Path $extFolder 
	Install-ChocolateyZipPackage "$packageName" "$url" "$extFolder"
}
else {
	Write-Host "$packageName already exists"
}
```

#### chocolateyUninstall.ps1

```Powershell
$extensionID = "{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}"

if(test-path 'hklm:\SOFTWARE\Mozilla\Firefox\TaskBarIDs'){
	$installDir = Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Firefox\TaskBarIDs | Select-Object -ExpandProperty Property
}
if(test-path 'hklm:\SOFTWARE\Wow6432Node\Mozilla\Firefox\TaskBarIDs'){
	$installDir = Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Firefox\TaskBarIDs | Select-Object -ExpandProperty Property
}


$browserFolder = Join-Path $installDir "browser"
$extensionsFolder = Join-Path $browserFolder "extensions"
$extFolder = Join-Path $extensionsFolder "$extensionID"

Remove-Item "$extFolder" -Force -Recurse -ErrorAction SilentlyContinue
```

[src](https://community.chocolatey.org/packages/adblockplus-firefox#files)

# FortiNet Overblocking bei Chocolatey

FortiNet neigt zu False Postivies was Chocolatey angeht.  
Trifft mal die nuspec des chocolatey Pakets, mal das [install.ps1](https://community.chocolatey.org/install.ps1) - wer weiß was da noch kommt.  
Zum Glück gibts ein live URL Rating, dass zwar Ewigkeiten braucht, aber immerhin animierte Ladebalken hat. Auf den Timer ist kein Verlass.

Verdammte Schlangenölsoftware.

### Funktionsumfang ist nicht eingeschränkt

Für normale Paketupdates ist der Funktionsumfang nicht eingeschränkt, üblicherweise triffts keine Pakete, sondern nur Chocolatey selbst.  
Sprich: Chocolatey wird sich nicht selbst aktualisieren können, wohl aber all die Pakete, die man schon drin hat.

Nice to know für die choco-upgrade-all-at\* Pakete. Wollte ich so halt mal für alle aufgeschrieben haben.

<p class="callout success">Immer wenn ich irgendeinen Schlangenölsoftwarenamen in Google eintippe, dann ist der erste Vorschlag "... false positive" oder "...rerating" 😊 - Google kennt mich.  
Die AV-Hersteller sind es derart gewöhnt solche fluten an False-Positive Mails zu erhalten dass man das sicher irgendwie social engineeren kann. Hat das wer schon mal probiert? Einfach die eigene Ransomware als False Positive bei ein paar AV-Herstellern melden?</p>