【问题标题】:Want to use the value returned by Select-Object in PowerShell想在 PowerShell 中使用 Select-Object 返回的值
【发布时间】:2021-05-15 12:18:01
【问题描述】:

我必须添加一个路由表,为此我需要索引接口 ID。我正在使用下面的脚本来查找索引接口并添加路由表。但是,我得到以下错误,因为路由表需要整数值“80”,但是这个脚本给出了输入“@{ifIndex=80}”。 请告知如何解决这个问题?

脚本: PS C:\Users\Administrator> route -p add 40.127.64.19/32 0.0.0.0 IF (Get-NetIPInterface | where-object {$_.interfaceAlias -like "Test VPN*"} | select-object ifindex)

错误: C:\windows\system32\ROUTE.EXE: 接口索引错误@{ifIndex=80}

【问题讨论】:

    标签: powershell-4.0 powershell-5.0


    【解决方案1】:

    试试下面的方法吧:

    Get-NetIPInterface -AddressFamily IPv4 |
      Where-Object {$_.interfaceAlias -like "Test VPN*"} |
        Select-Object -ExpandProperty ifIndex |
          ForEach-Object {
            route.exe -p add 40.127.64.19/32 0.0.0.0 IF $_
          }
    

    说明

    使用 Get-NetIPInterface -AddressFamily IPv4:如果没有 IPv4 参数,您可以按如下方式获得两者:

    Get-NetIPInterface -AddressFamily IPv4 |
      Where-Object {$_.interfaceAlias -like "Test VPN*"} |
        Select-Object ifIndex, InterfaceAlias, AddressFamily
    
    ifIndex InterfaceAlias AddressFamily
    ------- -------------- -------------
         10 Test VPN                IPv6
         10 Test VPN                IPv4
    

    使用Select-Object -ExpandProperty ifIndex指定要选择的属性,并指示应尝试expand that property

    使用 ForEach-ObjectWhere-Object 管道可能导致三种情况:

    • 恰好一个对象(所需),或
    • 没有对象(或$null),或
    • 由于-like "Test VPN*" 中的通配符导致更多对象(数组)

    列出的最后两个会在您的方法中导致route.exe 语法错误(即使使用-ExpandProperty)。


    顺便说一句,总是在 PowerShell 中使用 .exe 扩展名。例如,比较where notepadwhere.exe notepad(或Get-Command whereGet-Command where.exe)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-07
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      相关资源
      最近更新 更多