如何将IPV4地址与IPV6和IPV4一起放入powershell变量?

如何将IPV4地址与IPV6和IPV4一起放入powershell变量?,powershell,Powershell,我有一个简单的powershell脚本,可以通过MAC地址列表从SCCM服务器捕获IP地址,如下所示: $ServerName = Get-Content "C:\suport\macs.txt" foreach ($Server in $ServerName) { $maq = (Get-WmiObject -Namespace "root/SMS/Site_G01" -ComputerName SCCMSERVERr -class

我有一个简单的powershell脚本,可以通过MAC地址列表从SCCM服务器捕获IP地址,如下所示:

$ServerName = Get-Content "C:\suport\macs.txt"  
  
 foreach ($Server in $ServerName) {  

 $maq = (Get-WmiObject -Namespace "root/SMS/Site_G01" -ComputerName SCCMSERVERr -class SMS_R_System -filter "MACAddresses like '$Server'").IPAddresses
 
 Write-Output $maq

 }
...
172.10.20.155
172.10.15.158
...
但是,输出是IPV4+IPV6地址…:

...
172.10.20.155
fe76::4112:5ecd:bfe2:10ff
172.10.15.158
fe76::e098:d709:5cce:d09c
...
我只需要IPV4输出,如下所示:

$ServerName = Get-Content "C:\suport\macs.txt"  
  
 foreach ($Server in $ServerName) {  

 $maq = (Get-WmiObject -Namespace "root/SMS/Site_G01" -ComputerName SCCMSERVERr -class SMS_R_System -filter "MACAddresses like '$Server'").IPAddresses
 
 Write-Output $maq

 }
...
172.10.20.155
172.10.15.158
...

你能帮我吗?非常感谢!:)

您可以简单地通过冒号过滤掉IPv6

$ServerName = Get-Content "C:\suport\macs.txt"  

 foreach ($Server in $ServerName) {  

     $maq = (Get-WmiObject -Namespace "root/SMS/Site_G01" -ComputerName SCCMSERVERr -class SMS_R_System -filter "MACAddresses like '$Server'").IPAddresses | where {$_ -notmatch ':'}

     Write-Output $maq

 }

您只需解析
SMS\u R\u System.ipAddresss
数组中的单个字符串,并仅打印出类似IPv4地址的字符串。或者,您可以忽略
SMS\u R\u系统.ipaddress
数组中的任何字符串,这些字符串也位于
SMS\u R\u系统.ipv6address
数组中。。。[1] 测试
并排除这些地址。[2] 使用
[ipaddress]
键入加速器将字符串转换为ip地址对象,然后测试
.AddressFamily
属性。[3] 如果项目作为
ipaddress
对象而不是字符串返回,您还可以测试地址系列。问题是:当我将一个MAC地址转换为IP时,每个MAC报告1个IPv4地址和1个IPv6地址。。。例如:$server=AA:BB:CC:DD:EE:FF$maq=172.10.20.155 fe76::4112:5ecd:bfe2:10ff我只需要capute IPV4地址来执行一些远程命令…顺便说一下:CIM cmdlet(例如,
Get-CimInstance
)取代了PowerShell v3(2012年9月发布)中的WMI cmdlet(例如,
Get-WmiObject
)。因此,应该避免使用WMI cmdlet,尤其是因为PowerShell[Core](版本6及更高版本)(将来所有的工作都将在这里进行)甚至不再具有它们。有关详细信息,请参阅。