CMD або PowerShell?.
Командний рядок довгий час є невід'ємною частиною Windows, і за цей час для неї було створено безліч різних утиліт. PowerShell замислювався в тому числі і як альтернатива командному рядку, проте чи зможе він повністю замінити її?
Для прикладу я взяв найбільш поширені утиліти командного рядка, що застосовуються в адмініструванні, і спробував підібрати їм заміну в PowerShell.Ось що з цього вийшло.
Ping
На заміну утиліті ping в PowerShell прийшов командлет Test-Connection, що входить до складу модуля Microsoft.PowerShell.Management. Для прикладу пропінгуем сервер SRV3 командою:
Test-Connection -ComputerName SRV3
Можна вказати для перевірки відразу кілька серверів, наприклад перерахувавши їх через кому:
Test- Connection -ComputerName SRV3, SRV4
або прочитавши з файлу:
Test-Connection -ComputerName (Get-Content serverlist.txt)
Ще командлет вміє запускати перевірку відразу з декількох точок. Наприклад, для перевірки сервера SRV4 з локального комп'ютера і з сервера SRV3 скористаємося такою командою:
Test-Connection -Source localhost, SRV3 -ComputerName SRV4
Параметр -Source з'явився тільки в PS 3.0 . У деяких випадках дуже зручно, проте при його використанні може знадобиться ввести облікові дані:
Test-Connection -Source localhost, SRV3 -ComputerName SRV4 -Credential Contoso \ administrator
Примітка.Командлет використовує клас Win32_PingStatus, тому для перевірки з'єднання можна скористатися командою Get-WmiObject Win32_PingStatus, її дія аналогічно команді Test-Connection.
Tracert
Наступний засіб, зазвичай застосовується після ping - це трасування за допомогою утиліти tracert. У PowerShell для цих цілей можна задіяти командлет Test-NetConnection з модуля NetTCPIP.Не дивлячись на схожу назву, по функціоналу він досить сильно відрізняється від попереднього командлет, хоча включає в себе і його можливості. Крім перевірки TCP з'єднання висновок може включати в себе список IP інтерфейсів, дозвіл DNS-імен (DNS lookup), правила IPsec і перевірку можливості встановлення з'єднання.У найпростішому варіанті команда виглядає так:
Test-NetConnection -ComputerName ya.ru
Для покрокового виведення в стилі tracert можна зробити так:
Test-NetConnection -ComputerName ya.ru -TraceRoute
Також можна вказати певний порт і зробити деталізований висновок:
Test-NetConnection -ComputerName ya.ru -Port 80 -InformationLevel Detailed
IPConfiig
Перше, для чого використовують Ipconfig - це перегляд мережевих налаштувань.У PowerShell для цих цілей можна скористатися Командлети Get-NetIPConfiguration. Так для докладного виведення налаштувань для всіх мережевих інтерфейсів (аналог ipconfig/all) введемо команду:
Get-NetIPConfiguration -All -Detailed
Для операцій з клієнтом DNS скористається командлети PowerShell з модуля DNSClient.Для очищення вмісту локального кеша DNS замість ipconfig/flushdns виконаємо команду Clear-DnsClientCache, для перереєстрації замість ipconfig/registerdns - команду Register-DnsClient. Вивести вміст кеша (ipconfig/displaydns) можна командою Get-DnsClientCache. Також можна виводити не всю інформацію кеша, а подивитися тільки певну запис, наприклад:
Get-DnsClientCache -Entry www.bing.ru
Nslookup
Для перевірки DNS імен замість nslookup можна скористатися Командлети Resolve-DnsName, що входить до складу модуля DNSClient. Синтаксис у них схожий, наприклад:
Resolve-DnsName -Name SRV3
Можна вказати тип запису (A, PTR, SRV), вказати, звідки брати дані і вибрати певний DNS-сервер , відмінний від дефолтного:
Resolve-DnsName -Name SRV3 -Type A -DNSOnly -Server 192.168.0.1
Netstat
Утиліта Netstat - ще один інструмент мережевий діагностики, який показує мережеві підключення. Замінимо її Командлети Get-NetTCPConnection. Наступна команда виведе всі підключення до інтернету, мають статус встановлених (Established):
Get-NetTCPConnection -State Established -AppliedSettings Internet | ft -auto
Route
Для управління маршрутизацією замість утиліти Route скористаємося декількома Командлети з модуля NetTCPIP.Для прикладу спробуємо додати новий постійний маршрут до мережі 172.16.0.0 з маскою 255.255.0.0 і шлюзом 192.168.0.1 для інтерфейсу з номером 3. Ось так це можна зробити за допомогою Route:
Route -p add 172.16. 0.0 mask 255.255.0.0 192.168.0.1 -if 3
А ось так при використанні PowerShell:
New-NetRoute -DestinationPrefix "172.16.0.0/16" -InterfaceIndex 3 -NextHop 192 .168.0.1
Для перегляду таблиці маршрутизації замість route print візьмемо командлет Get-NetRoute. Виведемо всі маршрути для протоколу IPv4 командою:
Get-NetRoute -AddressFamily IPv4 | ft -auto
В PS 4.0 з'явився цікавий командлет Find-NetRoute, за допомогою якого можна вивести маршрут для одного конкретного IP-адреси, наприклад:
Find-NetRoute -RemoteAddress 10.0.0.1
Для видалення маршруту (замість route delete) також є окремий командлет Remove-NetRoute, наприклад:
Remove-NetRoute -DestinationPrefix "172.16.0.0/16" -InterfaceIndex 3 -NextHop 192.168.0.1 -Confirm: $ false
Для зміни вже створеного маршруту замість route change можна скористатися зв'язкою Remove-NetRoute & New-NetRoute.
Netsh
Утиліта Netsh (Network shell) призначена для виконання різних завдань по налаштуванню мережі.Оскільки функціонал її досить широкий, для порівняння візьмемо одну з типових задач з налаштування мережевого інтерфейсу. Припустимо, нам необхідно перевірити настройки мережевого інтерфейсу, і якщо включений DHCP - відключити його і налаштувати статичну адресацію. За допомогою netsh це буде виглядати наступним чином:
Netsh interface IPv4 show addresses
Netsh interface IP set address "Ethernet" static 192.168.0.11 255.255.255.0 192.168.0.1
Netsh interface IP add DNSServers "Ethernet" 8.8.8.8
І те ж саме, але вже за допомогою PowerShell:
Get- NetIPAddress -InterfaceIndex 3 -AddressFamily IPv4
Set-NetIPInterface -InterfaceIndex 3 -Dhcp disabled
New-NetIPAddress -InterfaceIndex 3 -IPAddress 192.168.0.11 -PrefixLength 24 -DefaultGateway 192.168.0.1
Set-DNSClientServerAddress -InterfaceIndex3 -ServerAddresses ( "8.8.8.8")
Що цікаво, для зміни мережевих налаштувань доведеться їх видалити і створити заново.Наприклад IP-адресу можна змінити так:
Remove-NetIPAddress -InterfaceIndex 3 -IPAddress 192.168.0.11 -PrefixLength 24 -DefaultGateway 192.168.0.1 -Confirm: $ false
New-NetIPAddress -InterfaceIndex 3 - IPAddress 192.168.0.12 -PrefixLength 24 -DefaultGateway 192.168.0.1 -Confirm: $ false
Примітка . Для зміни IP-адреси логічно було б скористатися спеціально призначеним для цього Командлети Set-NetIPAddress, але не тут-то було