Unbekannte Anzahl von Prozessinstanzen per Kommandozeile abschießen…

cumulonimbus8

Fleet Admiral
Registriert
Apr. 2012
Beiträge
18.920
…um dann diesen Prozess einmalig wieder sauber starten zu können.


Moin!

Bei mir spukt (andere Therads, aber vergessen wir die) die Ansteuerung des WLANs. Um eine Rechts-unten-reinrutsch-Meldung, die nicht als Meldefläche sondern nur ihr linker Rand existiert, loszuwerden muss ich alle Explorerinstanzen loswerden - um ihn neu zu starten.

Da ich nie weiß wie viele das sind (u.U. mehr als in der Taskleiste sichtbar sind) muss ich das Taskmanager machen - selbst sehend wo und wie viel ich abschießen muss. Das nervt (A) weil ich immer in OK geben muss [verfl. MS - im jedem dedizierten Tool will ich das abschalten können!] und (B)…

→ schieße ich eine oben ab (Bei Apps, oberhalb Hintergrundprozesse) passiert es auf beiden meiner Rechner, dass ich plötzlich im »unteren Drittel« lande, bei den Diensthosts - aber weder der oberste im Fenster noch der unterste sind konsequent der selbe oder gäben Hinweise auf diese Meldung

…macht man mir das unnötig schwer.
Also will ich per Batch alle (genau alle, und nur alle) Explorerinstanzen (mir fallen da auch spontan Crome/Opera ein…) abschießen. Es müssen alle sein (›bis die Taskleiste leer ist‹) damit ich einen neuen Explorer starten kann.

Wie erfasse ich alle Instanzen? Id est: dass immer noch eine Instanz läuft?
Theoretisch mit einer Schleife die auf Vorhandensein einer Explorerinstanz prüft. Ich habe aber auch bei SysInternals noch nichts gefunden, das mirt genau diese Auskunft gibt. Auf Verdacht 100 Abschüsse sind unter meiner Würde.

CN8
 
Wenn du Powershell zur Verfügung hast, geht das simpel:
Get-Process iexplo*| foreach {$_.kill()}
Hier wird jeder Prozess beendet, dessen Name mit iexplo beginnt. Den Prozessnamen kannst du entsprechend anpassen.
 
Wieso so umständlich :)

Code:
taskkill /f /im explorer*

.. oder opera, oder chrome, oder vivaldi, oder ...

für weitere Optionen:
Code:
taskkill /?
 
Und wie geht PowerShell per Skript?

«/IM Bestimmt den Abbildnamen des Prozesses, der beendet werden soll. Der Platzhalter * kann zum Angeben aller Aufgaben bzw. Abbildnamen verwendet werden.»
Was immer ein Abbildname und dann fürs * Aufgaben und Abbildnamen sein sollen…

Bei all meinen Suchen bin ich nie über TASKKILL gestolpert, wenigstens nicht zum »Rudelabschuss« (lustigerweise las ich den Namen vor ein paar Tagen). Mit dieser MS-Hilfe wenigstens wäre ich nie auf TASKKILL gekommen, nie. Diese ›Übersetzungen‹ liegen zu oft im Bereich von unverschämt bis dümmlich.

Wie auch immer, ein Dankeschön - TASKKILL kann das, also kann ich mir eine motorisierte Reißleine bauen.

CN8
 
cumulonimbus8 schrieb:
Und wie geht PowerShell per Skript?
Auch wenn du es schon gelöst hast. Falls nochmal jemand danach sucht:
- Textdatei erstellen
- Befehl reinschreiben
- Die Datei als MeinTollesSkript.ps1 speichern
 
:mad:

Die Syntax interessiert die Leute, welche Befehle aus diesem obskuren Vorrat an kryptischen Begriffen und ladbaren PlugIns muss man bemühen um zum Ziel zu kommen? PowerShell ist eine schlimmere Fremdsprache als es PHP oder JS für mich sein können.

CN8
 
cumulonimbus8 schrieb:
Und wie geht PowerShell per Skript?

In Powershell gibt es ja für die meistverwendetsten Befehle Aliase:
Code:
# Einen Prozess killen per Alias
kill -f -n 'explorer*'

# Einen Prozess killen ausgeschrieben
Stop-Process -Force -Name 'explorer*'

# Mehrere Prozesse killen per Alias
kill -f -n 'explorer*','chrome*','opera*'

# oder sauber mit Variable
$Process = 'explorer*','chrome*','opera*'
kill -f -n $Process

Bei PS-Skripten hat man standardmäßig nur zwei Probleme.
1. Skripte (also Dateien mit Endung .ps1) lassen sich standardmäßig nicht ausführen, solange die Ausführungsrichtlinie am PC auf User-Ebene auf Restricted steht.
Bei der PowerShell Ausführungsrichtlinie hat die User-Einstellung mehr Gewicht als die Coumputer-Einstellung (deshalb -Scope CurrentUser).

Kann man aber ändern:
Code:
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser

# oder

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser

Wenn man aber auf User-Ebene noch nichts eingestellt hat, reicht es auch auf Computer-Ebene (also ohne -Scope CurrentUser)

2. PS-Skripte lassen sich nicht per Doppelklick starten.
Man muss eine Batch verwenden, die das PS-Skript startet.
Code:
powershell -File <Pfad zum PS-Skript>
Man hat natürlich noch einige Parameter um das besser zu steuern.
Siehe powershell /?

Aber alles in Allem ist PowerShell der Batch meilenweit überlegen.
Alles ist objektorientiert.
PowerShell basiert auf dem .NET Framework von Mircosoft und ähnelt C#.
Die vorhandenen CMDlets die Windows bereits liefert und auch die, die man nachinstallieren kann bzw. automatisch bei Server-Komponenten wie z. B. Exchange, SQL, etc installiert werden, sind ja nur ein Teil des Möglichen.
Man hat die komplette Freiheit auf das .NET Framework zuzugreifen. Und zwar ohne viel Kenntnisse von Programmieren zu haben mit z. B. Visual Studio.
 
Zuletzt bearbeitet:
All das nützt nichts wenn man nicht weiß was .NET an Befehlsvorräten hat und wie deren Syntax aussieht.
Und PowerShell hat einfach zu viel um sich das zusätzlich noch anzutun.

Das vermutlich Irre am Ende ist, dass das zu Grunde liegende Problem seit 1703 nicht mehr nervt…

CN8
 
cumulonimbus8 schrieb:
All das nützt nichts wenn man nicht weiß was .NET an Befehlsvorräten hat und wie deren Syntax aussieht.

Naja. Das Problem ist aber nun wirklich nicht dem .NET Framework zuzurechnen.
Die Befehlsvorräte sind bei Anfängern bzw. Leuten, die sich mit etwas Neuem beschäftigen, doch immer gleich #Null.

Dafür gibt es Google!
Und glaub mir, sobald du den PowerShell-Ansatz verstanden hast, dann ist einfach alles nur noch Easy.
Ich sprech da aus Erfahrung. War auch jahrelang Batch'er. Wollte dann aber einfach mal PowerShell wegen den unendlichen Möglichkeiten lernen.
Anfangs immer ein riesen Fragezeichen aufm Kopf gehabt. Aber dann ..... Boom!
 
Zurück
Oben