Windows Server для самых маленьких. Часть 2: диски и сеть — diskpart, netsh и их PowerShell-замены

В прошлой части мы настроили адрес четырьмя командлетами из модуля NetTCPIP. Любое руководство старше 2012 года сделает то же самое одной строкой netsh interface ip set address, а разметку диска доверит diskpart. Обе утилиты никуда не делись: они есть на каждом Windows от XP до Server 2025, работают в среде восстановления, где модулей PowerShell может не быть, и умеют несколько вещей, для которых командлетов так и не написали. Поэтому администратору нужно знать обе: и чтобы читать чужие скрипты, и чтобы не остаться без инструмента, когда PowerShell недоступен.

Эта часть устроена как словарь в обе стороны: что делает старая утилита, каким командлетом это делается сейчас, и где командлета нет.


Как Windows видит хранилище

Прежде чем размечать, нужно понимать, что именно размечается. У Windows три уровня:

 Диск (Disk)              физическое или виртуальное устройство: Disk 0, Disk 1, …
   └─ Раздел (Partition)  кусок диска с типом и номером: Partition 1, 2, …
        └─ Том (Volume)   файловая система на разделе, с буквой или без: C:, D:, \\?\Volume{…}

Диск имеет номер (с нуля), стиль разметки, состояние (Online/Offline) и атрибут «только чтение». Стиль разметки — это таблица разделов:

  • MBR (Master Boot Record, 1983 год): таблица на четыре записи в первом секторе, адреса на 32 бита, то есть диск до 2 ТБ. Больше четырёх разделов — только через «расширенный» раздел с логическими дисками внутри. Загрузка в режиме BIOS.
  • GPT (GUID Partition Table): 128 разделов по умолчанию, диски до 9,4 ЗБ, у каждого раздела GUID-идентификатор и GUID-тип, копия таблицы в конце диска и контрольные суммы. Загрузка в режиме UEFI. Это стандарт для всего, что устанавливается сегодня.

Раздел на GPT-диске имеет тип, и типов, которые встречаются на системном диске Windows, четыре:

Раздел GUID типа Размер Что внутри
EFI System Partition c12a7328-f81f-11d2-ba4b-00a0c93ec93b 100 МБ FAT32, загрузчик \EFI\Microsoft\Boot\bootmgfw.efi и хранилище BCD
Microsoft Reserved (MSR) e3c9e316-0b5c-4db8-817d-f92df00215ae 16 МБ пусто; резерв для служебных нужд, без файловой системы
Basic data ebd0a0a2-0b84-4a0b-9d6b-3b2b5b4b6a5a… остальное NTFS с Windows, то, что получает букву C:
Windows RE de94bba4-06d1-4d40-a16a-bfd50179d6ac 600–1000 МБ среда восстановления winre.wim

Том — файловая система поверх раздела: NTFS, ReFS, FAT32, exFAT. У тома может быть буква, точка монтирования в папке другого тома или ничего (EFI и RE букв не имеют). Для серверов файловая система — NTFS, кроме случаев, когда нужен ReFS: он устойчивее к повреждениям и быстрее работает с виртуальными дисками и базами, но не поддерживает сжатие, квоты, шифрование EFS и не годится для системного тома.

Ещё есть динамические диски — способ собрать из нескольких дисков зеркало или RAID-5 средствами Windows 2000. Они объявлены устаревшими: вместо них Storage Spaces, где из физических дисков собирается пул, а из пула нарезаются виртуальные диски с нужной отказоустойчивостью. В этой серии нам хватит простых дисков.


diskpart

diskpart — не команда, а отдельная оболочка со своим приглашением. Главное, что нужно понять о ней: она работает через контекст. Команда select disk 1 делает диск 1 текущим, и все последующие команды — clean, convert, create — относятся к нему, пока не выбрано что-то другое. Здесь же и главная опасность: clean, выполненный не на том диске, за секунду стирает таблицу разделов, и никакого подтверждения не будет.

Типичный сеанс на новом диске:

PS C:\> diskpart

Microsoft DiskPart version 10.0.26100.1150

Copyright (C) Microsoft Corporation.
On computer: DC1

DISKPART> list disk

  Disk ###  Status         Size     Free     Dyn  Gpt
  --------  -------------  -------  -------  ---  ---
  Disk 0    Online           40 GB      0 B        *
  Disk 1    Online          100 GB   100 GB

DISKPART> select disk 1

Disk 1 is now the selected disk.

DISKPART> clean
DISKPART> convert gpt
DISKPART> create partition primary
DISKPART> format fs=ntfs label=Data quick
DISKPART> assign letter=D
DISKPART> list volume

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     C                NTFS   Partition     39 GB  Healthy    Boot
  Volume 1         Recovery     NTFS   Partition    799 MB  Healthy    Hidden
  Volume 2                      FAT32  Partition    100 MB  Healthy    System
  Volume 3     D   Data         NTFS   Partition    100 GB  Healthy

DISKPART> exit

Что ещё умеет diskpart, и что из этого пригождается:

Команда Что делает
list disk / list partition / list volume / list vdisk показать объекты уровня
select disk N, select partition N, select volume N или буква выбрать контекст
detail disk / detail partition подробности: ID, тип, атрибуты, путь устройства
clean / clean all стереть таблицу разделов (быстро) / затереть весь диск нулями
convert gpt / convert mbr сменить стиль разметки пустого диска
create partition efi size=100, create partition msr size=16, create partition primary [size=МБ] создать раздел нужного типа
format fs=ntfs quick label=X, assign letter=X, assign mount=C:\Mount\X, remove letter=X файловая система и буква
shrink desired=МБ, extend [size=МБ] изменить размер раздела
online disk, offline disk, attributes disk clear readonly состояние диска
san policy=OnlineAll как обращаться с новыми дисками (ниже)
set id= и gpt attributes= тип раздела и его атрибуты GPT
create vdisk file=C:\x.vhdx maximum=10240 type=expandable, attach vdisk, detach vdisk виртуальные диски VHD/VHDX без Hyper-V
rescan перечитать шину

Сценарии для diskpart пишутся в текстовый файл по команде на строку и выполняются diskpart /s script.txt. Так до сих пор размечают диски в скриптах развёртывания и в autounattend.xml.

Ещё один контекст, где без diskpart не обойтись, — среда восстановления и консоль установщика (Shift+F10 в окне установки). PowerShell там либо нет, либо нет модуля Storage, а разобраться с разделами или заново создать EFI-раздел после потери загрузчика нужно именно там:

select disk 0
list partition
select partition 1          ← EFI
assign letter=S
exit
bcdboot C:\Windows /s S: /f UEFI

bcdboot копирует файлы загрузчика с установленной Windows на раздел S: и пересоздаёт конфигурацию загрузки BCD. Эти шесть строк возвращают к жизни сервер, который «не видит диск» после неудачного обновления прошивки или переноса на другой гипервизор.


Модуль Storage

Начиная с Windows Server 2012 всё, что делает diskpart, умеет модуль Storage, причём объектами и по конвейеру. Те же действия на новом диске:

PS C:\> Get-Disk

Number Friendly Name           Serial Number   HealthStatus OperationalStatus Total Size Partition Style
------ -------------           -------------   ------------ ----------------- ---------- ---------------
0      Msft Virtual Disk                       Healthy      Online                 40 GB GPT
1      Msft Virtual Disk                       Healthy      Online                100 GB RAW

PS C:\> Initialize-Disk -Number 1 -PartitionStyle GPT
PS C:\> New-Partition -DiskNumber 1 -UseMaximumSize -DriveLetter D
PS C:\> Format-Volume -DriveLetter D -FileSystem NTFS -NewFileSystemLabel Data -Confirm:$false

DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining      Size
----------- ------------ -------------- --------- ------------ ----------------- -------------      ----
D           Data         NTFS           Fixed     Healthy      OK                     99.89 GB  99.98 GB

RAW в стиле разметки — пустой диск без таблицы. А вот то же самое одной строкой для всех пустых дисков сервера, как это пишут в скриптах подготовки:

Get-Disk | Where-Object PartitionStyle -eq RAW |
    Initialize-Disk -PartitionStyle GPT -PassThru |
    New-Partition -AssignDriveLetter -UseMaximumSize |
    Format-Volume -FileSystem NTFS -NewFileSystemLabel Data -Confirm:$false

Это и есть разница в подходе: diskpart выполняет команды над выбранным контекстом, PowerShell передаёт объекты по конвейеру, и каждый следующий командлет работает с тем, что вернул предыдущий (-PassThru заставляет Initialize-Disk вернуть диск, иначе он ничего не возвращает).

Соответствие остальных команд:

diskpart Storage
list disk / list partition / list volume Get-Disk, Get-Partition, Get-Volume; физика — Get-PhysicalDisk
detail disk Get-Disk -Number 1 | Format-List *
clean Clear-Disk -Number 1 -RemoveData -RemoveOEM -Confirm:$false
convert gpt Set-Disk -Number 1 -PartitionStyle GPT (только для пустого)
create partition primary size= New-Partition -DiskNumber 1 -Size 20GB
create partition efi New-Partition -GptType '{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}' -Size 100MB
format fs=ntfs quick Format-Volume -FileSystem NTFS (быстрое по умолчанию, полное — -Full)
assign letter= / assign mount= Set-Partition -NewDriveLetter E, Add-PartitionAccessPath -AccessPath C:\Mount\Data
shrink / extend Resize-Partition -Size …; пределы — Get-PartitionSupportedSize
online disk, attributes disk clear readonly Set-Disk -Number 1 -IsOffline $false -IsReadOnly $false
san policy=OnlineAll Set-StorageSetting -NewDiskPolicy OnlineAll
attach vdisk Mount-DiskImage -ImagePath C:\x.vhdx (и для ISO)
create vdisk New-VHD из модуля Hyper-V; без Hyper-V — только diskpart
rescan Update-HostStorageCache

Про SAN policy стоит сказать отдельно, потому что она объясняет популярный вопрос «подключил второй диск к серверу, а он Offline». Политика определяет, что делать с диском, впервые увиденным системой. Значение по умолчанию у Windows Server — Offline Shared: диски на общей шине (iSCSI, Fibre Channel, SAS с несколькими хостами) остаются Offline, чтобы два сервера не начали писать на один LUN одновременно, а локальные включаются сразу. Проверить и изменить:

PS C:\> Get-StorageSetting | Select-Object NewDiskPolicy

NewDiskPolicy
-------------
OfflineShared

PS C:\> Set-StorageSetting -NewDiskPolicy OnlineAll

На одиночном сервере OnlineAll безопасна и избавляет от ручного Set-Disk -IsOffline $false при каждом новом диске.

Что остаётся за diskpart. Тонкости GPT — атрибуты раздела (gpt attributes=0x8000000000000001 делает раздел «обязательным», и Disk Management перестаёт предлагать его удалить) и set id= для смены типа раздела — в Storage есть лишь частично через Set-Partition -GptType и -IsHidden. Создание VHD без Hyper-V — только diskpart. И среда восстановления: Storage там недоступен. Во всех остальных случаях модуль удобнее.


netsh

netsh (network shell) появился в Windows 2000 и устроен иначе, чем diskpart: это дерево контекстов, каждый из которых отвечает за свою подсистему и реализован отдельной библиотекой-помощником. Команда netsh interface ipv4 show addresses — это контекст interface, подконтекст ipv4, команда show addresses. Запущенный без аргументов, netsh открывает оболочку, где в контексты можно заходить как в каталоги:

PS C:\> netsh
netsh>interface ipv4
netsh interface ipv4>show addresses "Ethernet"

Configuration for interface "Ethernet"
    DHCP enabled:                         No
    IP Address:                           192.168.1.10
    Subnet Prefix:                        192.168.1.0/24 (mask 255.255.255.0)
    Default Gateway:                      192.168.1.1
    Gateway Metric:                       256
    InterfaceMetric:                      15

netsh interface ipv4>exit

Контексты, которые встречаются на серверах:

Контекст За что отвечает Чем заменён
interface ipv4, interface ipv6 адреса, маршруты, DNS-серверы, MTU, параметры протоколов NetTCPIP, DnsClient
interface tcp глобальные параметры TCP: автонастройка окна, ECN, RSS Get-NetTCPSetting, Set-NetTCPSetting
interface portproxy перенаправление TCP-портов нет замены
advfirewall Windows Firewall с расширенной безопасностью и IPsec NetSecurity
http HTTP.sys: сертификаты на портах, резервирование URL нет замены вне IIS
winhttp системный прокси для служб нет замены
trace захват трафика и трассировка компонентов в ETL pktmon
wlan профили Wi-Fi на серверах не нужен
winsock, interface ip reset сброс стека нет замены
dhcpclient, dnsclient клиентские части Get-NetIPInterface, Clear-DnsClientCache
nps, ras, routing, branchcache, lan серверные роли модули ролей (NPS, RemoteAccess, …)
dhcp, wins старые серверные контексты удалены: DhcpServer, dnscmd

У netsh есть две полезные особенности, которых нет у отдельных команд. Любую команду можно выполнить на другой машине ключом -r имя (работает через RPC, в домене — по Kerberos, аналог -ComputerName у командлетов и -CimSession). И у многих set-команд есть store=persistent / store=active: применить навсегда или только до перезагрузки, что удобно для экспериментов с MTU или маршрутами, когда есть риск отрезать себя от сервера.


Сетевые модули PowerShell

Модулей, заменяющих netsh interface и advfirewall, четыре, и в них около двухсот командлетов. Нужный десяток:

NetAdapter — физический и виртуальный адаптер, уровень 2:

Get-NetAdapter                                      # список, состояние, скорость
Get-NetAdapter Ethernet | Get-NetAdapterAdvancedProperty   # Jumbo Packet, RSS, VLAN ID, offload'ы
Set-NetAdapterAdvancedProperty Ethernet -DisplayName 'Jumbo Packet' -DisplayValue '9014 Bytes'
Get-NetAdapterBinding Ethernet                      # какие протоколы привязаны (ms_tcpip6 — IPv6: не трогать)
Restart-NetAdapter Ethernet
Get-NetAdapterStatistics Ethernet                   # байты, пакеты, ошибки

NetTCPIP — адреса, маршруты, интерфейсы уровня 3, соединения:

Get-NetIPAddress -AddressFamily IPv4                # аналог netsh int ipv4 show addresses
Get-NetIPInterface                                  # DHCP вкл/выкл, метрика, MTU (NlMtu) по интерфейсу и семейству
Set-NetIPInterface Ethernet -AddressFamily IPv4 -NlMtuBytes 1400   # netsh int ipv4 set subinterface mtu=
Get-NetRoute -AddressFamily IPv4                    # route print
New-NetRoute -DestinationPrefix 10.10.0.0/16 -InterfaceAlias Ethernet -NextHop 192.168.1.254
Get-NetNeighbor -AddressFamily IPv4                 # arp -a; для IPv6 — таблица соседей NDP
Get-NetTCPConnection -State Listen                  # netstat -an
Get-NetIPv6Protocol                                 # глобальные параметры IPv6

Для сервера с IPv6 из Router Advertisement полезны два параметра Set-NetIPv6Protocol: -UseTemporaryAddresses Disabled отключает временные адреса (сервер, меняющий адрес раз в сутки, никому не нужен), а -RandomizeIdentifiers Disabled заставляет строить идентификатор интерфейса из MAC-адреса, чтобы адрес был предсказуемым. Это аналоги netsh interface ipv6 set privacy state=disabled и set global randomizeidentifiers=disabled.

DnsClient — клиентская часть DNS:

Get-DnsClientServerAddress                          # кто прописан на каждом интерфейсе
Set-DnsClientServerAddress Ethernet -ServerAddresses 192.168.1.10, 192.168.1.11
Get-DnsClient                                       # суффиксы, регистрация в DNS по интерфейсам
Set-DnsClientGlobalSetting -SuffixSearchList corp.example.com, example.com
Resolve-DnsName dc1.corp.example.com -Type A        # nslookup с объектами на выходе
Clear-DnsClientCache                                # ipconfig /flushdns
Register-DnsClient                                  # ipconfig /registerdns

NetSecurity — файрвол и IPsec:

Get-NetFirewallProfile                              # netsh advfirewall show allprofiles
Set-NetFirewallProfile -Profile Public -DefaultInboundAction Block
New-NetFirewallRule -DisplayName 'App 8080' -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow -Profile Domain
Get-NetFirewallRule -DisplayGroup 'Remote Desktop' | Enable-NetFirewallRule
Get-NetFirewallRule -Enabled True -Direction Inbound | Get-NetFirewallPortFilter | Where-Object LocalPort -eq 445
Get-NetFirewallRule -Direction Inbound -Enabled True -Action Allow | Format-Table DisplayName, Profile, Program

Правило в netsh: netsh advfirewall firewall add rule name="App 8080" dir=in action=allow protocol=TCP localport=8080 profile=domain. Один в один, разница в том, что Get-NetFirewallRule возвращает объекты, а фильтры по портам, адресам и программам у них лежат отдельными объектами, за которыми ходят Get-NetFirewallPortFilter, Get-NetFirewallAddressFilter, Get-NetFirewallApplicationFilter. Это неудобно, пока не привыкнешь, и очень удобно потом: один запрос «все правила, открывающие 445 наружу» на сто серверов.

Профиль сети у интерфейса — отдельный командлет Get-NetConnectionProfile. У автономного сервера сеть часто оказывается Public, и половина правил управления в этом профиле закрыта; поменять на Private можно Set-NetConnectionProfile -InterfaceAlias Ethernet -NetworkCategory Private. Профиль Domain руками не назначается: его интерфейс получает сам, когда с него видно контроллер домена.


Что по-прежнему умеет только netsh

Перенаправление портов. netsh interface portproxy заставляет Windows слушать порт и перебрасывать соединения на другой адрес и порт, в том числе из IPv4 в IPv6 и обратно. Командлета нет и, судя по всему, не будет.

PS C:\> netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8080 connectaddress=192.168.1.20 connectport=80
PS C:\> netsh interface portproxy show all

Listen on ipv4:             Connect to ipv4:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
0.0.0.0         8080        192.168.1.20    80

Работает за счёт службы IP Helper (iphlpsvc); если служба выключена, правила есть, а переброса нет. Правило файрвола для порта 8080 нужно добавить отдельно. Пригождается, когда нужно временно вывести наружу сервис с другой машины или пробросить порт внутрь WSL.

HTTP.sys. Веб-сервер в Windows встроен в ядро: драйвер HTTP.sys принимает соединения, а IIS, WinRM, WSUS, службы на ASP.NET Core с HttpSys-сервером — его клиенты. Сертификаты привязываются к портам на уровне HTTP.sys, и права слушать URL без прав администратора выдаются там же:

netsh http show sslcert
netsh http add sslcert ipport=0.0.0.0:8443 certhash=3f1a…c9e2 appid='{12345678-0000-0000-0000-000000000001}'
netsh http add urlacl url=http://+:8080/ user='CORP\svc-app'
netsh http show urlacl

Для сайтов IIS это делает модуль WebAdministration, но служба не в IIS (а WinRM через HTTPS, который мы будем настраивать в части про Remoting, — ровно такой случай) настраивается только здесь.

Прокси для служб. В Windows два набора настроек прокси: WinINET — пользовательский, тот, что в настройках браузера, и WinHTTP — системный, которым пользуются Windows Update, WinRM, клиент WSUS, Defender, службы под учётными записями без профиля. Второй задаётся только netsh:

netsh winhttp show proxy
netsh winhttp set proxy proxy-server="proxy.corp.example.com:3128" bypass-list="*.corp.example.com;<local>"
netsh winhttp reset proxy

Сервер, который «не видит Windows Update» в сети с обязательным прокси, лечится этой командой или импортом пользовательских настроек: netsh winhttp import proxy source=ie.

Сброс стека. netsh winsock reset пересобирает каталог Winsock, в который встраиваются антивирусы, VPN-клиенты и прочие провайдеры многоуровневых служб; netsh interface ipv4 reset и ipv6 reset возвращают настройки протокола к заводским. Обе команды — последнее средство при «сеть есть, а ничего не работает» после удаления криво написанного агента, и обе требуют перезагрузки. Вторая, кроме того, стирает статические адреса на всех интерфейсах, так что на удалённом сервере её выполняют только с консоли гипервизора.

Экспорт и импорт файрвола. netsh advfirewall export C:\fw.wfw сохраняет всю политику файрвола, включая правила IPsec, в бинарный файл, а import восстанавливает. У NetSecurity есть Copy-NetFirewallRule между хранилищами и объекты GPO, но файла целиком в один шаг он не даёт.

Захват трафика. tcpdump под Windows существует только в виде сторонних портов — WinDump поверх драйвера Npcap и коммерческий tcpdump for Windows, — и для них на сервер нужно ставить драйвер захвата. Встроенных способов снять пакеты без установки чего-либо два.

Первый — netsh trace, с Windows 7. Пишет ETL-файл с пакетами и событиями сетевых компонентов:

netsh trace start capture=yes tracefile=C:\Temp\dns.etl maxsize=200 persistent=no
Resolve-DnsName www.example.com
netsh trace stop

ETL открывается Microsoft Network Monitor или Message Analyzer либо конвертируется в pcapng утилитой etl2pcapng с GitHub Microsoft и открывается в Wireshark. Параметр persistent=yes продолжит захват после перезагрузки, что незаменимо для проблем «при старте системы».

Второй — pktmon, с Windows Server 2019 и Windows 10 1809, и он удобнее: умеет фильтры и сам конвертирует в pcapng.

PS C:\> pktmon filter add -p 53
PS C:\> pktmon start --capture --pkt-size 0
Logger Parameters:
    Logger name:          PktMon
    Logging mode:         Circular
    Log file:             C:\Temp\PktMon.etl
    Max file size:        512 MB
    Memory buffers:       64 MB
Collected Data:
    Packet counters, packet capture
Capture Type:
    All packets

PS C:\> Resolve-DnsName www.example.com | Out-Null
PS C:\> pktmon stop
Flushing logs...
Merging metadata...
Log file: C:\Temp\PktMon.etl (No events lost)

PS C:\> pktmon etl2pcap C:\Temp\PktMon.etl --out C:\Temp\dns.pcapng
Processing...
Packets total:       4
Packet drop count:   0
Packets formatted:   4
Formatted file:      C:\Temp\dns.pcapng

pktmon filter add -p 53 — только порт 53, --pkt-size 0 — пакеты целиком, не первые 128 байт. Можно и в реальном времени: pktmon start --capture --log-mode real-time печатает пакеты в консоль, как tcpdump без флага -w. Полученный pcapng открывается в Wireshark на рабочей станции, и дальше всё как в сетевой серии. В частях про Kerberos и репликацию мы будем снимать обмены именно так.


Смотрим руками

Кто слушает порты на сервере — вопрос, который возникает каждый раз, когда «порт занят» или «служба не отвечает». netstat -ano показывает PID, Get-NetTCPConnection — объекты, к которым можно приклеить имя процесса:

PS C:\> Get-NetTCPConnection -State Listen |
    Select-Object LocalAddress, LocalPort, OwningProcess, @{n='Process'; e={(Get-Process -Id $_.OwningProcess).ProcessName}} |
    Sort-Object LocalPort -Unique | Format-Table -AutoSize

LocalAddress LocalPort OwningProcess Process
------------ --------- ------------- -------
0.0.0.0            135           916 svchost
0.0.0.0            445             4 System
0.0.0.0           3389          1204 svchost
0.0.0.0           5985             4 System
::                47001            4 System
0.0.0.0          49664           728 lsass
0.0.0.0          49665          1000 svchost

Четыре порта, которые есть на любом сервере: 135 — RPC Endpoint Mapper, через который находят друг друга службы на RPC (им мы займёмся в части про устройство AD); 445 — SMB; 5985 и 47001 — WinRM (второй — внутренний слушатель для локальных подписок); 3389 — RDP, который мы включили в прошлой части. Процесс System с PID 4 на 445 и 5985 — это драйверы ядра srv2.sys и HTTP.sys, а не процессы пользователя. lsass на 49664 — локальная система безопасности, слушающая на динамическом порту RPC; когда сервер станет контроллером, у него появятся ещё 88 (Kerberos), 389 и 636 (LDAP), 3268 и 3269 (глобальный каталог), 53 (DNS), 464 (смена пароля Kerberos) и 9389 (веб-службы AD).

Таблица маршрутов:

PS C:\> Get-NetRoute -AddressFamily IPv4 | Where-Object NextHop -ne '0.0.0.0' | Format-Table DestinationPrefix, NextHop, InterfaceAlias, RouteMetric, ifMetric

DestinationPrefix NextHop     InterfaceAlias RouteMetric ifMetric
----------------- -------     -------------- ----------- --------
0.0.0.0/0         192.168.1.1 Ethernet                 0       15

Маршруты с NextHop 0.0.0.0 — локальные подсети и адреса самого хоста, их много и они неинтересны. Маршрут по умолчанию один, метрика маршрута плюс метрика интерфейса даёт итоговую стоимость; когда интерфейсов несколько и трафик идёт «не туда», сравнивают именно эти суммы. Если нужен старый вид, route print на месте.

И диск целиком, как его видит система, от физического устройства до тома:

PS C:\> Get-PhysicalDisk | Format-Table DeviceId, FriendlyName, MediaType, BusType, Size, HealthStatus
PS C:\> Get-Disk 0 | Get-Partition | Format-Table PartitionNumber, Type, GptType, Size, DriveLetter, IsBoot, IsSystem

PartitionNumber Type      GptType                                Size DriveLetter IsBoot IsSystem
--------------- ----      -------                                ---- ----------- ------ --------
1               System    {c12a7328-f81f-11d2-ba4b-00a0c93ec93b} 100 MB                False True
2               Reserved  {e3c9e316-0b5c-4db8-817d-f92df00215ae}  16 MB                False False
3               Basic     {ebd0a0a2-0b84-4a0b-9d6b-3b2b5b4b6a5a}  39 GB C             True False
4               Recovery  {de94bba4-06d1-4d40-a16a-bfd50179d6ac} 799 MB                False False

Те четыре раздела, о которых шла речь в начале. IsSystem — раздел с загрузчиком, IsBoot — раздел с Windows; в терминологии Microsoft они названы ровно наоборот тому, что ожидаешь, и это стоит запомнить один раз.


У нас есть сервер, и мы умеем читать его диски и сеть на любом уровне. Пора заняться тем, ради чего всё затевалось. Но прежде чем выполнить Install-ADDSForest, стоит понять, что именно эта команда создаст: лес, домен, разделы каталога, глобальный каталог, SYSVOL и пять протоколов, на которых всё это держится.

Дальше — часть 3: как устроен Active Directory. Лес, дерево, домен и OU; что такое разделы каталога и зачем их четыре; глобальный каталог; SYSVOL; и обзор протоколов LDAP, Kerberos, NTLM, SMB и RPC — что каждый из них делает в домене и когда вступает в игру.


Серия «Windows Server для самых маленьких»

  1. Windows Server с нуля — редакции, Server Core, установка, первые команды PowerShell, имя, сеть, время, обновления, роли.
  2. Диски и сеть: diskpart, netsh и их PowerShell-замены (эта статья) — разметка дисков и сетевой стек через старые утилиты и модули Storage, NetTCPIP, NetSecurity, и что умеют только утилиты.

Оставить комментарий могут только зарегистрированные пользователи.

Войдите на сайт или зарегистрируйтесь, чтобы оставить комментарий.