如何删除变量中的所有数字?

时间:2017-07-17 13:58:14

标签: powershell

我试图通过PowerShell自动设置IP地址,我需要找出我的interfaceindex号码。

我得到的是:

$x = ( Get-NetAdapter |
       Select-Object -Property InterfceName,InterfaceIndex |
       Select-Object -First 1 |
       Select-Object -Property Interfaceindex ) | Out-String

这将输出:

InterfaceIndex
--------------
             3

现在出现问题,当我尝试使用以下方法仅获取数字时:

$x.Trim.( '[^0-9]' )

它仍然离开" InterfaceIndex"和下划线。这导致我的脚本的下一部分出错,因为我只需要数字。

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

这将完成你的工作:

( Get-NetAdapter | Select-Object -Property InterfceName,InterfaceIndex | Select-Object -First 1 | Select-Object -Property Interfaceindex).Interfaceindex

实际上你不需要两次选择属性:这样做:

( Get-NetAdapter |Select-Object -First 1| Select-Object -Property InterfceName,InterfaceIndex).Interfaceindex

答案 1 :(得分:2)

(Get-NetAdapter | select -f 1).Interfaceindex

默认选择属性没有意义。如果你想保持对象做:

(Get-NetAdapter | select -f 1 -ov 'variablename').Interfaceindex

其中f = first,ov = outvariable

$variablename.Interfaceindex

当您输出到屏幕时,您不需要Out-String因为强制转换为字符串。如果你尝试使用这些数据,那么powershell就足够聪明,可以在需要时将它从int转换为字符串,反之亦然。

答案 2 :(得分:2)

回答您的直接问题:您可以删除变量中的所有数字,并删除不是数字(或更确切地说是数字)的所有内容:

$x = $x -replace '\D'

然而,更好的方法是首先不添加你想删除的内容:

$x = Get-NetAdapter | Select-Object -First 1 -Expand InterfaceIndex

PowerShell cmdlet通常会将对象作为输出生成,因此您不必将这些对象修改为字符串形式并切除多余的材料,而只需扩展您感兴趣的特定属性的值。