Skript erstellen welches Version prüft und Installation durchführt?
Hey,
ich wollte mir ein Skript schreiben welches nach der Benutzeranmeldung erst die Version prüft und wenn die Version nicht z.B 7.0 ist eine Installation bzw. Update durchführt.
Die Installation an sich ist kein Problem.. Werde die Setup Datei in einen Pfad legen wo alle PC's Zugriff haben. Und mit Hilfe der Installations Parametern installieren.
Jetzt nur meine Frage:
Wie kann ich am besten die Version auslesen? Bzw. prüfen ob es überhaupt installiert ist?
-> Also wenn ich das richtig verstehe ist das ja eine if-Bedingung
Wenn nicht installiert -> garnix machen. Wenn falsche Version -> Update
3 Antworten
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