我怎样才能做到这一点:
我试图将它用作脚本,以便它将我用脚本发送的进程列为参数:
for ($i=0; $i -lt $args.length; $i++)
echo (Get-Process | Where-Object {$_.name -eq $($args[$i])})
}
但是当我运行它时,它不会列出任何内容:
./list_process notepad svchost
我手动操作时效果很好:
Get-Process | Where-Object {$_.name -eq "notepad")}
答案 0 :(得分:2)
在这种情况下,您可以将其简化为ALOT。 Get-Process
支持一系列进程名,因此您可以简单地将整个$args
- 数组传递给它。
PS > Get-Help Get-Process -Parameter name
-Name <String[]>
Specifies one or more processes by process name.
You can type multiple process names (separated by commas) and use wildcard characters.
The parameter name ("Name") is optional.
此外,echo
是不必要的,因为Write-Output
(echo
是别名)是PowerShell的默认输出。
list_process.ps1
Get-Process $args
测试:
PS > ./list_process notepad svchost
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
77 7 1228 5856 88 0,09 6728 notepad
862 31 32164 33268 101 316 svchost
904 31 40508 42412 121 504 svchost
4463 62 92328 97088 417 512 svchost
519 16 9324 12768 49 808 svchost
827 46 35964 42348 156 832 svchost
601 19 11740 14540 57 840 svchost
答案 1 :(得分:0)
问题是每个scriptblock都有新的$args
,所以使用临时变量:
for ($i=0; $i -lt $args.length; $i++){
$outerArg = $args[$i]
Get-Process | Where-Object {$_.name -eq $outerArg}
}
答案 2 :(得分:0)
完美@Frode。
您还可以构建一个高级功能来完成更多工作:
Function Get-SelectiveProcesses{
[CmdletBinding()]
Param
(
[Parameter(Mandatory = $true)]
[string[]] $process
)
Get-Process $process
#Do other Things
}
然后在脚本中调用该函数,如
PS C:\> Get-SelectiveProcesses notepad,svchost
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
85 6 3672 7580 75 1.23 5260 notepad
711 51 19148 7588 123 568 svchost
404 10 3492 2760 56 844 svchost
373 11 3540 2896 41 1220 svchost
514 52 23436 7016 100 1324 svchost
631 31 85248 74368 200 1384 svchost
1458 109 31540 19140 180 1428 svchost
322 31 8388 3976 64 1628 svchost
372 30 32908 12736 171 1688 svchost
336 54 13672 4768 77 2096 svchost
126 47 6916 2344 61 2272 svchost
131 8 3228 532 55 3972 svchost
160 23 7456 1880 63 4032 svchost
输入help about_functions_advanced以了解更多信息。