读取 CmdLet 输出

默认情况下,powershell 会将输出返回给调用实体。考虑以下示例,

Get-Process -Name excel   

这将简单地将与名称 excel 匹配的运行进程返回给调用实体。在这种情况下,PowerShell 主机。它打印的东西,像,

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  SI ProcessName                                                                                                                     
-------  ------    -----      ----- -----   ------     --  -- -----------                                                                                                                     
   1037      54    67632      62544   617     5.23   4544   1 EXCEL 

现在,如果将输出分配给变量,它就不会打印任何内容。当然变量保持输出。 (它是一个字符串,对象 - 任何类型的事情)

$allExcel = Get-Process -Name excel

因此,假设你有一个想要通过动态名称分配变量的方案,你可以使用 -OutVariable 参数

Get-Process -Name excel -OutVariable AllRunningExcel

请注意,这里缺少’$’。这两个赋值之间的主要区别在于,它还打印输出,而不是将其分配给变量 AllRunningExcel。你也可以选择将其分配给另一个变量。

$VarOne = Get-Process -Name excel -OutVariable VarTwo

尽管如此,上述情况非常罕见,两个变量$ VarOne 和$ VarTwo 都具有相同的值。

现在考虑一下,

Get-Process -Name EXCEL -OutVariable MSOFFICE
Get-Process -Name WINWORD -OutVariable +MSOFFICE

第一个语句只是获得 excel 进程并将其分配给 MSOFFICE 变量,接下来将运行 ms 字进程并将其追加到现有的 MSOFFICE 值。看起来像这样,

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  SI ProcessName                                                                                                                     
-------  ------    -----      ----- -----   ------     --  -- -----------                                                                                                                     
   1047      54    67720      64448   618     5.70   4544   1 EXCEL                                                                                                                           
   1172      70    50052      81780   584     1.83  14968   1 WINWORD