PowerShell · 15.05.2026

Всем по-разному подавай

В процессе работы мне приходилось искать устройства на разных коммутаторах, где физические адреса устройств выглядели достаточно необычно (по мнению автора). Например, на одном коммутаторе можно обнаружить устройства с физическим адресом, который выглядит как 01-23-45-67-89-AB, а на другом — как 0123-4567-89AB.

А вот искал я MAC-адреса с совсем другой маской. Вот такой: 01:23:45:67:89:AB. Чтобы ничего не напутать, я быстренько состряпал два скрипта, которые приводили физический адрес к нужному мне виду для определённого коммутатора.

Скрипт с заменой двоеточих на дефис:

[System.Console]::Title = "Представление MAC-адреса c дефисом"
while($true)
{
    $mac = Read-Host "Введите MAC-адрес"
    $withline = ($mac).Trim() -replace ":", "-"
    $withline | Set-Clipboard
    Write-Host "MAC-адрес $withline скопирован в буфер обмена!" -ForegroundColor Green
    Write-Host
}

А здесь 01:23:45:67:89:AB превращается в 0123-4567-89AB:

[System.Console]::Title = "Представление MAC-адреса c дефисом в три блока"
while($true)
{
    $mac = Read-Host "Введите MAC-адрес"
    $join = (($mac).Trim() -replace ":", "").ToLower()
    $finalmac = ($join -split '(....)').Where({$_}) -join '-'
    $finalmac | Set-Clipboard
    Write-Host "MAC-адрес $finalmac скопирован в буфер обмена!" -ForegroundColor Green
    Write-Host
}

И, соответственно, обратная конвертация из 0123-4567-89AB в 01:23:45:67:89:AB:

[System.Console]::Title = "Представление MAC-адреса c двоеточиями в два блока"
while($true)
{
    $mac = Read-Host "Введите MAC-адрес"
    $join = (($mac).Trim() -replace "-", "").ToLower()
    $finalmac = ($join -split '(..)').Where({$_}) -join ':'
    $finalmac | Set-Clipboard
    Write-Host "MAC-адрес $finalmac скопирован в буфер обмена!" -ForegroundColor Green
    Write-Host
}

Скрипты зациклены, а результат работы падает сразу в буфер обмена.