6

使用 Get-Process 时,如何使用字符串作为 -Name?

$program = "MyProgram"
Get-Process $program

代替

Get-Process -MyProgram
4

2 回答 2

8

无论如何,Powershell 都会接受该名称。

Get-Process Firefox

将返回所有正在运行的 Firefox。同样,数组也可以工作:

Get-Process Firefox, iexplore

或者

$Proc = @("Firefox","iexplore")
Get-Process $Proc

显式声明一个数组,然后检查每个正在运行的进程。

当然,如前所述,为了清楚起见,您可以而且应该使用 -Name。但没有什么真正改变。该脚本仍应如下所示:

$Proc = @("Firefox","iexplore")
Get-Process -Name $Proc

还有 Where-Object 方法:

Get-Process | Where-Object {$_.Name -eq "Firefox"}

要对其进行“处理”,只需将对象通过管道传输到脚本块中。

对象:

PS C:\> Get-Process | Where-Object {$_.Name -eq "Firefox"} | fl $_.ID

回报:

Id      : 7516
Handles : 628
CPU     : 1154.1421983
Name    : firefox

获取过程 $Proc | FT ID、姓名

将返回:

    Id Name
    -- ----
    7516 firefox
    12244 iexplore
    12640 iexplore

或者,您最终可以使用前面提到的 ForEach-Object 并遍历它们:

Get-Process $Proc | ForEach-Object {If($_.Path -contains "C:\Program Files*"){Write-host "Bad Directory"} else{ write-host "Safe"}}

如果上面正在运行的 .exe 从 C:\Program Files* 运行,则它会写出“安全”,否则会写出“坏目录”。

于 2013-05-21T22:10:43.253 回答
0

似乎通过普遍的协议,您的问题的答案是为-Name参数提供一个字符串数组,Get-Process如下所示:

Get-Process -Name MyProgramA,MyProgramB

然后,您可以使用管道循环:

Get-Process -Name MyProgramA,MyProgramB | ForEach-Object {$_}

您还可以使用变量:

Get-Process -Name $MyProgramStringArrray
于 2013-05-21T21:31:41.077 回答