我试图从服务器上设置ipconfig获取所有IPv4地址。
感谢Chris分享有关获取IP详细信息的方法的信息/解决方案。
工作解决方案:
Get-WmiObject @params | Select-Object NetConnectionID, `
@{Name='IPAddress'; Expression={
$_.GetRelated('Win32_NetworkAdapterConfiguration') | ForEach-Object {
[IPAddress[]]$_.IPAddress | Where-Object { $_.AddressFamily -eq 'InterNetwork' }
}
}}
答案 0 :(得分:1)
继上面的评论之后,这些示例使用WMI来提取接口名称和IPv4地址。
根据什么是最重要的,有不同的方法可以得出这个。也就是说,选择具有最方便过滤风格的版本。
Win32_NetworkAdapterConfiguration和IPEnabled = TRUE
如果您对所有支持IP的接口感兴趣,则非常有用。
Get-CimInstance Win32_NetworkAdapterConfiguration -Filter "IPEnabled='TRUE'" |
Select-Object @{n='NetConnectionID';e={ ($_ | Get-CimAssociatedInstance -ResultClassName Win32_NetworkAdapter).NetConnectionID }},
@{n='IPAddress';e={ [IPAddress[]]$_.IPAddress | Where-Object AddressFamily -eq 'InterNetwork' }}
Win32_NetworkAdapter和命名界面
如果您需要按名称定位接口并获取IP,也许最好。
Get-CimInstance Win32_NetworkAdapter -Filter "NetConnectionID='Ethernet'" |
Select-Object NetConnectionID,
@{n='IPAddress';e={
[IPAddress[]]($_ | Get-CimAssociatedInstance -ResultClassName Win32_NetworkAdapterConfiguration).IPAddress |
Where-Object AddressFamily -eq 'InterNetwork'
}}
获取-WmiObject可以强>
Get-WmiObject已被取代,但如果你更喜欢它的语法,那么这是第一个例子。
Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled='TRUE'" |
Select-Object @{n='NetConnectionID';e={ $_.GetRelated("Win32_NetworkAdapter") | ForEach-Object { $_.NetConnectionID } }},
@{n='IPAddress';e={ [IPAddress[]]$_.IPAddress | Where-Object { $_.AddressFamily -eq 'InterNetwork' } }}
使用System.Net.NetworkInformation
由于WMI不是唯一的方法,因此只需很少的工作就可以直接访问。
$Name = 'MGT'
[System.Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces() |
Where-Object Name -eq $Name |
Select-Object Name,
@{n='IPAddress';e={ $_.GetIPProperties().UnicastAddresses.Address |
Where-Object AddressFamily -eq 'Internetwork'
}}
Get-NetworkInterface功能(兼容PowerShell 2)
此功能允许您按名称选择网络接口,以便检查IP地址。默认情况下,它返回所有命名接口的信息。
function Get-NetworkInterface {
param(
[String]$Name = '*',
[String]$ComputerName
)
$params = @{
Class = 'Win32_NetworkAdapter'
}
if ($Name.IndexOf('*') -gt -1) {
$Name = $Name -replace '\*', '%'
$params.Add('Filter', "NetConnectionID LIKE '$Name'")
} else {
$params.Add('Filter', "NetConnectionID='$Name'")
}
if ($ComputerName -ne '') {
$params.Add('ComputerName', $ComputerName)
}
Get-WmiObject @params | Select-Object NetConnectionID, `
@{Name='IPAddress'; Expression={
$_.GetRelated('Win32_NetworkAdapterConfiguration') | ForEach-Object {
[IPAddress[]]$_.IPAddress | Where-Object { $_.AddressFamily -eq 'InterNetwork' }
}
}}
}
操作验证
此部分不兼容PowerShell 2。在这种情况下,您可以利用单元测试框架pester来执行配置验证。
它显示了我如何想象您可以使用上述功能来验证IP配置。
Import-Module Pester
Describe 'SomeServer' {
$ComputerName = 'SomeServer'
Context 'Network configuration' {
It 'Should have the management interface set to 10.1.2.3' {
(Get-NetworkInterface -Name 'MGMT' -ComputerName 'SomeServer').IPAddress | Should Be '10.1.2.3'
}
}
}