如何在powershell脚本中使用参数

如何在powershell脚本中使用参数,powershell,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

我如何才能做到这一点:

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

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

问题是每个scriptblock都是新的,所以请使用temp变量:

for ($i=0; $i -lt $args.length; $i++){
    $outerArg = $args[$i]
    Get-Process | Where-Object {$_.name -eq $outerArg}
}

在这种情况下,您可以将其简化很多
Get Process
支持一个processname数组,因此您只需将整个
$args
-array传递给它即可

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.
测试:

完美@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
键入有关函数的帮助以了解更多信息

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