Skript erstellen welches Version prüft und Installation durchführt?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Auf die Nachfrage hast du nicht geantwortet, ich hab mir daher nach 'ner Weile Langeweile die Frage für mich selbst beantwortet, vielleicht kannst du ja etwas damit anfangen...

Edit: Das dunkle GuteFrage Theme macht mehrere Variablen unsichtbar -.-
Kopiere es dir halt in vim / PS ISE

Debian, Bourne shell:

#!/bin/sh
varxz="2.05"
prog=cowsay
#varxy=$(dpkg -l | awk '$2=="cowsay" { print $3 }')
#echo $varxy

if ! dpkg -s $prog >/dev/null 2>&1; then
        echo "$prog Not installed, installing"
else echo "$prog is installed"
        echo $prog Version: $(dpkg-query -f='${Version}\n' --show $prog)
        if $(dpkg --compare-versions $(dpkg-query -f='${Version}' --show $prog) ge $varxz)
                then echo "Version greater or equal $varxz, doing nothing."
                else echo "Version is older than $varxz, installing."
        fi
fi

Powershell, Methode 2 ist schneller:

<#
$software = "Nextcloud"
$blargh = Get-WmiObject Win32_Product -Filter "Name like '$software'" | Select-Object -ExpandProperty Version
$MinVer = "3.0.0.0000"
if ([System.Version]$blargh -ge [System.Version]$MinVer) {
    Write-Host "$blargh -ge $MinVer"
    } else {
    Write-Host "$blargh not -ge"
}
#>


#
$software = "Nextcloud";
$installed = (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where { $_.DisplayName -eq $software }) -ne $null
$Version = (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where { $_.DisplayName -eq "$software" } | Select-Object -ExpandProperty Version)
$DisplayVersion =(Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where { $_.DisplayName -eq "$software" } | Select-Object -ExpandProperty DisplayVersion)
$MinVer = "3.0.0.0000"
Write-Host "Debug: $software $installed $Version $DisplayVersion $MinVer `n`n"
If(-Not $installed) {
	Write-Host "'$software' is NOT installed.";
} else {
	Write-Host "'$software' is installed, Version $Version."
    if ([System.Version]$DisplayVersion -ge [System.Version]$MinVer) {  
        Write-Host "$DisplayVersion is ge $MinVer - not installing" } 
    elseif ([System.Version]$DisplayVersion -lt [System.Version]$MinVer) {
        Write-Host "$DisplayVersion is lt $MinVer - Updating"
}}
#

Wie kann ich am besten die Version auslesen? Bzw. prüfen ob es überhaupt installiert ist?

Mit dpkg -l kannst Du erkennen, ob ein Paket installiert ist und wenn ja, welche Version.

auf die schnelle was ich finde es sind 234832 Zeichen zuviel für die Antwort.

Visual Baisc ist aber in C# nicht viel anders aber denks ans Regitryaufräumen wenn man dein Programm deinstalliert.

        If _Regkey <> Nothing Then
            _ServerName = My.Computer.Registry.GetValue(_Regkey, "servername", "")
            sUserName = My.Computer.Registry.GetValue(_Regkey, "username", "")
            sPassWord = My.Computer.Registry.GetValue(_Regkey, "password", "")
        End If
Woher ich das weiß:Berufserfahrung