PowerShell: добавление нового маршрута на основе динамического индекса интерфейса - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть ежедневная процедура запуска печати маршрута, чтобы найти Интерфейсный указатель для нового VPN-подключения, а затем выполняю ROUTE ADD {IP} MASK {MASK} IF {InterfaceIndex}.

Я думаю, что может быть лучше один сценарий в PowerShell.

Там в PS я могу запустить: Get-NetIPInterface -InterfaceAlias "{InterfaceAlias}", который возвращает ifIndex.

Тогда я не уверен. Это New-NetRoute мне нужно бежать? А как мне там кормить IfIndex с помощью IP и MASK?

1 Ответ

1 голос
/ 07 ноября 2019

Для добавления непостоянного маршрута вы можете сделать следующее:

$InterfaceAlias = '{InterfaceAlias}'
$Params = @{
    InterfaceAlias = $InterfaceAlias
    NextHop = (Get-NetIPConfiguration -InterfaceAlias $InterfaceAlias).IPv4DefaultGateway.NextHop
    AddressFamily = 'IPv4'
    DestinationPrefix = '{IP}/{NetworkBits}' # Example: 192.168.100.0/24
    PolicyStore = 'ActiveStore'
}
$null = New-NetRoute @Params
Get-NetRoute @Params

Объяснение:

  • Splatting isиспользуется здесь (@Params) просто для того, чтобы сделать команды *-NetRoute более читабельными.
  • Вам нужно только обновить $InterfaceAlias с помощью имени вашего интерфейса и обновить DestinationPrefix с использованием нотации CIDR.
  • $null = используется для подавления вывода New-NetRoute и может быть удален, если вы хотите увидеть вывод.
  • Если вы хотите, чтобы маршрут сохранялся при перезагрузке, удалитеPolicyStore = 'ActiveStore' строка. По умолчанию команда New-NetRoute добавляет маршрут в активное хранилище (не постоянное) и постоянное хранилище.
  • При обращении к .IPv4DefaultGateway команды Get-NetIPConfiguration $InterfaceAlias возвращает свойство NextHop, необходимое дляNew-NetRoute.
  • Псевдонимы интерфейса могут совместно использоваться несколькими индексами. Вы видите это, когда у вас включены IPv4 и IPv6. Разница между псевдонимами общего интерфейса IPv4 и IPv6 заключается в индексе интерфейса. Поскольку в наших командах мы специально нацелены на семейство адресов IPv4, нам не нужно указывать или запрашивать индекс.

Примечание: Команда New-NetRoute должнабыть запущенным от имени администратора.

Дополнительные замечания:


Если вам не подходит нотация CIDR, вы можете использовать следующее, что позволит использовать маску сети.

$InterfaceAlias = '{InterfaceAlias}'
$DestinationNetwork = '{DestinationIP}' # 192.168.200.0 for example
$Mask = '{MASK}' # 255.255.255.0 for example

$CIDR = "{0}/{1}" -f $DestinationNetwork,(-join ($Mask -split '\.' |% {[convert]::ToString($_,2).Trim('0')})).Length
$Params = @{
    InterfaceAlias = $InterfaceAlias
    NextHop = (Get-NetIPConfiguration -InterfaceAlias $InterfaceAlias).IPv4DefaultGateway.NextHop
    AddressFamily = 'IPv4'
    DestinationPrefix = $CIDR
    PolicyStore = 'ActiveStore'
}
$null = New-NetRoute @Params
Get-NetRoute @Params

Объяснение: Здесь просто обновите $InterfaceAlias, $DestinationNetwork и $Mask для вашей ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...