如何在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
相关产品推荐
相关产品推荐

