per Batch Win10-Apps deinstallieren?
Hallo!
..da ich des öfteren Win10-Neuinstallationen mache..wollte ich mir ein Batch bauen..in dem ich Win10-Apps auflisten & deinstallieren kann..und zwar für den Aktuellen Benutzer sowie zukünftige neu angelegte Benutzer!
Da cmd das nicht kann..brauche ich den Befehl für Powershell..aus dem Batch heraus!
Weiss jemand wie das geht?
unter Apps verstehe ich den Dreck wie: Wetter, XBox, Mobilfunktarife, News usw....
3 Antworten
Kenne mich damit leider nicht so gut aus. Aber habe mal gelesen das Powershell eigen Skripte kann.
Und habe auch mal ein Skript gehabt was bestimmte Ordner löscht das wurde mit VBS am Ende statt CMD angegeben.
Da cmd das nicht kann..brauche ich den Befehl für Powershell..aus dem Batch heraus!
Ein gefährliches Unterfangen für jemanden der keine Ahnung von der Sache hat.😱
...und warum das Ganze dann auch noch aus einer Batch heraus starten? es ist ja so unbequem das .ps1-Script per Rechtsklick zu starten😤🤣.
...auch wenn ich die Anfänger manchmal nicht verstehe, des Menschen Wille ist sein Himmelreich (gib Gas Grauer):
test.ps1
#Apps komplett auflisten:
Get-AppxPackage
pause
...oder
#nur die Namen aller Apps auflisten:
Get-AppxPackage |%{ $_.name}
pause
...für alle Nutzer (benötigt Admirechte!...sonst Fehlemeldung)
#nur die Namen aller Apps auflisten:
Get-AppxPackage -allusers
pause
nun die Batch zum Starten das .ps1-Scripts:
(den vollen Pfad des .ps1-Scripts angeben)
meineBatch.cmd: (startet das S.ps1 ohne Admin)
@echo off
powershell.exe -ExecutionPolicy ByPass -noprofile -NoExit -file "C:\meinPfad\test.ps1"
pause
dito mit Adminrechten:
@echo off
rem die Maskierungen ( \" ) vor den Gänsefüßchen um den Dateipfad sind wichtig...
powershell.exe -noprofile -command "&{start-process powershell -ArgumentList '-ExecutionPolicy ByPass -noprofile -file \"C:\meinPfad\test.ps1\"' -verb RunAs}"
pause
...man kann natürlich auch ein Batch-Powerschellscript basteln:
(die Mogelpackung unter den Batches ....ein Powershellscript in einer Batch verpackt ):
ohneAdmin.cmd :
<# : Batch Abschnitt ,Batch sieht in dieser Zeile die Eingabe aus der Datei # an ein SprungLabel, Powershell sieht den begin eines Kommentars.
@echo off
chcp 65001 >nul
rem alles von hier bis :run dient der Demo....
if "%~1" neq "" goto :run
echo das ist die Batch...
echo Hilfe: Ziehe Dateien auf die die Batch "%~nx0"...
echo ...oder auch nicht
echo Die Dateinamen werden an das Powershellscript weitegeleitet.
timeout 2 >nul
:run
color 1f
cls
rem Diese Zeile nicht veränden! startet Powershell ohne Rechtevergabe und übergibt Parameter über die Pipe
(for %%I in ("%~f0" %*) do @echo:%%~I)|powershell -noprofile "[Array]$argv = $input|?{$_}; iex (${%~f0} | out-string)"
echo wieder zurück in der Batch!
rem das folgende pause hält das Fenster offen....
pause
exit /b
: Ende Batch
:: Ab der nächsten Zeile beginnt das eigentliche PowershellScript, da kannst Du Powershellcode einfügen wie es Dier beliebt... #>
#ab hier Dein Code...
"Jetzt bin ich in der Powershell"
$argv |%{ "`$argv[{0}]: $_" -f $i++};$i=$Null;
$ScriptName=$argv[0]
#alle übergebenen Parameter außer $argv[0] der Variable Params zuweisen:
$Params=$argv|Select -Skip 1
""
"Name der Hybridbatch:"
$ScriptName
#Params ist ein Array. Einzelne Elemente können über $Params[IndexNummer] aufgerufen werden.
if ($Params) {
""
"an die Batch uebergebene Parameter:"
$Params
}
mitAdmin.cmd :
<# : batch portion
@echo off
:::: -Begin elevator
rem Batch falls Nötig als Administrator starten
set "elevator=%temp%\%~n0.elevate.js"
rem Prüfe ob bereits im Adminmode
net session >nul 2>&1 && goto :adminTasks
rem Wichtig!!!! set -Angaben immer in Anführungszeichen !!! ...Steuerzeichen enthalten
rem nach den "=" die Befehlszeile , welche Aufgerufen werden soll.
set "elevationCmdLine=cd /d "%cd%"&call "%~f0" %*"
rem & durch maskiertes ^& ersetzen
set "elevationCmdLine=%elevationCmdLine:&=^&%"
rem da in Javascript ein einzelner Backslash als Steuerzeichen (Escapecharakter) gewertet wird, alle Backslashes verdoppeln
set "elevationCmdLine=%elevationCmdLine:\=\\%"
rem das geht nur mit JavaSript in einer externen Datei. Nur so lassen sich zwei verschiedene Quotes verschachteln!
rem die Carrets "^" vor den Klammern sind extrem wichtig (Maskierung).
::echo var objShell = new ActiveXObject^("shell.application"^); >"%elevator%"
echo new ActiveXObject^("shell.application"^).ShellExecute^('cmd','/c %elevationCmdLine% ' ,'','runas',4^); >"%elevator%"
cscript //nologo "%elevator%"
exit /b
:::: -End elevator
:adminTasks
setlocal enableDelayedExpansion
chcp 65001 >nul
color 1f
cls
echo Ausführung mit Adminrechten.
echo Diese Batch : %~f0
echo Arbeitsverzeichniss : %cd%
echo übergebene Argumente:
for %%a in (%*) do (echo %%a)
echo:
(for %%I in ("%~f0";%*) do @echo(%%~I) | ^
powershell -noprofile "[Array]$argv = $input | ?{$_}; iex (${%~f0} | out-string)"
echo wieder zurück in der Batch^^!
pause
exit /b
: Ende Batch
:: Ab der nächsten Zeile beginnt das eigentliche PowershellScript, da kannst Du Powershellcode einfügen wie es Dier beliebt... #>
#ab hier Dein Code...
"Jetzt bin ich in der Powershell"
$argv |%{ "`$argv[{0}]: $_" -f $i++};$i=$Null;
$ScriptName=$argv[0]
#alle übergebenen Parameter außer $argv[0] der Variable Params zuweisen:
$Params=$argv|Select -Skip 1
""
"Name der Hybridbatch:"
$ScriptName
#Params ist ein Array. Einzelne Elemente können über $Params[IndexNummer] aufgerufen werden.
if ($Params) {
""
"an die Batch uebergebene Parameter:"
$Params
}
....das nennt man Batch auf die Spitze getrieben...
aber nun zur Deinstallation:
Du könntest ja eine Einzelne App selektieren indem du den vollen Namen angibst (wie man alle Appnamen auflistet habe ich am Anfang demostriert)
Get-AppxPackage Microsoft.BingNews | Remove-AppxPackage -Confirm
aber der Befehl begnügt sich auch mit einem Teil des Namens und Jokern.
Get-AppxPackage *BingNews* | Remove-AppxPackage -Confirm
..aber das ganze lässt sch natürlich auch noch erweitern:
alles deinstallieren, was Bing im Namen hat:
Get-AppxPackage *Bing* | Remove-AppxPackage -Confirm
...das -confirm habe ich nur angefügt, weil ich beim Testen mein Zeug nicht schrotten wollte....
...da Du nicht alle apps verarbeiten möchtest sondern nur bestimmte könntest Du Spagetticode basteln:
Get-AppxPackage *BingNews* | Remove-AppxPackage -Confirm
Get-AppxPackage *ZuneMusic* | Remove-AppxPackage -Confirm
Get-AppxPackage *3dbuilder* | Remove-AppxPackage -Confirm
Get-AppxPackage *skypeapp* | Remove-AppxPackage -Confirm
ein gruseliger Gedanke für einen Programmierer.🥶🤮
stattdessen programmiern wir ein Array, welches unsere Begriffe aufnimmt und schicken dessen Inhalt einzeln an Get-AppxPackage
#Apps die verarbeitet werden sollen
$AppsToProcess=@('*bing*','*bingfinance*','*3dbuilder*','*windowscamera*','*skypeapp*','*zunemusic*','*solitairecollection*','*zunevideo*')
#$AppsToProcess an Get-AppxPackage übergeben
#Mal schauen was davon instaliert ist...
$AppsToProcess|%{
Get-AppxPackage $_ |%{
$_.name
}
}
"
"
#dito deinst....
$AppsToProcess|%{Get-AppxPackage $_ | Remove-AppxPackage -Confirm}
"
"
#mal schauen was noch davon da ist (ich habe schließlich immer brav mit Nein geantwortet)
$AppsToProcess|%{Get-AppxPackage $_ |%{$_.name}}
pause
...und jetzt tüten wir das ganze noch in die HybridBatch ein:
ohne Admin.cmd:
<# :
@echo off
chcp 65001 >nul
color 1f
(for %%I in ("%~f0" %*) do @echo:%%~I)|powershell -noprofile "[Array]$argv = $input|?{$_}; iex (${%~f0} | out-string)"
pause
exit /b
: Ende Batch #>
$AppsToProcess=@('*bing*','*bingfinance*','*3dbuilder*','*windowscamera*','*skypeapp*','*zunemusic*','*solitairecollection*','*zunevideo*')
$AppsToProcess|%{Get-AppxPackage $_ |%{$_.name}}
"
"
$AppsToProcess|%{Get-AppxPackage $_ | Remove-AppxPackage -Confirm}
"
"
$AppsToProcess|%{Get-AppxPackage $_ |%{$_.name}}
mit Admin.cmd
<# : Begin Batch
@echo off
set "elevator=%temp%\%~n0.elevate.js"
net session >nul 2>&1 && goto :adminTasks
set "elevationCmdLine=cd /d "%cd%"&call "%~f0" %*"
set "elevationCmdLine=%elevationCmdLine:&=^&%"
set "elevationCmdLine=%elevationCmdLine:\=\\%"
echo new ActiveXObject^("shell.application"^).ShellExecute^('cmd','/c %elevationCmdLine% ' ,'','runas',4^); >"%elevator%"
cscript //nologo "%elevator%"
exit /b
:adminTasks
setlocal enableDelayedExpansion
chcp 65001 >nul
color 1f
(for %%I in ("%~f0";%*) do @echo:%%~I) | powershell -noprofile "[Array]$argv = $input | ?{$_}; iex (${%~f0} | out-string)"
pause
exit /b
: Ende Batch #>
$AppsToProcess=@('*bing*','*bingfinance*','*3dbuilder*','*windowscamera*','*skypeapp*','*zunemusic*','*solitairecollection*','*zunevideo*')
$AppsToProcess|%{Get-AppxPackage $_ -allusers |%{$_.name}}
"
"
$AppsToProcess|%{Get-AppxPackage $_ -allusers | Remove-AppxPackage -Confirm}
"
"
$AppsToProcess|%{Get-AppxPackage $_ -allusers |%{$_.name}}
Hier nochmal die Apps (und die dazugehörigen Joker), welche man deinstallieren könnte (Uhr und Kalender ist nicht unbedingt Ratsam):
- 3D Builder: *3dbuilder*
- Alarms and Clock: *windowsalarms*
- Calculator: *windowscalculator*
- Calendar and Mail: *windowscommunicationsapps*
- Camera: *windowscamera*
- Get Office: *officehub*
- Get Skype: *skypeapp*
- Get Started: *getstarted*
- Groove Music: *zunemusic*
- Maps: *windowsmaps*
- Microsoft Solitaire Collection: *solitairecollection*
- Money: *bingfinance*
- Movies & TV: *zunevideo*
- News: *bingnews*
- OneNote: *onenote*
- People: *people*
- Phone Companion: *windowsphone*
- Photos: *photos*
- Store: *windowsstore*
- Sports: *bingsports*
- Voice Recorder: *soundrecorder*
- Weather: *bingweather*
- Xbox: *xboxapp*
Von allem anderen solltest Du tunlichst die Finger lassen!
🤣🤣🤣OK, das relativiert sich:
..da ich des öfteren Win10-Neuinstallationen mache..Mit dieser Nummer habe ich meinen Bildungsauftrag für den Rest des Jahrhunderts abgehakt...
Ich hoffe du weist das zu würdigen....
..sorry für die späte Antwort erstmal! ..ja, ich weiss schon, was ich dann da mache! .)..danke dir erstmal, werde es im lufe der Woche ausprobieren..warum Batch? ..na, da blicke ich noch halbwegs was, bei Powershell bin ich komplett raus..und da Microsoft ja jetzt so schlau ist und ständig alles ändert muss ich damit irgendwie Parat kommen! .) danke auf jeden Fall für die Hilfe...
Was genau verstehst du unter Win10-Apps?
Powershell aus dem Batch heraus?
Da reicht eine Batch mit start installationsroutine aus
Wie sinnvoll das ganze ist sei mal dahingestellt.