我需要获取在特定字符串下的字符串。
$string = 'Wireless LAN adapter Local Area Connection* 13'
ipconfig | ForEach-Object{if($_ -match $string){Select-String -AllMatches 'IPv4 Address' | Out-File C:\Temp\Avi\found.txt}}
例如,我需要在无线局域网适配器本地连接* 13下获取IPv4地址。
Wireless LAN adapter Wi-Fi: Connection-specific DNS Suffix . : Link-local IPv6 Address . . . . . : fe80::34f2:d41c:3889:452e%21 IPv4 Address. . . . . . . . . . . : 172.20.10.2 Subnet Mask . . . . . . . . . . . : 255.255.255.240 Default Gateway . . . . . . . . . : 172.20.10.1 Wireless LAN adapter Local Area Connection* 13: Connection-specific DNS Suffix . : Link-local IPv6 Address . . . . . : fe80::b946:1464:9876:9e03%29 IPv4 Address. . . . . . . . . . . : 192.168.137.1 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . :
答案 0 :(得分:1)
就像Lee所暗示的那样,您确实不想为此使用ipconfig,使用Powershell本机命令 容易得多。例如。要获取接口“ Ethernet 8”和“ Ethernet 10”的IPv4地址,您可以使用以下命令:
$NetworkInterfaces = @(
"Ethernet 10"
"Ethernet 8"
)
foreach ($Interface in $NetworkInterfaces) {
Get-NetIPAddress -InterfaceAlias $Interface -AddressFamily IPv4 |
Select-Object InterfaceAlias,IPAddress
}
在我的情况下返回以下内容:
InterfaceAlias IPAddress
-------------- ---------
Ethernet 10 169.254.157.233
Ethernet 8 169.254.10.64
答案 1 :(得分:0)
如果您被约束并决定将其解析为文本,则可以使用正则表达式来实现。
$a = ipconfig | Select-String 'IPv4.*\s(?<ip>(?:[0-9]{1,3}\.){3}[0-9]{1,3})'
$a.matches[0].groups["ip"].value
10.11.12.13
这使用Select-String的正则表达式匹配将匹配项作为命名组查找,将其另存为matchinfo对象,然后输出到屏幕。可以在here中找到正则表达式的详细信息。
答案 2 :(得分:0)
有一种方法可以将字符串合并为一个,然后使用正则表达式将其拆分。
$s = "Wireless LAN adapter Local Area Connection* 13"
$k = "IPv4 Address"
$part = (ipconfig) -join "`n" -split "(?<=\n)(?=\S)" | Where-Object { $_.StartsWith($s) }
$part.Split("`n") |
Where-Object { $_.TrimStart().StartsWith($k) } |
ForEach-Object { $_.Split(":", 2)[1].Trim() }