Appx aus Image auslesen und entfernen
Hallo zusammen,
ich kommen gerade nicht weiter.
Aus dem bereitgestellten Windows-Image lese ich die AppxProvisionedPackages aus und speichere diese in eine Textdatei.
Anschließend möchte ich die Datei auslesen und die AppxProvisionedPackages aus dem Windows-Image entfernen.
Die Bearbeitung der Datei möchte ich später mittels RadioButtons realisieren.
Aber erstmal sollte der Standard funktionieren.
Und genau da liegt das Problem.
In der Konsole bekomme ich folgende Meldung:
Da aus $Appx[$i] die Objekte korrekt ausgegeben werden (z.B. Microsoft.3DBuilder_11.0.47.0_neutral_~_8wekyb3d8bbwe) verstehe ich das nicht ganz.
Wenn ich z.B. Microsoft.3DBuilder_11.0.47.0_neutral_~_8wekyb3d8bbwe direkt eingebe, wird der Vorgang erfolgreich abgeschlossen.
In der dism.log steht folgendes was ich auch nicht verstehe.
Warum wird den nicht die einzelne Zeile aus $Appx[$i] aufgerufen wie in der Konsole? Und wie kann ich das mit den Leerzeichen in der von mir erzeugten Textdatei und verhindern?
Vielen Dank für Eure Unterstützung.
Schöne Grüße
Markus2016
ich kommen gerade nicht weiter.
Aus dem bereitgestellten Windows-Image lese ich die AppxProvisionedPackages aus und speichere diese in eine Textdatei.
Get-AppxProvisionedPackage -Path "$Global:Projekt\Image_mount" | Select PackageName | Out-File "$Global:Projekt\Windows_AppxPackage_$(get-date -f yyyy.MM.dd).txt"
Anschließend möchte ich die Datei auslesen und die AppxProvisionedPackages aus dem Windows-Image entfernen.
Die Bearbeitung der Datei möchte ich später mittels RadioButtons realisieren.
Aber erstmal sollte der Standard funktionieren.
Und genau da liegt das Problem.
$Appx = Get-Content "$Global:Projekt\Windows_AppxPackage*.txt"
$i=3
Do{
$Appx | ForEach {$Appx[$i]; $env:DISM\dism /Image:"$Global:Projekt\Image_mount" /Remove-ProvisionedAppxPackage /PackageName:$Appx[$i]; $i++}
}
while ($i -le $Appx.Lenght)
In der Konsole bekomme ich folgende Meldung:
Microsoft.3DBuilder_11.0.47.0_neutral_~_8wekyb3d8bbwe
Tool zur Imageverwaltung für die Bereitstellung
Version: 10.0.14393.0
Abbildversion: 10.0.14393.0
Fehler: 87
Falscher Parameter.
Die DISM-Protokolldatei befindet sich unter "C:\WINDOWS\Logs\DISM\dism.log".
Da aus $Appx[$i] die Objekte korrekt ausgegeben werden (z.B. Microsoft.3DBuilder_11.0.47.0_neutral_~_8wekyb3d8bbwe) verstehe ich das nicht ganz.
Wenn ich z.B. Microsoft.3DBuilder_11.0.47.0_neutral_~_8wekyb3d8bbwe direkt eingebe, wird der Vorgang erfolgreich abgeschlossen.
In der dism.log steht folgendes was ich auch nicht verstehe.
2016-11-26 20:03:15, Error DISM DISM Appx Provider: PID=4052 TID=9572 Failed when trying to convert package fullname ' PackageName ----------- Microsoft.3DBuilder_11.0.47.0_neutral_~_8wekyb3d8bbwe Microsoft.BingWeather_4.9.51.0_neutral_~_8wekyb3d8bbwe Microsoft.DesktopAppInstaller_1.5.26001.0_neutral_~_8wekyb3d8bbwe Microsoft.Getstarted_3.11.3.0_neutral_~_8wekyb3d8bbwe Microsoft.Messaging_2.7.1001.0_neutral_~_8wekyb3d8bbwe Microsoft.MicrosoftOfficeHub_2015.6801.23751.0_neutral_~_8wekyb3d8bbwe Microsoft.MicrosoftSolitaireCollection_3.9.5100.0_neutral_~_8wekyb3d8bbwe Microsoft.MicrosoftStickyNotes_1.0.136.0_neutral_~_8wekyb3d8bbwe Microsoft.Office.OneNote_2015.6868.57981.0_neutral_~_8wekyb3d8bbwe Microsoft.OneConnect_1.1605.17.0_neutral_~_8wekyb3d8bbwe Microsoft.People_2016.709.155.0_neutral_~_8wekyb3d8bbwe Microsoft.SkypeApp_11.4.86.0_neutral_~_kzf8qxf38zg5c Microsoft.StorePurchaseApp_1.0.454.0_neutral_~_8wekyb3d8bbwe Microsoft.Windows.Photos_2016.511.9510.0_neutral_~_8wekyb3d8bbwe Microsoft.WindowsAlarms_2016.622.2118.0_neutral_~_8wekyb3d8bbwe Microsoft.WindowsCalculator_2016.606.1706.0_neutral_~_8wekyb3d8bbwe Microsoft.WindowsCamera_2016.404.190.0_neutral_~_8wekyb3d8bbwe microsoft.windowscommunicationsapps_2015.6868.41201.0_neutral_~_8wekyb3d8bbwe Microsoft.WindowsFeedbackHub_1.3.1741.0_neutral_~_8wekyb3d8bbwe Microsoft.WindowsMaps_2016.701.2235.0_neutral_~_8wekyb3d8bbwe Microsoft.WindowsSoundRecorder_2016.611.2.0_neutral_~_8wekyb3d8bbwe Microsoft.WindowsStore_11606.1001.394.0_neutral_~_8wekyb3d8bbwe Microsoft.XboxApp_2016.623.248.0_neutral_~_8wekyb3d8bbwe Microsoft.XboxIdentityProvider_2016.616.818.0_neutral_~_8wekyb3d8bbwe Microsoft.ZuneMusic_2019.6.19261.0_neutral_~_8wekyb3d8bbwe Microsoft.ZuneVideo_2019.6.19281.0_neutral_~_8wekyb3d8bbwe[31]' to PackageId - CDismContext::IsPackageFullNameBundle(hr:0x80070057)
Warum wird den nicht die einzelne Zeile aus $Appx[$i] aufgerufen wie in der Konsole? Und wie kann ich das mit den Leerzeichen in der von mir erzeugten Textdatei und verhindern?
Vielen Dank für Eure Unterstützung.
Schöne Grüße
Markus2016
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 322170
Url: https://administrator.de/contentid/322170
Ausgedruckt am: 27.11.2024 um 13:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo Markus,
du schmeisst da ForEach und For durcheinander.
ForEach ist doch ein enumerator für alles was $Appx in die Pipe ausgibt, den Inhalt sprichst du mit $_ und ggfs angehängtem Property an.
bei For kannst du entweder:
oder
benutzen
du schmeisst da ForEach und For durcheinander.
ForEach ist doch ein enumerator für alles was $Appx in die Pipe ausgibt, den Inhalt sprichst du mit $_ und ggfs angehängtem Property an.
$Appx | ForEach {$_}
For ($App in $Appx) { $App }
For ($i = 0; $i -le $Appx.Length; $i++) {$Appx[$i]}
Markus,
irgendwie hast du scheinbar eine Neigung die Befehle zu mixen do..while und die for Schleife passen so nicht..
Vielleicht klappt das (und es ist Length nicht Lenght) :
Was sagt dir denn :
vielleicht liegt der fehler ja woanders.
irgendwie hast du scheinbar eine Neigung die Befehle zu mixen do..while und die for Schleife passen so nicht..
Vielleicht klappt das (und es ist Length nicht Lenght) :
$Appx = Get-Content "$Global:Projekt\Windows_AppxPackage*.txt"
For ($i = 3;$i -le $Appx.Length; $i++) {
.$env:DISM\dism /Image:"$Global:Projekt\Image_mount" /Remove-ProvisionedAppxPackage /PackageName:$Appx[$i]}
}
Was sagt dir denn :
$Appx | get-Member
Der Fehler hier ist das er die Parameter nicht in Anführungszeichen kapselt, deswegen führt dann der Bindestrich in ..../Remove-ProvisionedAppxPackage...... zu der genannten Fehlermeldung, da die Powershell den Bindestrich als Einleitung eines CMDLet Parameter interpretiert!
Um das zu umgehen sollte man Parameter beim Aufruf von DOS-Befehlen immer in Anführungszeichen kapseln.
btw. wieso nutzt du DISM dafür? Die Powershell kennt doch ein natives CMDlet dafür namens
Remove-AppxProvisionedPackage
Außerdem würde ich den Export eher so machen
und dann so in Schleife einlesen
Gruß
Um das zu umgehen sollte man Parameter beim Aufruf von DOS-Befehlen immer in Anführungszeichen kapseln.
btw. wieso nutzt du DISM dafür? Die Powershell kennt doch ein natives CMDlet dafür namens
Remove-AppxProvisionedPackage
Außerdem würde ich den Export eher so machen
Get-AppxProvisionedPackage -Path "$Global:Projekt\Image_mount" | Select -Expand PackageName | Out-File "$Global:Projekt\Windows_AppxPackage_$(get-date -f yyyy.MM.dd).txt"
(gc "$Global:Projekt\Windows_AppxPackage_*.txt") | %{
Remove-AppxProvisionedPackage -Path "$Global:Project\Image_mount" -Packagename $_
}
Gruß
Remove-AppxProvisionedPackage : Das Paket wurde nicht gefunden.
Naja, sagt die Fehlermeldung ja schon, dann hast du das Paket schon aus dem Image entfernt und es ist nicht mehr zu finden Btw. ist das Quell-Image und Ziel-Image das gleiche? Wenn ja, wieso gehst du den Umweg über eine Textdatei?? Du kannst das Ergebnis von Get-AppxProvisionedpackage direkt an Remove-AppxProvisionedPackage pipen!
Zitat von @Markus2016:
Ich möchte mir später mittels RadioButtons eine Auswahlmöglichkeit erstellen, bei der die zu entfernenden Appx ausgewählt werden können.
Deshalb der Umweg mit der Textdatei.
?? Das brauchst du auch dann nicht. Du kannst die Pakete in einer Variablen speichern und dann nachher per where-object die gecheckten ausfiltern.Ich möchte mir später mittels RadioButtons eine Auswahlmöglichkeit erstellen, bei der die zu entfernenden Appx ausgewählt werden können.
Deshalb der Umweg mit der Textdatei.
An was könnte es noch liegen, dass die Pakete nicht gefunden werden, obwohl diese noch im Image vorhanden sind?
Keine Ahnung, geht hier problemlos. Vielleicht hast du noch alte Textdateien da liegen die mit eingelesen werden, du hast da ja ein Wildcard mit drin.Lass dir die Namen aus der Textdatei ausgeben und vergleiche penibel ob sich bei dir da was an Zeichen reingeschummelt hat.