#windows #powershell #networking
Вопрос:
Поэтому у меня есть немного сложный вопрос, который, возможно, я не совсем уверен, как задать, но я хочу использовать Get-Netroute
команду, чтобы захватить шлюз текущих машин по умолчанию и ввести его в ту же команду, а затем добавить его в качестве маршрута, как показано ниже. Проблема в том, что мне нужно запустить это в экземплярах AWS во многих разных подсетях с множеством разных шлюзов по умолчанию, поэтому мне нужен шлюз для автоматического заполнения в route-add
команде. Мне удалось создать переменную для шлюза по умолчанию, но проблема в том, что get-netroute
команда изменяет вкладки -interfaceindex
и -routemetric
по экземпляру, поэтому мне нужны переменные для обоих. Я открыт для использования других команд, я просто склоняюсь к командам, которые не слишком сложны и могут быть выполнены в 1 строке.
`$defaultgatway = Get-NetRoute -InterfaceIndex 5 -RouteMetric 0 | Select-Object NextHop
route -p ADD 169.254.169.254 MASK 255.255.255.255 $defaultgatway.NextHop
route -p ADD 169.254.169.251 MASK 255.255.255.255 $defaultgatway.NextHop
route -p ADD 169.254.169.250 MASK 255.255.255.255 $defaultgatway.NextHop`
Это ошибка, которую я получаю, когда пытаюсь запустить этот скрипт, как есть, на значениях другой машины, он отлично работал на исходной машине, на которой я его создал: `
Get-NetRoute : No matching MSFT_NetRoute objects found by CIM query for
instances of the ROOT/StandardCimv2/MSFT_NetRoute class on the CIM server:
SELECT * FROM MSFT_NetRoute WHERE ((InterfaceIndex = 5)) AND ((RouteMetric =
0)). Verify query parameters and retry.
At line:1 char:18
$defaultgatway = Get-NetRoute -InterfaceIndex 5 -RouteMetric 0 | Select-Object
N ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo : ObjectNotFound: (MSFT_NetRoute:String) [Get-NetRou
te], CimJobException
FullyQualifiedErrorId : CmdletizationQuery_NotFound,Get-NetRoute
route :
At line:3 char:1
route -p ADD 169.254.169.254 MASK 255.255.255.255 $defaultgatway.NextHop
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo : NotSpecified: (:String) [], RemoteException
FullyQualifiedErrorId : NativeCommandError`
Я предполагаю, что мой общий вопрос заключается в том, как мне получить данные для ввода в эти переменные, какую команду я использую, если не эту? Я точно знаю, как сделать переменную в общем смысле.
Комментарии:
1. Возможно, вы захотите попробовать
Get-NetIPConfiguration
вместо этого. Если есть только 1 сетевой адаптер, который даст вам номер интерфейса и шлюз. Если у вас более одной сетевой карты, вам, возможно, потребуется сделать что-то вродеGet-NetIPConfiguration | where{$_.IPv4DefaultGateway}
того, чтобы выбрать правильную.2. похоже, когда я использую эту команду, в списке шлюзов по умолчанию есть только 1 шлюз. поэтому я просто хотел бы получить-NetIPconfiguration-IPv4DefaultGateway, а затем ввести этот тег в команду маршрута?
3. Тогда делай то же, что
$defaultgatway = Get-NetIPConfiguration
и сейчасNew-NetRoute -DestinationPrefix 169.254.169.254/32 -NextHop $defaultgatway.IPv4DefaultGateway -PolicyStore PersistentStore -InterfaceIndex $defaultGateway.InterfaceIndex
4. эта команда не та, которую я использовал, поэтому я немного запутался, я просто использую route-p
5. Это командлет PowerShell, который используется для добавления маршрутов. Вы можете использовать
route -p add
, если вам это удобнее.
Ответ №1:
Вы можете получить шлюз по умолчанию с Get-NetIpConfiguration
помощью , а затем использовать его в своих route -p add
командах. Поскольку Get-NetIpConfiguration
возвращаемый шлюз является полным экземпляром CIM маршрута шлюза по умолчанию, вам необходимо указать NextHop
свойство. Чтобы сделать это, вы бы в конечном итоге получили вот это:
$defaultgatway = Get-NetIPConfiguration
route -p ADD 169.254.169.254 MASK 255.255.255.255 $defaultgateway.IPv4DefaultGateway.NextHop
route -p ADD 169.254.169.251 MASK 255.255.255.255 $defaultgateway.IPv4DefaultGateway.NextHop
route -p ADD 169.254.169.250 MASK 255.255.255.255 $defaultgateway.IPv4DefaultGateway.NextHop