首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将PowerShell cmdlet输出的属性导入不同cmdlet的输入?

如何将PowerShell cmdlet输出的属性导入不同cmdlet的输入?
EN

Stack Overflow用户
提问于 2017-04-20 20:03:59
回答 3查看 1.6K关注 0票数 0

具体的用例是:

代码语言:javascript
复制
Get-NetTCPConnection -State Listen -LocalPort 6005 |
    Get-Process -PID ???

其中???是第一个cmdlet输出的OwningProcess属性。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-20 20:10:22

-Id参数根据属性名接受管道输入,因此您必须添加另一个包含PID的正确名称的属性。虽然可能的话,我通常只使用直接的路线:

代码语言:javascript
复制
Get-NetTCPConnection | ForEach-Object { Get-Process -Id $_.OwningProcess }
票数 3
EN

Stack Overflow用户

发布于 2017-04-20 20:13:32

我能看到你们有几个选择。首先,也是最简单的,您可以将其输送到ForEach-Object循环,然后运行Get-Process

代码语言:javascript
复制
Get-NetTCPConnection -State Listen -LocalPort 6005 | 
    ForEach-Object {
        Get-Process -PID $_.OwningProcess
    }

或者,如果运行Get-Help Get-Process -PArameter Id,您可以看到Id参数根据属性名接受管道中的值,因此您可以创建该属性,并直接将其输送到Get-Process

代码语言:javascript
复制
Get-NetTCPConnection -State Listen -LocalPort 6005 | 
    Select @{l='Id';e={$_.OwningProcess}} |
    Get-Process
票数 3
EN

Stack Overflow用户

发布于 2017-04-20 20:13:03

有几种方法可以做到。当变量不能由属性匹配时,可以使用类似于ForEach-ObjectJoey's answer循环,或者如果您想做一些疯狂的事情,可以根据需要定制管道对象。

代码语言:javascript
复制
Get-NetTCPConnection -State Listen -LocalPort 6005 |
    Select-Object @{Name="PID";E={$_.OwningProcess}} | 
    Get-Process 

由于Get-Process希望匹配管道变量属性PID,所以我们只使用计算出的属性来满足它的需要。

在这种情况下使用ForEach-Object要简单得多。只是想让你知道还有别的办法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43528884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档