Netzwerkadapter de & aktivieren

  • Moin,

    ich bin schon etwas länger nach einer Lösung für mein Problem. Leider habe ich dazu nichts gefunden und wollte mir mein Lösungsweg mit AutoIt etwas vereinfachen :)

    Problem

    Jedes mal, wenn ich mein Laptop (MacBook Pro, Win8 64bit) anmache, dann verbindet mein WLAN zum Router ... aber ich habe kein Internet. Um das Problem zu lösen muss ich den WLAN Adapter deaktivieren und aktivieren. Dann funktioniert alles wieder super.
    Sachen wie neue Treiber etc. habe ich bereits probiert.

    Folgendes habe ich bereits gefunden und probiert:

    [autoit]

    #RequireAdmin
    Local Const $wbemFlagReturnImmediately = 0x10, $wbemFlagForwardOnly = 0x20

    [/autoit][autoit][/autoit][autoit]

    _WinWMI_NetworkAdapter_SetState("WiFi", "Disable")
    ;~ _WinWMI_NetworkAdapter_SetState("WiFi", "Enable")

    [/autoit][autoit][/autoit][autoit]

    Func _WinWMI_NetworkAdapter_SetState(Const $sAdapterName, Const $sSetState, Const $sComputer = "127.0.0.1")
    $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!" & $sComputer & "\root\CIMV2")
    If IsObj($oWMI) = 0 Then Return SetError(-1, @error, 0)
    $oList = $oWMI.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionID = '" & $sAdapterName & "'", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($oList) = 0 Or Not IsAdmin() Then Return SetError(-2, @error, 0)
    For $oItem In $oList
    Local $errorlevel = 1
    If $sSetState = "Disable" Then $errorlevel = $oItem.Disable()
    If $sSetState = "Enable" Then $errorlevel = $oItem.Enable()
    If $errorlevel <> 0 Then Return SetError(-3, @error, 0)
    Next
    Return 1
    EndFunc ;==>_WinWMI_NetworkAdapter_SetState

    [/autoit]

    Wie ich auf den Namen "WiFi" komme:
    [Blockierte Grafik: http://picul.de/view/n-R]

    Mache ich da jetzt irgend etwas vollkommen falsch oder habe ich da einfach irgendetwas missverstanden?

    Ich würde mich eure Hilfe sehr freuen :)

    MfG,
    Freaky

  • Moin!

    Versuchs dochmal mit netsh.

    [autoit]

    #RequireAdmin

    [/autoit][autoit][/autoit][autoit]

    $sLANadapter = "WiFi"

    [/autoit][autoit][/autoit][autoit]

    RunWait("netsh interface set interface " & $sLANadapter & " disabled", "", @SW_HIDE)
    RunWait("netsh interface set interface " & $sLANadapter & " enabled", "",@SW_HIDE)

    [/autoit]

    Geht leider nur mit Administratorrechten...

    Die Namen der vorhandenen Adapter kannst du zB so auslesen (Administratorrechte nicht benötigt):

    [autoit]

    #include <AutoItConstants.au3>

    [/autoit][autoit][/autoit][autoit]

    $iRun = Run("netsh interface show interface", "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    While 1
    Local $sLineAll
    $line = StdoutRead($iRun)
    If @error Then ExitLoop
    $sLineAll &= $line
    WEnd

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, "", $sLineAll)

    [/autoit]


    Nachtrag:
    Mit "Run", so wie Phil-IT es unterhalb vorschlägt, wird es eher nicht funktionieren, da der Befehl den Adapter wieder zu aktivieren, durchgeführt wird, bevor dieser überhaupt deaktiviert wurde, daher sollte man "RunWait" verwenden.


    Sanfte Grüße :D

  • [autoit]


    #RequireAdmin

    [/autoit][autoit][/autoit][autoit]

    RunWait("netsh interface set interface WiFi disabled", @WindowsDir & "\system32", @SW_HIDE)
    RunWait("netsh interface set interface WiFi enabled", @WindowsDir & "\system32", @SW_HIDE)

    [/autoit]


    netsh sollte dir weiter helfen:)

    *EDIT: Oh Friesel war wohl schneller, tdm gleiche Idee:)
    Wirklich Friesel geht es bei dir nicht? also bei mir funktioniert es, aber du hast recht zur sicherheit ein RunWait()! Danke! :rolleyes:

    Einmal editiert, zuletzt von philipp (2. September 2014 um 11:40)

  • Wobei die gepostete WMI-Variante bei mir ebenfalls funktioniert.
    Es fehlen allerdings zwei Backslashs.

    Hier mal die bereinigte Variante:

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    _WinWMI_NetworkAdapter_SetState("WiFi", "Disable")
    If @error Then MsgBox(48, "Fehler", "Fehler-Code: " & @error)

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinWMI_NetworkAdapter_SetState(Const $sAdapterName, Const $sSetState, Const $sComputer = "127.0.0.1")
    Local $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\\" & $sComputer & "\root\CIMV2")
    If Not IsObj($oWMI) Then Return SetError(-1, @error, 0)
    $oList = $oWMI.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionID = '" & $sAdapterName & "'", "WQL", 48)
    If (Not IsObj($oList)) Or (Not IsAdmin()) Then Return SetError(-2, @error, 0)
    For $oItem In $oList
    Local $errorlevel = 1
    If $sSetState = "Disable" Then $errorlevel = $oItem.Disable()
    If $sSetState = "Enable" Then $errorlevel = $oItem.Enable()
    If $errorlevel <> 0 Then Return SetError(-3, $errorlevel, 0)
    Next
    Return 1
    EndFunc

    [/autoit]
  • Ich hab jetzt die ganze zeit versucht es irgendwie mit 'RunAsWait(...)' hinzubekommen, aber es funktioniert einfach nicht..
    normalerweise holt der befehl sich ja adminrechte, durch die parameter, aber es funktioniert nicht?! ich hab keine ahnung wieso!

    vielleicht kannst du es ja anders machen indem du via aufgabenplanung eine Verknüpfung im autostartmenü anlegst..
    Hierzu ein komplett Beispiel:

    Spoiler anzeigen


    - Angehängte Datei 'Netzwerk.bat' irgendwohin kopieren, wo sie nicht stört (Pfad merken:D)
    - Start -> Ausführen
    - taskschd.msc
    - Menü 'Aktion' -> Aufgabe erstellen:
    - Name: Netzwerk anaus
    - Mit höchsten Privilegien ausführen anhaken
    - Ausgeblendet anhaken
    - Tab 'Aktionen' -> Neu...
    - Durchsuchen
    - 'Netzwerk.bat' auswählen, da wo zu Beginn kopiert
    - OK
    - OK
    - Aufgabenplanung schließen
    - Start -> Ausführen
    - %appdata%\Microsoft\Windows\Startmenü\Programme\Autostart\
    - Rechtsklick -> Neu -> Verknüpfung
    - C:\Windows\system32\schtasks.exe /RUN /TN "Netzwerk anaus"
    - Weiter
    - Fertig stellen

    Fertig! :)