LevT
Platinum Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Массовое создание VPN-подключений как пример использования: 1) ValueFromPipelineByPropertyName (потому что Add-VpnConnection предусматривает такое использование) 2) filter (разновидность функции) 3) разных комплектов свойств у объектов в трубе 4) "читабельного скриптования" (с) Параметры настройки, без изменения которых нифига не заработает - отправляются наверх скрипта. Код: #параметры подключений отражаем в CSV прямо в тексте скрипта $properties = @" Connection,vpn.domain.ru,l2tp Connection1,vpn1.domain.ru,sstp "@ $L2tpPsk = 'T0pSecRet' $DnsSuffix = 'corp.domain.ru' $inputObj = $properties | ConvertFrom-Csv -Header Name, ServerAddress, TunnelType #в фильтре можно сделать что угодно с отдельными объектами в передаваемом по трубе массиве - #но тут предполагается что у всех подключений типа l2tp должно стать больше на одно свойство L2tpPsk, c одинаковым значением filter Add-L2tpPSk([string]$Value) { if ($_.TunnelType -eq 'l2tp') { $_ | Add-Member -MemberType NoteProperty -Name L2tpPsk -Value $Value } $_ } #динамический параметр -L2tpPsk валиден только для l2tp подключений $inputObj = $inputObj | Add-L2tpPSk -Value $L2tpPsk #для меняющихся параметров пользуем ValueFromPipelineByPropertyName, остальные задаём прямо тут $inputObj | Add-VpnConnection -DnsSuffix $DnsSuffix -AllUserConnection -RememberCredential -SplitTunneling -Force | ЗЫ. Если кто не понял: всё это написано вместо пары команд Add-VpnConnection с длинным хвостом параметров каждая Решаемая задача - не добавить два каких-то подключения, а продемонстрировать читабельный скрипт, поддающийся изменениям в считаных очевидных местах. То же самый результат с использованием автоматического выбора VPN-протокола: Код: #параметры подключений отражаем в CSV прямо в тексте скрипта $properties = @" Connection,vpn.domain.ru Connection1,vpn1.domain.ru "@ $L2tpPsk = 'T0pSecRet' $DnsSuffix = 'corp.domain.ru' $inputObj = $properties | ConvertFrom-Csv -Header Name, ServerAddress #для меняющихся параметров пользуем ValueFromPipelineByPropertyName, остальные задаём прямо тут $inputObj | Add-VpnConnection -L2tpPsk $L2tpPsk -DnsSuffix $DnsSuffix -AllUserConnection -RememberCredential -SplitTunneling -Force | Добавлено: ЗЫ. До сих пор всё относилось к коробочной винде, в которой учётные данные созданных ВПН подключений надо будет однократно вбить ручками. Для автоматизации этого занятия есть модуль https://www.powershellgallery.com/packages/VPNCredentialsHelper Код: Find-PackageProvider -ForceBootstrap #заглушка чтобы обойти интерактивный вопрос и автоматом поставить nuget dll, нужную для менеджера пакетов Install-Module VPNCredentialsHelper -Force $param = @{ domain = 'corp' username = 'VPupkin' password = '123' } $inputObj | Foreach -Process {Set-VpnConnectionUsernamePassword -connectionname $_.Name @param} | Оставлять в скриптах учётные данные в текстовом виде вообще-то некомильфо...
| Всего записей: 17149 | Зарегистр. 14-10-2001 | Отправлено: 20:02 07-01-2019 | Исправлено: LevT, 19:53 09-01-2019 |
|