per Batch Win10-Apps deinstallieren?


12.03.2020, 10:19

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....

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
JDoeGF 
Fragesteller
 16.03.2020, 20:03

..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...

0

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.