【问题标题】:Powershell killing processes - what's wrong with my string?Powershell 杀死进程 - 我的字符串有什么问题?
【发布时间】:2017-02-10 20:26:02
【问题描述】:

我知道工作代码是

Get-Process firefo* | Stop-Process

但我的第一个猜测是

Get-Process | findstr firefox | Stop-Process

没用。

Stop-Process : 输入对象不能绑定到命令的任何参数
要么是因为该命令不接受管道输入,要么是因为输入及其
属性与任何接受管道输入的参数都不匹配。
在行:1 字符:33
+ 获取进程 | findstr 火狐 |停止进程
+~~~~~~~~~~~~
    + CategoryInfo : InvalidArgument: ( 1379 317 ... :PSObject) [Stop-Process], ParameterBindingException
    + FullyQualifiedErrorId : InputObjectNotBound,Microsoft.PowerShell.Commands.StopProcessCommand

我明白那个字符串

 1342 306 1228412 1279864 -1671 ...71,42 35912 火狐

不利于进程终止,但为什么呢?

PS C:\Users\adamg> Get-Process firefo*

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
   1342     306  1228412    1279864 -1671 ...71,42  35912 firefox

上面的工作很好,即使有列标题作为回复。

【问题讨论】:

  • 您必须查看 Get-Help -full 的 cmdlet 并查看输入和输出对象。 dos 命令findstr 仅生成控制台文本作为输出,不能用作 Powershell cmdlet 的输入。

标签: powershell


【解决方案1】:

findstr 是一个产生字符串输出的命令行实用程序。 Get-Process 输出 Process 对象,这是 Stop-Process 期望的输入。它还可以处理进程 ID 列表,但无法解析来自 findstr 的格式化字符串。

在 PowerShell 中,您通常不会使用 findstr。请改用Where-Object 过滤器:

Get-Process | Where-Object { $_.ProcessName -like '*firefox*' } | Stop-Process

【讨论】:

    猜你喜欢
    • 2014-10-22
    • 1970-01-01
    • 2016-03-13
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 2014-07-15
    • 1970-01-01
    相关资源
    最近更新 更多