Мне нужно перечислить MAC-адреса для 10 компьютеров с установленной на них Windows 7. Они названы в серии как обучение1 - обучение10.

Там IP-адреса находятся в режиме DHCP и обновляются каждую неделю.

Любые идеи о том, как мне написать скрипт на Windows? Я знаю сценарии BASH, но Windows PowerShell является новым для меня.

2 ответа2

2

Примерно так должно это сделать:

# 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 Description                                   ServiceName AdapterType    MacAddress
-------- -----------                                   ----------- -----------    ----------
COMP1    Microsoft Virtual Machine Bus Network Adapter netvsc      Ethernet 802.3 xx:xx:xx:xx:xx:xx
COMP2    Microsoft Virtual Machine Bus Network Adapter netvsc      Ethernet 802.3 xx:xx:xx:xx:xx:xx
COMP3    Realtek PCIe GBE Family Controller            RTL8167     Ethernet 802.3 xx:xx:xx:xx:xx:xx
COMP3    Microsoft Virtual Network Switch Adapter      VMSMP       Ethernet 802.3 xx:xx:xx:xx:xx:xx
COMP4    Realtek PCIe GBE Family Controller            RTL8167     Ethernet 802.3 xx:xx:xx:xx:xx:xx

Замечания:

  1. Некоторые компьютеры могут иметь несколько сетевых карт и, следовательно, несколько MAC-адресов.

  2. Не все сетевые карты являются физическими. (Виртуализация Hyper-V выше.)

  3. При работе из командной строки я бы использовал псевдонимы PSH и позиционные параметры:

    gwmi -comp 'comp1','comp2','comp3','comp4' win32_networkadapter | ? AdapterType -eq 'Ethernet 802.3' | ft -auto __SERVER,Caption,ServiceName,AdapterType, MacAddress
    
1

Для этого есть командлет:

Get-NetAdapter -Physical предоставит вам информацию о ваших локальных интерфейсах.

Если добавить параметр -CimSession Get-NetAdapter -Physical -CimSession вы можете подключиться к серверу по его ComputerName

В итоге вы получаете : Get-NetAdapter -Physical -CimSession "ComputerName, ComputerName" , где вы также можете заполнить ComputerName переменной, содержащей имена серверов, с которыми вы будете работать. Разделяйте имена компьютеров с ,

Вы найдете интегрированную среду сценариев PowerShell, выполнив поиск powershell_ise.exe в корне загрузочного тома (обычно C:) в проводнике Windows :). Вы, вероятно, захотите щелкнуть правой кнопкой мыши и запустить его от имени администратора;).

Почему вы должны использовать CIM? Несколько причин, чтобы попытаться убедить вас:

цели для новых команд CIM

  • Богатый опыт PowerShell. Сделайте CIM первоклассным гражданином PS, учитывая проблемы юзабилити и отзывы пользователей для команд WMI и WsMan.

  • Соответствие стандартам С таким большим акцентом на стандарты наша цель - сделать PowerShell лучшей платформой для управления Windows и не-Windows. Новые командлеты CIM должны иметь возможность управлять любой конечной точкой, совместимой с CIM + WsMan, включая Windows.

  • Поддержка машин нижнего уровня. Мы понимаем, что в центре обработки данных имеется больше серверов нижнего уровня, чем Windows Server 2012 в течение некоторого времени. Мы хотим убедиться, что один и тот же набор командлетов можно использовать и для управления Windows нижнего уровня.

Вы можете прочитать больше здесь !

Еще одна вещь: вам нужно будет использовать Windows PowerShell 3.0 или выше, чтобы это работало; чтобы узнать, как обновить версию Windows PowerShell из Windows 7, нажмите здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .