Сервісний центр VPSGroup ремонт комп'ютерної техніки, заправка картриджів, ремонт оргтехніки, Київ, Виставковий центр, Васильківська, 55

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, але не тут-то було