windows 通过PowerShell脚本获取Mac地址和IP

0kjbasz6  于 2023-04-22  发布在  Windows
关注(0)|答案(3)|浏览(584)

我需要得到几台电脑的MAC地址以及那里的IP。
我在PowerShell上遇到了这个命令来获取MAC地址

Get-NetAdapter -Name "*Ethernet*","*Wi-Fi*"| Select Name,MacAddress

我不得不使用不同的Cmdlet来获取IP

Get-NetIPAddress -InterfaceAlias "*Ethernet*","*Wi-Fi*" -AddressFamily IPv4 | Select InterfaceAlias, IPAddress

当我试图在example.ps1等PowerShell文件中运行它们时,问题出现了。

Get-NetIPAddress -InterfaceAlias "*Ethernet*","*Wi-Fi*" -AddressFamily IPv4 | Select InterfaceAlias, IPAddress;
Get-NetAdapter -Name "*Ethernet*","*Wi-Fi*"| Select Name,MacAddress;
pause;

结果如下所示,并不是两个cmdlet都运行。总是第一个运行,而且总是在暂停之后运行。这让我抓狂

Press Enter to continue...: 

InterfaceAlias IPAddress     
-------------- ---------     
Ethernet       255.255.255.255
Wi-Fi          255.255.255.255

提问

如何使这两个cmdlet在PowerShell脚本中运行并查看输出?我希望它们按顺序执行并在最后暂停
如果我只添加powershell -Command "PS_COMMAND_HERE",就可以在bat文件中运行

umuewwlo

umuewwlo1#

您并不需要***Out-Host***,因为这是PowerShell的默认设置。您也可以在一行中完成此操作。
一起来

Clear-Host
Get-NetAdapter | 
ForEach-Object {
        $PSitem | 
            Select-Object -Property Name, InterfaceDescription, ifIndex, Status, 
            MacAddress,  LinkSpeed,
            @{
                Name       = 'IPAddress'
                Expression = {(Get-NetIPAddress -InterfaceIndex ($PSItem).ifindex).IPv4Address}
            }
} | 
Format-Table -AutoSize

或者是文件

Clear-Host
Get-NetAdapter | 
ForEach-Object {
        $PSitem | 
            Select-Object -Property Name, InterfaceDescription, ifIndex, Status, 
            MacAddress,  LinkSpeed,
            @{
                Name       = 'IPAddress'
                Expression = {(Get-NetIPAddress -InterfaceIndex ($PSItem).ifindex).IPv4Address}
            }
} | 
Export-Csv -Path 'D:\Temp\NicDetails.csv'
cunj1qz1

cunj1qz12#

我最终修复它的方式是通过我在下面的链接中找到的东西Not showing Table of Objects until after Pause
我只需要编辑代码如下,并添加了一个Out-Host

Get-NetIPAddress -InterfaceAlias "*Ethernet*","*Wi-Fi*" -AddressFamily IPv4 | Select InterfaceAlias, IPAddress |Out-Host;
Get-NetAdapter -Name "*Ethernet*","*Wi-Fi*"| Select Name,MacAddress | Out-Host;
pause;

现在输出如下所示:

InterfaceAlias IPAddress     
-------------- ---------     
Ethernet       255.255.255.255
Wi-Fi          255.255.255.255  


Name     MacAddress       
----     ----------       
Wi-Fi    FF-FF-FF-FF-FF-FF
Ethernet FF-FF-FF-FF-FF-FF

Press Enter to continue...:

请注意,我是使用WINDOWS POWERSHELL ISE进行测试的
如果我们想让一个表同时拥有这两个表,我们可以按如下方式来做。

Clear-Host
Get-NetAdapter -InterfaceAlias "*Ethernet*","*Wi-Fi*" | 
ForEach-Object {
        $PSitem | 
            Select-Object -Property Name, InterfaceDescription, Status, 
            MacAddress,  LinkSpeed,
            @{
                Name       = 'IPAddress'
                Expression = {(Get-NetIPAddress -InterfaceIndex ($PSItem).ifindex).IPv4Address}
            }
} | 
Format-Table -AutoSize
kxeu7u2r

kxeu7u2r3#

注意get-netipconfiguration同时有ipaddress和macaddress。ipv4 address通常是一个数组。

Get-NetIPConfiguration | 
  select @{n='ipv4address';e={$_.ipv4address[0]}}, 
         @{n='macaddress'; e={$_.netadapter.macaddress}}

IPv4Address      macaddress
-----------      ----------
182.16.183.105   9C-89-A5-B6-A6-30
173.18.1.1       10-15-5D-4C-E9-C2

相关问题