You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中基于不同来源的同名属性编写查询语句?

问题:PowerShell中通过同名属性关联获取网络接口IP地址

我需要编写PowerShell脚本,实现类似SQL语句Select UserID from Users,AD where Users.UserID = AD.UserID的关联逻辑,利用两个不同来源的同名属性进行匹配。

已通过以下代码获取所有处于连接状态的IPv4网络接口名称:

$allitf = Get-NetIPInterface -AddressFamily IPv4 -ConnectionState "Connected" | Select-Object -Property InterfaceAlias

此时$allitf包含多个带有InterfaceAlias属性的对象。

尝试用以下代码获取每个接口对应的IP地址,但无结果返回:

foreach ($itf in $allitf) { Get-NetIPAddress | Where-Object { $_.InterfaceAlias -eq $itf } }

也试过这种写法,同样无效:

foreach ($itf in $allitf) { Get-NetIPAddress | Where-Object { $_.InterfaceAlias -eq $_.InterfaceAlias } }

注:原本想让第一个$_.InterfaceAlias代表Get-NetIPAddress结果的属性,第二个对应$itf的属性,但写法错误。

改用ForEach-Object也遇到同样问题:

$allitf | ForEAch-Object { Get-NetIPAddress | Where-Object { $_.InterfaceAlias -eq $_.InterfaceAlias } }

请问如何编写正确的Where子句?


解决方案

  • 方案1(Santiago Squarzon建议):
    该写法可直接实现需求,但如果你的完整代码已有多个管道不想新增,可以选择其他方案:
    Get-NetIPInterface -AddressFamily IPv4 -ConnectionState "Connected" | Get-NetIPAddress
    
  • 方案2(zett42建议):
    通过Select-Object -ExpandProperty直接提取接口名称的字符串值,再进行匹配,即可得到正确结果:
    $allitf = Get-NetIPInterface -AddressFamily IPv4 -ConnectionState "Connected" | Select-Object -ExpandProperty InterfaceAlias
    
    foreach ($itf in $allitf) { Get-NetIPAddress | Where-Object { $_.InterfaceAlias -eq $itf } }
    

内容的提问来源于stack exchange,提问作者Philippe Ferrucci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 06:43:19