Задача: Получить адрес клиента, который подключается через VPN к RRAS серверу с помощью PowerShell.
В нашей лабе:
- SRV-DC01 — Контроллер домена (ОС 2012+) с роль шлюза Windows PowerShell Web Access
- SRV-VPN — Сервер с ролью RRAS (ОС 2012+)
- W10-CL1 — Клиент (ОС 2012+)
Пример схемы:

1. Установка Windows PowerShell Web Access
Данная процедура подробно описана в Install and Use Windows PowerShell Web Access ,
поэтому лишь выполним основные действия на SRV-DC01.
# Установка роли
Install-WindowsFeature –Name WindowsPowerShellWebAccess -IncludeManagementTools -Restart
# После перезагрузки
# Установка и настройка web приложения с self-signed сертификатом(
# рекомендуется использовать только в тестовых средах)
# Path: /pswa
# ApplicationPool: pswa_pool
# EnabledProtocols: http
# PhysicalPath: %windir%/Web/PowerShellWebAccess/wwwroot
Install-PswaWebApplication –UseTestCertificate

Осталось добавить только правила доступа для PSWA. Лучше создавать правила для групп, а не отдельных пользователей.
Для нашего примера, создадим группу helpdesk_vpn в которую будет входить пользователь contoso\user1.
# Создадим группу
New-ADGroup -Name helpdesk_vpn -GroupCategory Security -GroupScope Universal
# Добавим пользователя в нее
Add-ADGroupMember -Identity helpdesk_vpn -Members User1
После создания группы, создадим правило для доступа с параметрами: подключение ведется к SRV-VPN, кому разрешено contoso\helpdesk, constrained endpoints с именем VPN.
# Правило доступа
$param = @{
RuleName = "Helpdesk VPN"
UserGroupName = "contoso\helpdesk_vpn"
ComputerName = "srv-vpn"
ConfigurationName = "VPN"
Force = $true
}
Add-PswaAuthorizationRule @param
PS > Add-PswaAuthorizationRule @param
Id RuleName User
— ——— —-
0 Helpdesk VPN contoso\helpdesk_vpn
2. Перейдем к созданию constrained endpoints на сервере SRV-VPN
Требуемый функция Get-RemoteAccessConnectionStatistics находится в модуле RemoteAccess.
В этом можно убедиться:
Т.к. у helpdesk_vpn права на выполнения данного функции — нет, то нужно создать отдельный аккаунт от которого будет запускаться функция или добавить пользователя в группу у которой есть право на выполнение(например Администраторы). Начиная с PowerShell v5+ у командлета
New-PSSessionConfigurationFile появился параметр -RunAsVirtualAccount , позволяя обойтись без создания дополнительных групп и пользователей. Т.к. данный аккаунт по умолчанию входит в локальную группу Администраторов в ОС начиная с 2008 R2. При конфигурировании надо быть очень осторожным, т.к. неверное конфигурирования даст пользователю возможность запускать команды от более привилегированного пользователя.
PSv5+:
# Создание constrained endpoints
# Данные командлеты требуются, если пользовать захочит сделать Enter-PsSession
$Cmdlets = @(
'Get-Command', 'Out-Default',
'Exit-PSSession', 'Measure-Object',
'Select-Object' , 'Get-FormatData'
)
# Параметры
$param = @{
Path = ".\VisibleCmdlets.pssc"
VisibleCmdlets = $Cmdlets
VisibleFunctions = "RemoteAccess\Get-RemoteAccessConnectionStatistics"
SessionType = "RestrictedRemoteServer"
LanguageMode = "NoLanguage"
RunAsVirtualAccount = $true
}
# Конфигурирование и назначение прав
New-PSSessionConfigurationFile @param
Register-PSSessionConfiguration -Path .\VisibleCmdlets.pssc -Name VPN -Force
Get-PSSessionConfiguration VPN | Set-PSSessionConfiguration -ShowSecurityDescriptorUI
Для PSv4+:
Тут указываем учетную запись обладающую правами локального администратора
(отвечает параметр -RunAsCredential «Contoso\Administrator») .
# Создание constrained endpoints
# Данные командлеты требуются, если пользовать захочит сделать Enter-PsSession
$Cmdlets = @(
'Get-Command', 'Out-Default',
'Exit-PSSession', 'Measure-Object',
'Select-Object' , 'Get-FormatData'
)
# Параметры
$param = @{
Path = ".\VisibleCmdlets.pssc"
VisibleCmdlets = $Cmdlets
VisibleFunctions = "Get-RemoteAccessConnectionStatistics"
ModulesToImport = "RemoteAccess"
}
# Конфигурирование и назначение права
New-PSSessionConfigurationFile @param
Register-PSSessionConfiguration -Path .\VisibleCmdlets.pssc -Name VPN -RunAsCredential "Contoso\Administrator" -Force
Get-PSSessionConfiguration VPN | Set-PSSessionConfiguration -ShowSecurityDescriptorUI

Если все прошло без ошибок, то у Вас должно быть примерно следущее:

3. Осталось сделать тест и убедиться, что все отрабатывает хорошо.
Переходим по адресу https://mypswa.ru/pswa и заполняем поля
User Name, Password, Computer Name,Configuration name и нажимаем Sign In.

Выполняем функцию:

Доступные нам команды в сессии:

Read Full Post »