首页 > 解决方案 > Remove-AzureRmRouteConfig 不适用于 where-object 与 Get-AzureRmRouteConfig 一样

问题描述

Get-AzureRmRouteConfig -RouteTable $rt | Where-Object {$_.Name -like "*virginia*"}

获取所有具有预期名称的路由配置。例如,usgovvirginia_1

Remove-AzureRmRouteConfig -RouteTable $rt | Where-Object {$_.Name -like "*virginia*"}

给出这个错误

Remove-AzureRmRouteConfig : Sequence contains no matching element
At line:1 char:1
+ Remove-AzureRmRouteConfig -RouteTable $rt | Where-Object {$_.Name -li ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Remove-AzureRmRouteConfig], InvalidOperationException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.Network.RemoveAzureRmRouteConfigCommand

我一直在尝试使用 PowerShell 处理路由表,所以我想了解为什么这不起作用

标签: azurepowershell

解决方案


它不工作的原因是因为管道从左到右工作,即从左边输出的命令馈送到右边的下一个。

在您的情况下,您尝试在选择路线之前删除路线。

尝试下面的代码(还要注意最后的 Set-AzureRmRouteTable,因为除非最后执行 Set 命令,否则不会应用您的更改)

$rt = Get-AzureRmRouteTable -ResourceGroupName "your route table - resource group name"

Get-AzureRmRouteConfig -RouteTable $rt | where-object {$_.Name -like "*virginia*"} | ForEach-Object
 {Remove-AzureRmRouteConfig -RouteTable $rt -Name $_.Name | Set-AzureRmRouteTable}

您也可以查看 Microsoft 文档上的示例 - https://docs.microsoft.com/en-us/powershell/module/azurerm.network/remove-azurermrouteconfig?view=azurermps-6.7.0

在您的第一个命令中,您首先获取路由,然后选择与路由顶部的模式/应用过滤器匹配的特定路由,这样它就可以正常工作。

Get-AzureRmRouteConfig -RouteTable $rt | Where-Object {$_.Name -like "*virginia*"}

在您的第二个命令中,您尝试先删除路由,然后选择与顶部的模式/应用过滤器匹配的特定路由,因此它失败了

Remove-AzureRmRouteConfig -RouteTable $rt | Where-Object {$_.Name -like "*virginia*"}

推荐阅读