Verknüpfung um Prozess zu killen möglich?

EmmaL

Lieutenant
Registriert
Apr. 2020
Beiträge
771
Hey, ich würde gerne mit einer Verknüpfung einen bestimmten Prozess (*.exe) beenden, ohne den TaskManager öffnen zu müssen. Ist das möglich und wie würde die Verknüpfung aussehen? Danke :)
 
der Befehl taskkill in einer Batch-Datei wäre hier hilfreich, zB TASKKILL /IM notepad.exe, um Notepad zu beenden
 
  • Gefällt mir
Reaktionen: Murray B., GrayWolf, F1database und 6 andere
Hi...

Ist das immer der gleiche Prozess oder was soll der Sinn dahinter sein?

Weil...ob man nun für unterschiedlich zu schließende Programme/Dienste den Task-Manager öffnet oder die Kommandokonsole/PowerShell macht welchen Unterschied? 🤔​
 
Dank an @3PiOh & @xexex für den Input.

Die M$-Dokumentation und Google habe mich leider noch nicht ganz ans Ziel gebracht. Vielleicht kann mir jemand helfen.

Ziel:
Ich möchte, egal welche Konstellation vorliegt, sicherstellen dass der oder die Prozesse beendet werden.

Frage a)
Wie kann ich:
  • alles in einer Datei verpackt
  • die PowerShell-Verknüpfung als Admin ausführen
  • den Prozess meinem Benutzer zuordnen
  • und anschließend alle Prozesse mit z.B. dem Name "Bill-Gates" beenden?

Frage b)
  • Gibt es einen identischen PowerShell-Parameter zu "Prozessstruktur beenden" (im Task-Manager) der alle untergeordneten Prozesse beendet?
 
Zuletzt bearbeitet:
Du kannst über die Aufgabenplanung das Skript als Task ohne Bedingung anlegen und als einen anderen User aufrufen (also einem Admin Benutzer). Das ist sozusagen der erste Baustein. Dann rufst du über eine Verknüpfung oder .bat-Datei wiederum den Task-Scheduler auf der wiederum den Task startet. Siehe: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/schtasks-run

Code:
schtasks /run /tn Security Script

Wobei der Task hier "Security Script" heißt.
 
  • Gefällt mir
Reaktionen: Murray B.
Alternativ noch zu Stop-Process -Name von @xexex der alle Prozesse für den aktuellen User stoppt:

Mit dem folgenden Code müsste die ganze Prozessstruktur (hier für notepad.exe) für einen bestimmten User (hier xxx...bin mir nicht sicher, was du mit dem Punkt meinst: den Task meinem Benutzer zuordnen) gestoppt werden; das Skript einfach unter: yyy.ps1 speichern.

Um das Skript als Admin auszuführen zu können, kann man das PS-Skript mit erhöhten Rechten aus einer Batch-Datei aufrufen:

Code:
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""yyy.ps1""' -Verb RunAs}"

(ich habe das PS-Skript unter SO gefunden und um eine Userabfrage erweitert...bin mit gerade nicht sicher, ob ich Links zu anderen Foren einfach so einfügen kann)

Code:
param(
    [string]$procName    = 'notepad',
    [string]$userName    = $env:UserName,
    [string]$user        = 'xxx'
)

function Kill-Tree {
    Param([int]$ppid)
    echo "Kill-Tree: killing $ppid ..."
    Get-CimInstance Win32_Process | Where-Object { $_.ParentProcessId -eq $ppid } | ForEach-Object { Kill-Tree $_.ProcessId }
    Stop-Process -Id $ppid
}

[int]$mypid = 0
[string]$myProcessToKill = (Get-Process -Name $procName -ErrorAction 0)

if ($myProcessToKill -eq "") {
    echo "$procName is not running."
} else {
    $mypid = (Get-Process -Name $procName -ErrorAction 0).Id
    echo "The $procName PID is: $mypid"
    if ($mypid -gt 1 -and $userName -eq $user) {
        echo "Killing $procName and its children..."
        Kill-Tree $mypid
    }
    else {
        echo "process found with PID $mypid but user name ($userName) is different."
    }
}
echo "Done!"
 
Vielleicht bin ich ja doof, aber bis eine PowerShell offen/oben ist hat altbackenes Batch in CMD das längst abgefrühstückt.

Weiterhin muss das wohl auf direkte Benutzeranforderung laufen, «einen Knopf drücken», was will ich da mit der Aufgabenplanung?

Und zuletzt - eine Verknüpfung zu TASKKILL mit den nötigen Parametern reicht völlig («Knopf drücken»).

CN8
 
  • Gefällt mir
Reaktionen: User007 und onegasee59
@3PiOh:
3PiOh schrieb:
[...] ob ich Links zu anderen Foren einfach so einfügen kann
Klar, warum nicht? Ansonsten wird wohl schon ein Mod/Admin tätig.

Btw.:
Tolles Script, aber wofür braucht man sowas im 08/15-Heimgebrauch?
Ich versteh' ja noch das aus Bequemlichkeit und Faulheit heraus motivierte Ansinnen zu einer anklickbaren Batch zum Beenden des immer gleichen Programms/Dienstes, aber dann? 🤷‍♂️​
 
User007 schrieb:
@3PiOh:

Klar, warum nicht? Ansonsten wird wohl schon ein Mod/Admin tätig.

Btw.:
Tolles Script, aber wofür braucht man sowas im 08/15-Heimgebrauch?
Ich versteh' ja noch das aus Bequemlichkeit und Faulheit heraus motivierte Ansinnen zu einer anklickbaren Batch zum Beenden des immer gleichen Programms/Dienstes, aber dann? 🤷‍♂️​
Machbarkeit und Kontrolle:) - normalerweise würde ich aber für sowas auch einen einfachen Batch Befehl nehmen wie ganz oben geschrieben (TASKKILL).

Manche Foren reagieren recht allergisch auf Links in andere Foren - ich war einfach zu faul, um nachzuschauen, was die Forenregeln dazu sagen.
 
Batch is a Bitch und Taskkill ist mit Vorsicht zu genießen.

Ich stelle hier mal ein weiteres Beispiel in Form eines PS-Codes, mit dem man den Prozess "excel" beendet, rein.
Den Code gibt man in einen Texteditor und speichert die Datei dann als z.B. "StopProcess.ps1", am besten direkt auf dem Desktop.

PowerShell:
$ShowWindowAsync = '[DllImport("user32.dll")]public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);'
Add-Type -Name WPS -Member $ShowWindowAsync -Namespace CNS -ErrorAction SilentlyContinue
[Void][CNS.WPS]::ShowWindowAsync(([System.Diagnostics.Process]::GetCurrentProcess() | Get-Process).MainWindowHandle,0)

$CurrentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
If($CurrentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator))
{
    Get-Process | Where-Object -FilterScript {$_.ProcessName -Eq "excel"} | Stop-Process -PassThru
}
Else
{
    $ElevatedProcess = New-Object System.Diagnostics.ProcessStartInfo "PowerShell";
    $ElevatedProcess.Arguments = "& '" + $Script:MyInvocation.MyCommand.Path + "'"
    $ElevatedProcess.Verb = "runas"
    [System.Diagnostics.Process]::Start($ElevatedProcess)
    Exit
}

Nach "$_.ProcessName" muss man dann eben den gewünschten Namen des Prozesses, den man beenden möchte, anpassen.

Die ersten drei Zeilen bewirken das Unterdrücken des Konsolenfensters.
 
  • Gefällt mir
Reaktionen: Fusionator und 3PiOh
NotNerdNotDau schrieb:
Die ersten drei Zeilen bewirken das Unterdrücken des Konsolenfensters.
Allein das so ein… Quark… nötig fällt diskreditiert diesen übermotorisierten Bolzen PS immer mehr.
Und - auch dein PS-Skript kann nicht mehr als Excel zu kennen, ebenso wie jeder andere Task-Killer den Task, genau den Task, kennen muss.

CN8
 
Mir will sich da auch nicht so recht der Sinn erschließen. Dswg. ja auch meine Nachfrage zum (immer gleichen?) zu beendenden Prozess - schade, dass da vom TE nix zu kommt.​
 
cumulonimbus8 schrieb:
Allein das so ein… Quark… nötig fällt diskreditiert diesen übermotorisierten Bolzen PS immer mehr.
Übermotorisiert? Wo hast du das denn ausgegraben?
Deine Sätze sind nach wie vor spektakulär.

Wenn man sich das Konsolenfenster anzeigen lassen möchte, dann löscht man einfach diese ersten drei Zeilen.
Wo soll da denn das Problem sein?

cumulonimbus8 schrieb:
Und - auch dein PS-Skript kann nicht mehr als Excel zu kennen
Mehr soll es auch gar nicht können.

Man sollte sich tunlichst von dem altbackenen CMD/BAT verabschieden und PowerShell für solche Zwecke nutzen.
Darauf wird hier, aber nicht nur hier, bei jeder Gelegenheit hingewiesen -und das vollkommen zurecht.

User007 schrieb:
Dswg. ja auch meine Nachfrage zum (immer gleichen?) zu beendenden Prozess
Wenn ich es richtig verstanden habe, soll es wohl immer der Prozess einer bestimmten Anwendung sein.
Nur dann ergäbe das einen Sinn.
Denn jedes mal in dem Skript manuell den Namen des Prozesses zu ändern, wäre wohl zu viel Aufwand. Da kann man auch gleich über den Task-Manager gehen.
 
  • Gefällt mir
Reaktionen: Fusionator
NotNerdNotDau schrieb:
Denn jedes mal in dem Skript manuell den Namen des Prozesses zu ändern, wäre wohl zu viel Aufwand. Da kann man auch gleich über den Task-Manager gehen.
Eben - siehe meinen Beitrag in #5.
NotNerdNotDau schrieb:
Man sollte sich tunlichst von dem altbackenen CMD/BAT verabschieden und PowerShell für solche Zwecke nutzen.
Darauf wird hier, aber nicht nur hier, bei jeder Gelegenheit hingewiesen -und das vollkommen zurecht.
Sorry, aber das seh' ich überhaupt nicht so - solang' das Ziel erfolgreich erreicht wird, ist's doch egal, womit!
Der (angeblich überall immer) postulierte Gedanke die neuere Befehlsumgebung, in diesem Fall die PowerShell, könnte da was "besser", als die zwar alte dafür aber durchaus bewährte und nach wie vor zuverlässig arbeitende Kommandozeile, stimmt so pauschal einfach nicht.
Sie mag sicherlich speziell für modernere Anwendungsszenarien ihre Vorteile haben, aber dann handelt's sich auch meistens um komplexere Nutzungsfälle und nicht so "Befehlseinzeiler".
Ehrlich, ich kasper doch nicht für so was mit 'nem mehrzeiligen PS-Script rum, wenn mir das gleiche Ergebnis genauso zuverlässig auch auf althergebrachte Weise erledigt wird. 🤷‍♂️​
 
Na ja, PowerShell ist ja im Grunde wie CMD, nur eben ausgereifter, komplexer, flexibler und vor allem sicherer.
Wir befinden uns ja schließlich nicht mehr im Zeitalter von XP.

User007 schrieb:
Auch das ist mit PS möglich.
Das würde in dem hier thematisierten Vorhaben reichen:

PowerShell:
Get-Process | Where-Object -FilterScript {$_.ProcessName -Eq "excel"} | Stop-Process -PassThru

Das Problem hierbei könnten nur die vorgegebenen Sicherheitseinstellungen der sog. "Ausführungsrichtlinien" sein. Was aber einer der großen Vorteile gegenüber CMD darstellt.

Wenn man dahingehend die entsprechenden Einstellungen anpasst, kann man PS-Skripte sogar mit doppeltem Mausklick und mit den für solche Vorhaben erforderlichen erweiterten Rechten ausführen.
 
Zuletzt bearbeitet von einem Moderator:
NotNerdNotDau schrieb:
Was aber einer der großen Vorteile gegenüber CMD darstellt.
[...]
[...] kann man PS-Skripte sogar mit doppeltem Mausklick und mit den für solche Vorhaben erforderlichen erweiterten Rechten ausführen.
Aber genau das mein' ich doch - wo im 08/15-Heimgebrauch werden denn für solche Einzeiler die komplexeren "Vorteile" bzw. großartig erweiterte Rechte benötigt?
Ich seh' da die PS auch einfach "übermotorisiert". Sie hat sicherlich ihre Daseinsberechtigung, aber warum soll man nicht bewährt Bekanntes mit dem man umgehen kann nutzen, anstatt sich mühselig in neue Methoden einarbeiten zu müssen?
Zumal die letztlich in den Grundfunktionalitäten eh den gleichen Befehlsinterpreter nutzen - vllt. halt doch mal wieder "More Practice than Design!".​
 
Zurück
Oben