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

PowerShell:基于动态接口索引添加新路由,powershell,Powershell,我有一个运行路由打印的日常程序,以查找新VPN连接的接口索引 然后执行路由添加{IP}MASK{MASK}如果{InterfaceIndex} 我认为在PowerShell中使用一个脚本可能会更好 在PS中,我可以运行: Get NetIPInterface-InterfaceAlias“{InterfaceAlias}” 返回ifIndex 那我就不确定了。 我需要运行新的网络路由吗?如何使用IP和掩码向iIndex提供信息?您可以执行以下操作来添加非持久路由: $InterfaceAlias

我有一个运行路由打印的日常程序,以查找新VPN连接的接口索引 然后执行
路由添加{IP}MASK{MASK}如果{InterfaceIndex}

我认为在PowerShell中使用一个脚本可能会更好

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

那我就不确定了。
我需要运行新的网络路由吗?如何使用IP和掩码向iIndex提供信息?

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

$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
说明:

  • 此处使用(
    @Params
    )只是为了使
    *-NetRoute
    命令更具可读性
  • 您只需使用您的接口名称更新
    $InterfaceAlias
    ,并使用CIDR符号更新
    DestinationPrefix
  • $null=
    用于抑制
    新NetRoute
    的输出,如果您想查看输出,可以将其删除
  • 如果希望路由在重新启动期间保持不变,请删除
    PolicyStore='ActiveStore'
    行。默认情况下,
    newnetroute
    命令将路由添加到活动存储(非持久存储)和持久存储
  • 访问
    获取NetIPConfiguration$InterfaceAlias
    命令的
    .IPv4DefaultGateway
    ,返回
    新建NetRoute
    所需的
    NextHop
    属性
  • 接口别名可以跨多个索引共享。当您启用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

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

$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
说明:

  • 此处使用(
    @Params
    )只是为了使
    *-NetRoute
    命令更具可读性
  • 您只需使用您的接口名称更新
    $InterfaceAlias
    ,并使用CIDR符号更新
    DestinationPrefix
  • $null=
    用于抑制
    新NetRoute
    的输出,如果您想查看输出,可以将其删除
  • 如果希望路由在重新启动期间保持不变,请删除
    PolicyStore='ActiveStore'
    行。默认情况下,
    newnetroute
    命令将路由添加到活动存储(非持久存储)和持久存储
  • 访问
    获取NetIPConfiguration$InterfaceAlias
    命令的
    .IPv4DefaultGateway
    ,返回
    新建NetRoute
    所需的
    NextHop
    属性
  • 接口别名可以跨多个索引共享。当您启用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

谢谢。我在哪里可以像以前对批处理一样指定掩码?您不需要这样做。您可以使用CIDR符号,即掩码255.255.255.0 is/24。这有意义吗?是的,我需要喝点苹果酒。。。谷歌搜索到,基于CIDR子网表,我需要两个/16和/24,就像我之前做的两个路由添加一样。@RandyMcKay,我添加了另一个代码块,该代码块将接受掩码并为您进行转换。如果您启用了IPv4和IPv6,您可以有两个共享相同接口别名的接口,但它们的索引不同。因为我使用的是AddressFamily IPv4,所以现在只返回一个接口。NextHop是该接口的默认网关(IPv4地址)。如果你不喜欢,你可以改一下。谢谢。我在哪里可以像以前对批处理一样指定掩码?您不需要这样做。您可以使用CIDR符号,即掩码255.255.255.0 is/24。这有意义吗?是的,我需要喝点苹果酒。。。谷歌搜索到,基于CIDR子网表,我需要两个/16和/24,就像我之前做的两个路由添加一样。@RandyMcKay,我添加了另一个代码块,该代码块将接受掩码并为您进行转换。如果您启用了IPv4和IPv6,您可以有两个共享相同接口别名的接口,但它们的索引不同。因为我使用的是AddressFamily IPv4,所以现在只返回一个接口。NextHop是该接口的默认网关(IPv4地址)。如果你不喜欢,你可以改变。