Определение: Get‑NetConnectionProfile — cmdlet PowerShell из модуля NetTCPIP, который отображает активные сетевые профили (Public, Private, DomainAuthenticated) для каждого сетевого интерфейса Windows Server. С его помощью администратор быстро определяет текущий тип сети, уровень доступности по IPv4/IPv6 и контекст, от которого зависят правила брандмауэра и политики обнаружения устройств.
Что показывает команда и зачем это нужно 🖥️🔐
Тип сети напрямую влияет на поведение брандмауэра, доступность служб (RDP, SMB, WinRM), видимость сервера в локальной сети и применение некоторых политик безопасности. В 2025 году это особенно важно для серверов в облаке и гибридных средах, где один ВМ может иметь несколько интерфейсов с разными профилями.
Основные свойства вывода Get‑NetConnectionProfile
| Свойство | Что означает | Тип данных | Пример значения | 
|---|---|---|---|
| Name | Имя сети/подключения, присвоенное системой (для Wi‑Fi — SSID). | String | Network, CorpNet, Unidentified network | 
| InterfaceAlias | Человекочитаемое имя интерфейса. | String | Ethernet, vEthernet (Default Switch), Ethernet 2 | 
| InterfaceIndex | Числовой идентификатор сетевого интерфейса. | Int32 | 12 | 
| NetworkCategory | Категория сети: Public, Private или DomainAuthenticated. | Enum | Private | 
| IPv4Connectivity | Уровень связности по IPv4. | Enum | Internet, LocalNetwork, Subnet, NoTraffic | 
| IPv6Connectivity | Уровень связности по IPv6. | Enum | NoTraffic, LocalNetwork | 
Быстрые примеры использования ⚙️
# Показать профиль для всех активных интерфейсов
Get-NetConnectionProfile
# Вывести компактно только ключевые поля
Get-NetConnectionProfile | Select Name, InterfaceAlias, NetworkCategory
# Фильтр по конкретному интерфейсу
Get-NetConnectionProfile -InterfaceAlias "Ethernet"
# Сортировка по категории (удобно, когда много NIC)
Get-NetConnectionProfile | Sort-Object NetworkCategory
Фильтрация, массовые проверки и удалённый доступ 🌐
# Найти все интерфейсы с публичным профилем на сервере
Get-NetConnectionProfile | Where-Object NetworkCategory -eq 'Public'
# Проверка на нескольких серверах и выгрузка в CSV
$servers = 'SRV-A','SRV-B','SRV-C'
Invoke-Command -ComputerName $servers -ScriptBlock {
  Get-NetConnectionProfile | Select-Object PSComputerName,Name,InterfaceAlias,NetworkCategory,IPv4Connectivity,IPv6Connectivity
} | Export-Csv .net-profiles.csv -NoTypeInformation -Encoding UTF8
# Альтернатива через CIM (полезно при закрытом WinRM)
Get-CimInstance -Namespace root/StandardCimv2 -ClassName MSFT_NetConnectionProfile |
  Select-Object Name, InterfaceAlias, InterfaceIndex, NetworkCategory, IPv4Connectivity, IPv6Connectivity
Для Invoke-Command требуется включённый WinRM и соответствующие права; при работе через файрволы в DMZ чаще подходит вариант через CIM с правильно настроенными портами.
Как изменить тип сети (осторожно) 🔧
Изменение профиля требует прав администратора и может сразу изменить набор активных правил брандмауэра. На боевых серверах применяйте через Change Advisory и в заранее согласованное окно.
# Перевести профиль интерфейса в Private
Set-NetConnectionProfile -InterfaceAlias "Ethernet" -NetworkCategory Private
# Вернуть в Public
Set-NetConnectionProfile -InterfaceAlias "Ethernet" -NetworkCategory Public
Категория DomainAuthenticated назначается автоматически, когда сервер корректно определяет домен через службу NLA и может пройти аутентификацию контроллеру домена. Вручную установить DomainAuthenticated нельзя.
Связь с Active Directory и GPO
- Профиль DomainAuthenticated появляется только на присоединённых к домену машинах при успешной сети AD.
- Если контроллеры недоступны (VPN не поднят, DNS сломан), профиль может «упасть» в Private/Public.
- GPO управляет правилами брандмауэра по профилям, а не самим назначением профиля.
Типовые сценарии применения
- Быстрая проверка, почему не открывается RDP/SMB: профиль оказался Public и режет входящие.
- Аудит сервера с несколькими NIC: DMZ‑интерфейс — Public, внутренний — Private/DomainAuthenticated.
- Контроль после клонирования ВМ: убедиться, что профиль не остался Public на prod‑интерфейсе.
Устранение неполадок
- Профиль «застрял» в Public: проверьте службу Network Location Awareness (NlaSvc), корректность маршрутизации и DNS.
- Интерфейс «Unidentified network»: задайте корректные шлюз/DNS, проверьте метрики маршрутов и отключите лишние виртуальные свитчи.
- Удалённая проверка не работает: откройте WinRM (5985/5986), настройте TrustedHosts или используйте CredSSP при необходимости делегирования.
- Гипервизор/контейнеры: vEthernet‑интерфейсы Hyper‑V/WSL могут создавать дополнительные профили — фильтруйте по Alias.
- Непоследовательность IPv4/IPv6: если IPv6Connectivity=NoTraffic, но нужен доступ по IPv6, проверьте RA/DHCPv6 и фильтры ICMPv6.
Практические приёмы автоматизации
# Отчёт обо всех публичных профилях в домене
$servers = (Get-ADComputer -Filter {OperatingSystem -like "*Server*"}).Name
Invoke-Command -ComputerName $servers -ScriptBlock {
  Get-NetConnectionProfile | Where-Object NetworkCategory -eq 'Public' |
    Select-Object PSComputerName, InterfaceAlias, IPv4Connectivity, IPv6Connectivity
} | Export-Csv .public-profiles.csv -NoTypeInformation
# Мониторинг изменений профиля через планировщик (одна строка лога)
$before = (Get-NetConnectionProfile | Select InterfaceAlias,NetworkCategory | ConvertTo-Json)
Start-Sleep -Seconds 10
$after  = (Get-NetConnectionProfile | Select InterfaceAlias,NetworkCategory | ConvertTo-Json)
if ($before -ne $after) { Add-Content .profile-changes.log "$(Get-Date) profile changed" }
Рекомендации безопасности
- Для интерфейсов в Интернет/DMZ используйте Public и явно открывайте только необходимые порты.
- Во внутреннем сегменте — Private/DomainAuthenticated для корректной работы файловых сервисов и обнаружения.
- Регулярно инвентаризируйте профили на серверах с несколькими NIC, особенно в облаках и Kubernetes‑нодах.
FAQ по смежным темам ❓
- Как понять, какой профиль брандмауэра сейчас активен?
-  Брандмауэр Windows использует профили, соответствующие сетевым категориям. Проверить можно так: Get-NetFirewallProfile | Select-Object Name, Enabled, DefaultInboundAction, DefaultOutboundActionТакже сопоставьте с Get‑NetConnectionProfile: Public ↔ Domain ↔ Private. 
- Почему я не могу установить NetworkCategory = DomainAuthenticated?
-  Эта категория назначается автоматически службой NLA при успешной аутентификации в домене и обнаружении контроллера. Убедитесь в корректном DNS, времени (NTP), доступности DC и сетевых портов AD. 
- Чем отличается профиль сети от профиля брандмауэра?
-  Сетевой профиль (Public/Private/DomainAuthenticated) описывает контекст подключения; профиль брандмауэра — набор правил, применяемых в этом контексте. Они связаны, но настраиваются разными средствами. 
- Как массово изменить профиль на Private для всех «Unidentified network»?
-  Get-NetConnectionProfile | Where-Object {$_.Name -eq "Unidentified network"} | ForEach-Object { Set-NetConnectionProfile -InterfaceIndex $_.InterfaceIndex -NetworkCategory Private }Запускайте из повышенной PowerShell и протестируйте на стенде. 
- Можно ли это делать на Server Core и через PowerShell 7?
-  Да. Модуль NetTCPIP доступен в Windows PowerShell на Server Core. В PowerShell 7 доступ осуществляется через совместное использование Windows‑модулей; команда работает при наличии совместимости и прав. 
- Как увидеть, есть ли у интерфейса доступ в Интернет по IPv4/IPv6?
-  Смотрите поля IPv4Connectivity и IPv6Connectivity. Значение Internet означает выход во внешний сегмент, LocalNetwork — связь внутри подсети/сети без выхода в Интернет. 
