Как создать переменную в powershell для get-netroute для ввода текущих параметров среды

#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