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