Можно ли использовать Win32_NetworkAdapterConfiguration.EnableStatic () для установки более одного IP-адреса? - PullRequest
1 голос
/ 26 мая 2010

Я столкнулся с этой проблемой в программе Visual Basic, которая использует WMI, но может подтвердить ее в PowerShell. Очевидно, метод EnableStatic () можно использовать только для установки одного IP-адреса, несмотря на то, что он принимает два параметра: IP-адрес (а) и маску (-и) подсети, которые являются массивами.

* 1003 Т.е. *

$a=get-wmiobject win32_networkadapterconfiguration -computername myserver

Это дает мне массив всех сетевых адаптеров на "myserver". После выбора конкретного (в данном случае $ a = $ a [14]) я могу запустить $ a.EnableStatic () с такой подписью

System.Management.ManagementBaseObject EnableStatic(System.String[] IPAddress, System.String[] SubnetMask)

Я думал, что это означает, что я мог бы установить несколько IP-адресов следующим образом:

$ips="192.168.1.42","192.168.1.43"
$a.EnableStatic($ips,"255.255.255.0")

Но этот вызов не удался. Однако этот вызов работает:

$a.EnableStatic($ips[0],"255.255.255.0")

Мне кажется, что EnableStatic () действительно принимает в качестве параметров две строки, а не два массива строк.

В Visual Basic это более сложно, и массивы должны быть переданы, но метод, по-видимому, учитывает только первый элемент каждого массива.

Я снова запутался или здесь есть какая-то логика?

Ответы [ 3 ]

2 голосов
/ 02 декабря 2010

Я получил его с помощью массива IP-адресов с соответствующим массивом масок подсетей Вот пример для частной подсети класса А.

$range = 2..254
$DNS = "8.8.8.8","8.8.4.4"
$gateway = "10.0.0.1"
$registerDns = $true
$IPs = @()
$mask = @()
foreach ($end in $range) {
    $IPs += "10.0.0.$end"
    $mask += "255.0.0.0"
}

$netcon = "Local Area Connection"
$index = (gwmi Win32_NetworkAdapter | where {$_.netconnectionid -eq $NetCon}).InterfaceIndex
$NetInterface = Get-WmiObject Win32_NetworkAdapterConfiguration | where {$_.InterfaceIndex -eq $index}

$NetInterface.EnableStatic($ips, $mask)
$NetInterface.SetGateways($gateway)
$NetInterface.SetDNSServerSearchOrder($dns)
$NetInterface.SetDynamicDNSRegistration($registerDns)
1 голос
/ 27 мая 2010

Попробуйте использовать приведение:

$a.EnableStatic([string[]]$ips,"255.255.255.0") 

$ ips на самом деле не является строковым массивом; это массив объектов. Иногда механизм связывания powershell несколько путается с массивами, поскольку существуют тонкости устранения неоднозначности, которые сложнее, чем кажется на первый взгляд неопытному глазу.

-Oisin

0 голосов
/ 14 сентября 2011

, чтобы вызов был успешным, должен быть соответствующий строковый массив для маски сети ....

, например:

$ip = "10.10.10.10"
$ip += "10.10.10.11"
$ip += "10.10.10.12"
$mask = "255.255.255.0"
$mask += "255.255.255.0
$mask += "255.255.255.0

$nic.enablestatic($ip,$mask)

вот почему пример во 2-м посте работает ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...