2017-07-17 3 views
0

ich folgende Powershell-Skript erstellt habe, ein Verfahren zu töten:Get-WmiObject: Ein Positionsparameter nicht gefunden werden kann, das Argument akzeptiert

$oProcs = Get-WmiObject Win32_Process -filter "commandline like '%G:\\TCAFiles\\Users\\Admin\\2155\\Unturned.exe%'";foreach ($oProc in $oProcs){Stop-Process $oProc.Handle} 

Das obige Skript funktioniert gut, aber wenn ich versuche zu machen Das Skript starten von Command Prompt schlägt fehl.

powershell -Mta -NoProfile -Command "$oProcs = Get-WmiObject Win32_Process -filter "commandline like '%G:\TCAFiles\Users\Admin\2155\Unturned.exe%'";foreach ($oProc in $oProcs){Stop-Process $oProc.Handle}" 

Dies führt zu dem folgenden Fehler:

 
Get-WmiObject : A positional parameter cannot be found that accepts argument 
'%G:\TCAFiles\Users\Admin\2155\Unturned.ex e%'. 
At line:1 char:11 
+ $oProcs = Get-WmiObject Win32_Process -filter commandline like '%G:\T ... 
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidArgument: (:) [Get-WmiObject], ParameterBindingException 
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.GetWmiObjectCommand 

Ich bin mir nicht sicher, was dieser Fehler bedeutet oder wie es zu lösen.

+2

Ihr Problem ist mit unescaped doppelte Anführungszeichen. Aber es wäre einfacher Get-Process | zu verwenden Where-Objekt {$ _. Pfad -eq 'G: \ TCAFiles \ Users \ Admin \ \ 2155 \ Unturned.exe'} | Stop-Process' oder nur 'Get-Process Unturned | Stop-Process' – BenH

+2

Sie müssen es nicht von 'cmd.exe' ausführen. Führen Sie sie stattdessen über die PowerShell-Eingabeaufforderung aus. –

Antwort

0

Sie müssen alle doppelten Anführungszeichen innerhalb des Powershell-Codes, den Sie als Argument übergeben, unterdrücken. Im Moment endet Ihr Befehlsargument nach "-filter".

Wenn Sie mit dieser von cmd Sie die doppelten Anführungszeichen mit einem Backslash zu entkommen:

powershell -Mta -NoProfile -Command "$oProcs = Get-WmiObject Win32_Process -filter \"commandline like '%G:\TCAFiles\Users\Admin\2155\Unturned.exe%'\";foreach ($oProc in $oProcs){Stop-Process $oProc.Handle}" 

Oder wenn Sie dies in Powershell ausgeführt wird, können Sie sie entkommen, indem sie mit einem Graviszeichen oder einem anderen Doppel Zitat vorangestellt :

powershell -Mta -NoProfile -Command "$oProcs = Get-WmiObject Win32_Process -filter ""commandline like '%G:\TCAFiles\Users\Admin\2155\Unturned.exe%'"";foreach ($oProc in $oProcs){Stop-Process $oProc.Handle}" 
Verwandte Themen