Powershell Get-Process字符串作为名称

时间:2013-05-21 20:24:12

标签: powershell

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

$program = "MyProgram"
Get-Process $program

而不是

Get-Process -MyProgram

2 个答案:

答案 0 :(得分:4)

无论如何,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

get-process $ 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 *运行,那么它会写出“Safe”,否则会写入“Bad Directory”。

答案 1 :(得分:0)

通过热门协议看来,您的问题的答案是为-Name的{​​{1}}参数提供字符串数组,如下所示:

Get-Process

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

Get-Process -Name MyProgramA,MyProgramB

您还可以使用变量:

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