PowerShell:基于动态接口索引添加新路由

我有运行路由打印的日常程序,以查找新VPN连接的接口索引 然后执行ROUTE ADD {IP} MASK {MASK} IF {InterfaceIndex}

我认为在PowerShell中使用单个脚本会更好。

在PS中,我可以运行: Get-NetIPInterface -InterfaceAlias "{InterfaceAlias}" 返回ifIndex。

那我不确定。 我需要跑步吗New-NetRoute?以及如何使用IP和MASK在其中输入IfIndex?

zhihao222 回答:PowerShell:基于动态接口索引添加新路由

您可以执行以下操作以添加非持久性路由:

$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在这里(@Params)的使用只是为了使*-NetRoute命令更具可读性。
  • 您只需要使用接口名称更新$InterfaceAlias,并使用CIDR表示法更新DestinationPrefix
  • $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

本文链接:https://www.f2er.com/3145820.html

大家都在问