Это не проблема или ограничение кода PowerShell. Это ограничение. Net. В этом классе нет свойства, позволяющего идентифицировать связанный интерфейс NI C.
Win32_IP4PersistedRouteTable
Операционная система сохраняет постоянные маршруты в реестре ... Этот класс применим только к IPv4 и не возвращает данные IPX или IPv6.
[dynamic, provider("RouteProvider"), UUID("{2CAF4666-AC9B-45AB-00A6-AF8C537794C2}"), SupportsCreate, CreateBy("PutInstance"), SupportsDelete, DeleteBy("DeleteInstance"), AMENDMENT]
class Win32_IP4PersistedRouteTable : CIM_LogicalElement
{
string Caption; # This property is inherited from CIM_ManagedSystemElement.
string Description;
string Destination;
datetime InstallDate;
string Mask;
sint32 Metric1;
string Name;
string NextHop;
string Status;
};
Обновление по нашей ветке ниже
Итак, ваш запрос ...
'в любом случае, чтобы вернуться NI C для каждого сохраняемого маршрута корреспондента? '
... ответ, как я уже сказал, мне неизвестен, используя только то, что вы показываете. Вы должны получить эти данные и сравнить их с другими результатами других сетевых командлетов.
IPv6 и IPv4 Поддержка в WMI
WMI IP Route Provider и сеть классы предоставляют данные для адресов IPv4. Начиная с Windows Vista, WMI также предоставляет ограниченную поддержку сетевых возможностей IPv6.
Данные IP WMI Следующие классы предоставляют только данные IPv4:
Win32_IP4RouteTable
Win32_IP4PersistedRouteTable
Win32_IP4RouteTableEvent
Win32_ActiveRoute
Win32_NetworkAdapter
PowerShell, несмотря на это. Ключевые свойства доступны для чтения.
VBSCript
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_IP4PersistedRouteTable",,48)
Dim objItem 'as Win32_IP4PersistedRouteTable
For Each objItem in colItems
WScript.Echo "Caption: " & objItem.Caption
WScript.Echo "Description: " & objItem.Description
WScript.Echo "Destination: " & objItem.Destination
WScript.Echo "InstallDate: " & objItem.InstallDate
WScript.Echo "Mask: " & objItem.Mask
WScript.Echo "Metric1: " & objItem.Metric1
WScript.Echo "Name: " & objItem.Name
WScript.Echo "NextHop: " & objItem.NextHop
WScript.Echo "Status: " & objItem.Status
WScript.Echo ""
Next
Свойство Mask As string (только для чтения)
Свойство Mask содержит маску, используемую в этой постоянной записи , Маски должны иметь логическое AND с адресом назначения перед сравнением со значением в поле ipRouteDest.
Свойство NextHop As string (только для чтения)
Свойство NextHop содержит IP-адрес следующий прыжок этого постоянного маршрута. (В случае маршрута, привязанного к интерфейсу, который реализуется через широковещательную среду, значением этого поля является IP-адрес агента на этом интерфейсе.).
Инструменты в Windows (route, netsh, et c ...) используйте классы, чтобы делать то, что они делают.
Вы можете просто проанализировать команду печати маршрута, если в ней есть информация, которую вы ищете для:
Cmd.exe (DOS) инструментов для объекта PowerShell
$tmpRoute = (route print | ? { $_.trimstart() -like "0.0.0.0*" }).split() | ? { $_ }
$route = @{
'Destination' = $tmpRoute[0];
'Netmask' = $tmpRoute[1];
'Gateway' = $tmpRoute[2];
'Interface' = $tmpRoute[3];
'Metric' = $tmpRoute[4];
}
$route
WMI извлекает его непосредственно с компьютера (локального или удаленного):
$computer = 'localhost'
$wmi = get-wmiobject -namespace root\StandardCimv2 -computername 'localhost' -Query "Select * from MSFT_NetRoute"
$wmi | ? { $_.DestinationPrefix -eq '0.0.0.0/0' } |
Select DestinationPrefix, InterfaceAlias, InterfaceIndex, InterfaceMetric, NextHop, RouteMetric
См. Этот скрипт ...
... показывая прямые вызовы WMI в это пространство имен ...
# WMI data
$wmi_routes = Get-WmiObject @WMIHast -Class win32_ip4RouteTable
$wmi_persistedroutes = Get-WmiObject @WMIHast -Class win32_IP4PersistedRouteTable
foreach ($iproute in $wmi_routes)
{
$Persistant = $false
foreach ($piproute in $wmi_persistedroutes)
{
if (($iproute.Destination -eq $piproute.Destination) -and
($iproute.Mask -eq $piproute.Mask) -and
($iproute.NextHop -eq $piproute.NextHop))
{
$Persistant = $true
}
}
$RouteProperty = @{
'InterfaceIndex' = $iproute.InterfaceIndex
'Destination' = $iproute.Destination
'Mask' = $iproute.Mask
'NextHop' = $iproute.NextHop
'Metric' = $iproute.Metric1
'Persistent' = $Persistant
'Type' = $RouteType[[int]$iproute.Type]
}
$Routes += New-Object -TypeName PSObject -Property $RouteProperty
}
...
Или даже используя этот класс для прямой установки постоянных маршрутов.
# Set objWMIClass = objWMIServices.Get (cWMIIPPersistedRouteClass)
$class = gwmi -list win32_ip4persistedroutetable -EnableAll -Computer remotehost1
#Set objWMIPersistentInstance = objWMIClass.SpawnInstance_
$newroute = $class.CreateInstance()
#objWMIPersistentInstance.Destination = strDestination
$newroute.Destination = $destination
#objWMIPersistentInstance.Mask = strMask
$newroute.Mask = $mask
#objWMIPersistentInstance.NextHop = strNextHop
$newroute.NextHop = $nexthop
#objWMIPersistentInstance.Metric1 = intMetric
$newroute.Metric1=$metric
$newroute.Put()
$newroute.Destination='10.10.10.101'
$newroute.Mask='255.255.255.0'
$newroute.NextHop='10.10.10.1'
$newroute.Metric1=30
$newroute.Put()