Über Batch mehrere Windows CAB Dateien installieren

sendxp

Newbie
Registriert
Okt. 2013
Beiträge
2
Hallo über meine Batch-Dabei möchte ich mehrere Windows CAB Dateien installieren. Hier die Batch

@Echo Die cab-Installation [%0] wird auf dem Laufwerk: [%~d0] ausgefuehrt
DISM.exe /Online /Add-Package /PackagePath:"%~d0\windows10.0-kb4469344-x64.cab"
PAUSE
DISM.exe /Online /Add-Package /PackagePath:"%~d0\windows10.0-kb4477030-x64.cab"
PAUSE
DISM.exe /Online /Add-Package /PackagePath:"%~d0\windows10.0-kb4470788-x64.cab"
PAUSE

DISM.exe /Online /Add-Package /PackagePath:"%~d0\windows10.0-kb4476976-x64.cab"

Leider funktioniert das so nicht! Als Output erhalte ich:

Die cab-Installation ["C:\Users\Windows User\Downloads\Cab-Installer.cmd"] wird auf dem Laufwerk: [C:] ausgefuehrt
C:\WINDOWS\system32>DISM.exe /Online /Add-Package /PackagePath:"C:\windows10.0-kb4469344-x64.cab"
Tool zur Imageverwaltung für die Bereitstellung
Version: 10.0.17763.1
Abbildversion: 10.0.17763.107
Fehler beim Öffnen - C:\windows10.0-kb4469344-x64.cab Fehler: 0x80070003
Fehler beim Öffnen - C:\windows10.0-kb4469344-x64.cab Fehler: 0x80070003
Fehler: 3
Fehler beim Öffnen - C:\windows10.0-kb4469344-x64.cab Fehler: 0x80070003
Die DISM-Protokolldatei befindet sich unter "C:\WINDOWS\Logs\DISM\dism.log".

C:\WINDOWS\system32>PAUSE
Drücken Sie eine beliebige Taste . . .


Kann mir jemand bitte helfen
 
Pack die *.cab Dateien alle in einen Ordner,z.bsp. C:\Updates.
Dann brauchst du nur einen Befehl:
Dism /Online /Add-Package /PackagePath:C:\Updates
Alle cab bzw. msu Dateien im Ordner C:\Updates werden installiert.
 
Die Batch findet die *.cab nicht.

BFF
 
  • Gefällt mir
Reaktionen: areiland
Aus dem %~d zumindest ein %~dp machen.

D => "X:"
P => \Pfad\zum\Container

Und wie erwähnt, DISM versteht den Container als Argument (installiert nach Name aufsteigend; bei Bedarf umbenennen) und Wildcards.


Plus der obligatorische Hinweis, Batch ist out, blah blah PowerShell und dort

PowerShell:
Get-Childitem -Path C:\...  | Add-WindowsPackage -Online
ab Windows 8 oder, wenn man das DISM Modul aus dem ADK installiert hat, auch unter Win7.
 
  • Gefällt mir
Reaktionen: Rego
bezelbube schrieb:
Pack die *.cab Dateien alle in einen Ordner,z.bsp. C:\Updates.
Dann brauchst du nur einen Befehl:
Dism /Online /Add-Package /PackagePath:C:\Updates
Alle cab bzw. msu Dateien im Ordner C:\Updates werden installiert.

Nein, genau dass möchte ich doch eben nicht. Egal wo ich die CAB-Dateien liegen habe. Die Batch soll unabhängig vom Laufwerksbuchstaben die CAB-Dateien installieren. Daher brauche ich ja den Laufwerksbuchstaben viriabel.
Ergänzung ()

Wie müsste denn dann bitte ein Laufwerksbuchstaben unabhängiger PowerShell Aufruf aussehen. Ich kann euch leider nicht folgen :confused_alt:
 
Dann frag doch am Anfang des Batches den Pfad ab, in dem die Updates liegen.

Die Zeile: Set /p LW = "Bitte den Pfad angeben, in dem die Updates liegen: " erledigt das und den Pfad übergibst Du dann mit %LW% an die Befehlszeile. Dein Fehler liegt doch in der Angabe %~d0, die lediglich den Buchstaben des Laufwerkes enthält und damit zwingend die Updatedateien in dessen Hauptverzeichnis erwartet. Also entweder den korrekten Pfad abfragen, oder %~dp0 verwenden und die Updates im gleichen Ordner wie den Batch ablegen.
 
  • Gefällt mir
Reaktionen: Micha45
Und in PS könnte das so aussehen (Parameterliste ein wenig aufgehübscht und der Einzeiler der Lesbarkeit wegen an den Unterbefehlsenden umbrochen; das Ganze gehört in eine .PS1-Datei):

PowerShell:
#requires -Version 3.0 -Modules Dism

Param
(
  [parameter(Mandatory,HelpMessage='Pfad, in dem nach Updates gesucht werden soll')]
  [validatescript({($_|Get-Item).Exists})]
  [System.IO.DirectoryInfo] $Path,
  [switch] $Recurse
)

$Path | # Hole übergebenen Pfad aus Parameter
Get-Item | # PS hat sich bei relativen Pfaden affig, wenn das fehlt
Get-ChildItem -Recurse:$Recurse | # Durchsuche Pfad, je nach Angabe rekursiv oder eben nicht
where-object { '.msu','.cab' -contains $_.Extension } | #Filtere nach Erweiterung MSU oder CAB => das was man Windows verfüttern kann (extrahierte CAB wird nicht berücksichtigt)
Add-WindowsPackage -Online # Versuche alles zu installieren, was es bis hierher geschafft hat - note, das beinhaltet auch "normale", nicht-installierbare CAB dateien; die werfen Ausnahmen (welche man ggf. mit -ErrorAction SilentlyContinue ignorieren kann)

Getestet mit PS 5.1. Wenn man das als Einzeiler formatieren will, also alles hintereinander weg, dann müssen die Kommentare vorher entfernt werden.
 
  • Gefällt mir
Reaktionen: areiland
Zurück
Oben