如何在powershell-scripts中使用参数

时间:2014-04-17 12:13:11

标签: powershell

我怎样才能做到这一点:

我试图将它用作脚本,以便它将我用脚本发送的进程列为参数:

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")}

3 个答案:

答案 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-Outputecho是别名)是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以了解更多信息。