我需要列出 10 台安装了 Windows 7 的计算机的 MAC 地址。这些地址按 training1 - training10 这样的序列命名。
其 IP 地址处于 DHCP 模式,每周更新。
关于如何在 Windows 上编写脚本,您有什么想法吗?我知道 BASH 脚本,但 Windows Powershell 对我来说很新。
答案1
像这样的事情应该可以做到:
# An array of server names
$servers = 'comp1','comp2','comp3','comp4';
Get-WmiObject -computer $servers -class win32_networkadapter |
Where-Object AdapterType -eq 'Ethernet 802.3' |
Format-Table -auto __SERVER,Caption,ServiceName,AdapterType, MacAddress
结果如下(故意隐藏 MAC 地址):
__SERVER 描述 服务名称 适配器类型 Mac地址 -------- ----------- ----------- ----------- ---------- COMP1 Microsoft 虚拟机总线网络适配器 netvsc 以太网 802.3 xx:xx:xx:xx:xx:xx COMP2 Microsoft 虚拟机总线网络适配器 netvsc 以太网 802.3 xx:xx:xx:xx:xx:xx COMP3 Realtek PCIe GBE 系列控制器 RTL8167 以太网 802.3 xx:xx:xx:xx:xx:xx COMP3 Microsoft 虚拟网络交换机适配器 VMSMP 以太网 802.3 xx:xx:xx:xx:xx:xx COMP4 Realtek PCIe GBE 系列控制器 RTL8167 以太网 802.3 xx:xx:xx:xx:xx:xx
笔记:
有些计算机可以有多个 NIC,因此也有多个 MAC 地址。
并非所有 NIC 都是物理的。(上文中的 Hyper-V 虚拟化。)
从命令行工作时,我会使用 PSH 别名和位置参数:
gwmi -comp 'comp1','comp2','comp3','comp4' win32_networkadapter | ? AdapterType -eq 'Ethernet 802.3' | ft -auto __SERVER,Caption,ServiceName,AdapterType, MacAddress
答案2
有一个 cmdlet 用于此目的:
Get-NetAdapter -Physical
将为您提供有关本地接口的信息。
如果添加-CimSession
参数(Get-NetAdapter -Physical -CimSession
),则可以通过其连接到服务器ComputerName
。
您最终会得到:Get-NetAdapter -Physical -CimSession "ComputerName, ComputerName"
,其中您还可以填充ComputerName
一个变量,其中包含您将要使用的服务器的名称。使用 分隔多个计算机名称,
。
powershell_ise.exe
您可以通过在根目录中搜索来找到 PowerShell 集成脚本环境启动卷(通常为 C:)在 Windows 资源管理器中 :)。您可能需要右键单击并以管理员身份运行它 ;)。
为什么要使用 CIM?以下是一些可以说服您的理由:
新 CIM Cmdlet 的目标
丰富的 PowerShell 体验。使 CIM 成为 PS 的一等公民,解决 WMI 和 WsMan Cmdlet 的可用性问题和用户反馈。
标准合规性。我们非常重视标准,我们的目标是让 PowerShell 成为管理 Windows 和非 Windows 的最佳平台。新的 CIM Cmdlet 应该能够管理任何符合 CIM + WsMan 标准的端点,包括 Windows。
支持低级机器。我们知道,数据中心中的低级服务器数量将比未来一段时间内的 Windows Server 2012 数量还要多。我们希望确保可以使用同一套 Cmdlet 来管理低级 Windows。
您可以阅读更多这里!
还有一件事:您需要使用 Windows PowerShell 3.0 或更高版本才能实现此功能;要了解如何从 Windows 7 升级 Windows PowerShell 版本,请单击这里。