Jump to content
edgarfelix

VB.NET... Alterar gateway....

Recommended Posts

edgarfelix

Olá a todos! Um bem haja...

Estou aqui com uma dúvida. Gostaria, se possível, passar o seguinte código para vb.net e que tivesse o mesmo comportamento.

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

strGateway = Array("192.168.0.254")
strGatewayMetric = Array(1)

For Each objNetAdapter in colNetAdapters
     errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
Next

Já tentei algumas vezes, mas não estou a conseguir... tenho o programa que estou a fazer praticamente completo, apenas falta esta parte passar para vb.net.. para não ter de executar os ficheiros vbs....

Alguém ajuda?

Cumprimentos. :)

Share this post


Link to post
Share on other sites
ribeiro55

Claro que é possível.

A framework é brutal!

        Dim MOS As New ManagementObjectSearcher("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

        For Each MO As ManagementObject In MOS.Get
            
            'descomenta a linha abaixo para definir o IP
            'MO.SetPropertyValue("DefaultIPGateway", New String() {"192.168.1.1"})

            'descomenta as linhas debaixo para listares todos os IPs (em jeitos de teste, vá)
            'For Each PDC As PropertyData In MO.Properties
                'If PDC.Name.ToLower = "defaultipgateway" Then
                    'For Each IP As String In CType(PDC.Value, String())
                        'MsgBox(IP)
                    'Next
                'End If
            'Next


        Next

Precisas de acrescentar uma Reference a "System.Management", que é a classe necessária para este tipo de operações.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
edgarfelix

Boas.. Obrigado pela resposta! E claro a framework é muito brutal.  :)

Mas isto apenas está a mostrar-me a defaultipgateway, mas queria era que alterasse nas configurações da gateway..

?

Share this post


Link to post
Share on other sites
ribeiro55

Deixei-te dois blocos comentados distintos:

O segundo mostra, o primeiro altera.

Pode é não ser essa a propriedade que pretendes, mas é uma questão de iterares as propriedades do ManagementObject e descobrires a que te interessa, e para isso é que te deixei o segundo bloco :)


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
edgarfelix

Através do WMI Code Creator fui buscar o seguinte código. Mas o que precisava mesmo de ajuda era a alterar o código de forma a que ao executar ele alterasse a gateway na configuração de rede... Alguém?? Agradeço e peço desculpa por estar a incomodar o pessoal... :wallbash:

Imports System
Imports System.Management
Imports System.Windows.Forms

Namespace WMISample

    Public Class MyWMIQuery

        Public Overloads Shared Function Main() As Integer

            Try
                Dim searcher As New ManagementObjectSearcher( _
                    "root\CIMV2", _
                    "SELECT * FROM Win32_NetworkAdapterConfiguration") 

                For Each queryObj As ManagementObject in searcher.Get()

                    Console.WriteLine("-----------------------------------")
                    Console.WriteLine("Win32_NetworkAdapterConfiguration instance")
                    Console.WriteLine("-----------------------------------")

                    If queryObj("DefaultIPGateway") Is Nothing Then
                        Console.WriteLine("DefaultIPGateway: {0}", queryObj("DefaultIPGateway"))
                    Else
                        Dim arrDefaultIPGateway As String()
                        arrDefaultIPGateway = queryObj("DefaultIPGateway")
                        For Each arrValue As String In arrDefaultIPGateway
                            Console.WriteLine("DefaultIPGateway: {0}", arrValue)
                        Next
                    End If
                Next
            Catch err As ManagementException
                MessageBox.Show("An error occurred while querying for WMI data: " & err.Message)
            End Try
        End Function
    End Class
End Namespace

Share this post


Link to post
Share on other sites
ribeiro55

MO.SetPropertyValue("DefaultIPGateway", New String() {"192.168.1.1"}

Juntamente com o resto do código que te dei não te faz nada? Aqui faz...


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
edgarfelix
Juntamente com o resto do código que te dei não te faz nada? Aqui faz...

Queres dizer juntar o código que disponibilizaste com o código obtido no WMI?? Se sim, em que parte o adicionaste?

Share this post


Link to post
Share on other sites
BELGA

Estou mesmo a precisar de ajuda para poder terminar esta parte!  :)

Tens tudo o que precisas no WMI CC.

Executa-o, vai a "Execute a Method", escolhe a classe, depois escolhe o método SetGateways. Depois basta mudares os valores e tens o código feito... é só adaptar ao projecto.

Share this post


Link to post
Share on other sites
edgarfelix

Obtive o seguinte:

Imports System
Imports System.Management
Imports System.Windows.Forms

Namespace WMISample

    Public Class CallWMIMethod

        Public Overloads Shared Function Main() As Integer

            Try

                Dim classInstance As New ManagementObject( _
                    "root\CIMV2", _
                    "Win32_NetworkAdapterConfiguration.Index='0'", _
                    Nothing)

                ' Obtain [in] parameters for the method
                Dim inParams As ManagementBaseObject = _
                    classInstance.GetMethodParameters("SetGateways")

                ' Add the input parameters.
                inParams("DefaultIPGateway") =  "192.168.0.254"
                inParams("GatewayCostMetric") =  1

                ' Execute the method and obtain the return values.
                Dim outParams As ManagementBaseObject = _
                    classInstance.InvokeMethod("SetGateways", inParams, Nothing)

                ' List outParams
                Console.WriteLine("Out parameters:")
                Console.WriteLine("ReturnValue: {0}", outParams("ReturnValue"))

            Catch err As ManagementException

                MessageBox.Show("An error occurred while trying to execute the WMI method: " & err.Message)
            End Try
        End Function
    End Class
End Namespace

Share this post


Link to post
Share on other sites
edgarfelix

MO.SetPropertyValue("DefaultIPGateway", New String() {"192.168.1.1"}

Juntamente com o resto do código que te dei não te faz nada? Aqui faz...

Boas.. se não for pedir muito dá-me o código que te funcionou aí... Ok?

Share this post


Link to post
Share on other sites
ribeiro55

Já seria a terceira vez.

Com a tua citação a quarta.

Não funciona aí?


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
ribeiro55

Não há nada para adaptar.

Para testares basta chapar isso que te dei, até num formload, e tirar os comentários.

Pode é não funcionar correctamente por esta e por aquela razão, mas já tens mais algum sítio por onde analisar possibilidades.

Aqui funciona, mas tenho o UAC e níveis de segurança completamente no chão.

Não sei até que ponto é que a framework se abana aí em determinadas condições.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
edgarfelix

pelo que pude ver no código que me deste na tua primeira resposta... apenas me está a mostrar a default gateway e não altera nas configurações da gateway da placa de rede...

Percebes?

Share this post


Link to post
Share on other sites
edgarfelix

mas nesse código que deste ele altera-te a gateway na placa de rede? é que aqui não...

Share this post


Link to post
Share on other sites
ribeiro55

SETPropertyValue, é a linha que lá está. SET não mostra nada. SET define.

As restantes são para comprovar que o acabou de fazer.

Se aí não faz é porque precisas de escarafunchar mais nos management objects, nomeadamente para desactivar atribuições automáticas e afins que podem perfeitamente impedir que aí aconteça... ou que causem um "rollback".

Tens uma forma de fazer pesquisas aos management objects, tens uma forma de escrever propriedades... mais que isto não te consigo ajudar.

É esperar que alguém já tenha feito de maneira diferente, que te surta algum efeito.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.