【问题标题】:Can Win32_NetworkAdapterConfiguration.EnableStatic() be used to set more than one IP address?Win32_NetworkAdapterConfiguration.EnableStatic() 可以用来设置多个 IP 地址吗?
【发布时间】:2010-05-26 15:39:13
【问题描述】:

我在一个使用 WMI 但可以在 PowerShell 中确认的 Visual Basic 程序中遇到了这个问题。显然 EnableStatic() 方法只能用于设置一个 IP 地址,尽管它采用了两个参数 IP 地址和子网掩码,它们是数组。

$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 中它更复杂,必须传递数组,但该方法似乎只考虑每个数组的第一个元素。

我是又糊涂了还是这里有什么逻辑?

【问题讨论】:

    标签: .net powershell wmi


    【解决方案1】:

    我通过使用带有匹配的子网掩码数组的 IP 数组使其工作。这是 A 类私有子网的示例。

    $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)
    

    【讨论】:

    • 上面有点复杂,但是两个数组的技巧是有效的。
    【解决方案2】:

    尝试使用演员表:

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

    $ips 实际上不是一个字符串数组;它是一个对象数组。有时,powershell 的绑定器会与数组混淆,因为消除歧义的细微之处比第一次见到未经训练的眼睛更复杂。

    -奥辛

    【讨论】:

    • 我检查了类型,你是对的。但是,现在当我执行 $nic.EnableStatic("192.168.1.43","255.255.255.0") 时,我总是得到 2147786788 的返回值。我认为这是一个不相关的问题,但会使测试变得困难。
    • 实际上,使用 string[] $ips 调用 EnableStatic() 会给我结果 90(“参数超出范围。”)。有什么想法吗?
    • 尝试:$a.EnableStatic([string[]]$ips, [string[]]@("255.255.255.0"))
    • 我先做了一个$ips=[string[]]$ips。
    【解决方案3】:

    要成功调用,网络掩码需要有一个匹配的字符串数组....

    例如:

    $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)
    

    这就是第二篇文章中的示例有效的原因......

    【讨论】:

    • 你不是在创建一个单独的字符数组吗?你试过这个吗?我在想 $mask="255.255.255.0","255.255.255.0" 会更好。
    猜你喜欢
    • 2022-08-20
    • 2021-12-09
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 2013-01-12
    • 2015-05-20
    相关资源
    最近更新 更多