我试图从服务器上的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' }
}
}}发布于 2016-08-10 21:31:15
除了上面的注释之外,这些示例使用WMI提取接口名称和IPv4地址。
根据最重要的是什么,有不同的方法可以得到这一点。也就是说,选择最方便的过滤风格的版本。
Win32_NetworkAdapterConfiguration和IPEnabled =真
如果您对所有启用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'
}}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不兼容。这就是如何利用单元测试框架(在本例中为纠缠器 )来执行配置验证。
它展示了我的设想,您可以使用上面的函数来验证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'
}
}
}https://stackoverflow.com/questions/38883433
复制相似问题