Page 1 of 1

Netzwerk-Laufwerke

Posted: 02 Feb 2019, 06:38
by moefr01
Liebe AHK-Coder 8-) ,
da ich es leid bin, jedesmal unter Windows 10 meine Laufwerke (lokales Netzwerk, WebDav) manuell zu verbinden, diese nervigen Kennworteingaben zu bestätigen bzw. NetzwerkLW-Fehlermeldungen wegzuklicken, habe ich diesen kleinen Code geschrieben. Erfolgreich getestet mit WebDav-basierenden Cloud-Diensten wie OneDrive, Web.de, 1und1 und selbstverständlich auch lokale/globale Netzwerke.
Unter Windows 10 habe ich auch keine funktionierende interne Methode/Einstellung finden können, die mir das zufriedenstellend abnimmt, aber zum Glück gibt es ja den guten alten net use -Befehl! :P

Code: Select all

; NetUseMapping = prüft beim Hochfahren die Existenz des LogonUI.exe Prozesses und initiiert nach erfolgreicher
; Windows10-Anmeldung die Laufwerks-Zuordnung für Netzwerk und WebDAV-Speicher ...... Windows 10.1809 / 64Bit ✔
; ======================================================================================================================
#NoEnv
#SingleInstance force
SetBatchLines -1
SetWinDelay, -1
; ======================================================================================================================
Process, WaitClose, LogonUI.exe                 ; wartet bis LogonUI.exe nach der Anmeldung geschlossen wird
Check:                                          ; Labelmarke zwecks wiederholender Prüfung
If !ErrorLevel                                  ; 0 = wenn der Prozess geschlossen wurde
  {
	RunWait, net use /delete * /yes, , hide     ; alle def. NW-Laufwerke trennen, anschl. mit LW-Zuweisung(en) verbinden

    RunWait, net use N: \\UNC-Pfad /persistent:yes                             , , hide     ; Netzlaufwerk
    RunWait, net use O: https://webdav-Pfad /user:xxx Kennwort /persistent:yes , , hide     ; WebDav 1
    RunWait, net use W: https://webdav-Pfad /user:xxx Kennwort /persistent:yes , , hide     ; WebDav 2
    RunWait, net use Z: https://webdav-Pfad /user:xxx Kennwort /persistent:yes , , hide     ; WebDav 3

    DriveGet, NStatus, Status, N:               ; N-Laufwerk-Status abrufen
    DriveGet, OStatus, Status, O:               ; O-Laufwerk-Status abrufen
    DriveGet, WStatus, Status, W:               ; W-Laufwerk-Status abrufen
    DriveGet, ZStatus, Status, Z:               ; Z-Laufwerk-Status abrufen

    Status := NStatus OStatus WStatus ZStatus   ; alle Statuswerte in eine Variable schreiben und anschl. auswerten
    If InStr(Status, "Invalid")                 ; Check wiederholen, wenn min. eine Verbindung nicht hergestellt wurde
      Goto Check
    RunWait, explorer.exe                       ; Explorer öffnen zwecks Konnektivitätskontrolle
  }
ExitApp
Nach Anpassung des Pfades und der Laufwerksbuchstaben, Anmeldedaten inkl. Kennwörter ab Zeile 14 kopiert man einfach die kompilierte Datei als Verknüpfung ins shell:startup-Verzeichnis. Nach einem Neustart wird das Explorerfenster erst dann angezeigt, wenn alle Verbindungen erfolgreich hergestellt wurden.
Für Verbesserungsvorschläge/Optimierungen bin ich gerne empfänglich... ;)

Re: Netzwerk-Laufwerke

Posted: 02 Feb 2019, 16:12
by Ahk_fan
Funktioniert sehr gut, danke!

Re: Netzwerk-Laufwerke

Posted: 28 Apr 2019, 01:41
by NetConnector
Hallo,
ich habe das Script ein bisschen angepasst, da ich es nur für Netzlaufwerke im LAN benötige. Ich habe das Script in den Autostart Ordner gelegt, eines für einen Anwender, ein anderes für den Admin. Es hat jede Anmeldung unterschiedliche Netzlaufwerke, bzw. die Anwender haben weniger. Funktioniert gut, aber: Ist ein Nutzer angemeldet, und meldet man sich mit einem weiteren Account an, funktioniert das Script nicht. Ich denke es liegt daran, dass das Script in der zweiten Anmeldung die Laufwerke nicht trennen kann, weil sie in der ersten Anmeldung verwendet werden.
Schön wäre eine Funktion, die eine Meldung ausgibt, dass man erst den anderen Account abmelden muss bevor das Script die LW verbinden kann. Dazu müsste man im Script irgendwie abfragen, ob es eine weitere Anmeldung gibt und diese dann auswerten. In der Referenz habe ich dazu nix gefunden ….
VG
Ralf

Re: Netzwerk-Laufwerke

Posted: 28 Apr 2019, 01:47
by NetConnector
Und nochmal Hallo,
am Ende vom Script starte ich ein Programm, dieses gereift auf zuvor verbundene LW zu. Passt alles. Ist das Programm gestartet, erzeugt das Script einen Mausklick auf einen Button im Fenster des gestarteten Programms. Funktioniert, aber nur wenn man ein Sleep in das Script einbaut, was ein paar Sekunden wartet bis das Programm gestartet ist. Schöner wäre eine Abfrage, wann denn das Programm fertig ist mit starten, so dass man dann den Mausklick losschicken kann ….
Natürlich vielen Dank für Hinweise und Hilfen!
VG
Ralf

Re: Netzwerk-Laufwerke

Posted: 05 May 2019, 01:29
by moefr01
NetConnector wrote:
28 Apr 2019, 01:41
Hallo,
ich habe das Script ein bisschen angepasst, da ich es nur für Netzlaufwerke im LAN benötige. Ich habe das Script in den Autostart Ordner gelegt, eines für einen Anwender, ein anderes für den Admin. Es hat jede Anmeldung unterschiedliche Netzlaufwerke, bzw. die Anwender haben weniger. Funktioniert gut, aber: Ist ein Nutzer angemeldet, und meldet man sich mit einem weiteren Account an, funktioniert das Script nicht. Ich denke es liegt daran, dass das Script in der zweiten Anmeldung die Laufwerke nicht trennen kann, weil sie in der ersten Anmeldung verwendet werden.
Schön wäre eine Funktion, die eine Meldung ausgibt, dass man erst den anderen Account abmelden muss bevor das Script die LW verbinden kann. Dazu müsste man im Script irgendwie abfragen, ob es eine weitere Anmeldung gibt und diese dann auswerten. In der Referenz habe ich dazu nix gefunden ….
VG
Ralf
es gibt die Möglichkeit per Windows-Befehl:
whoami /user /fo list /nh
alle angemeldeten Benutzer in Listenform anzuzeigen, diese lässt sich inhaltlich oder einfach nur anhand der Zeilenanzahl abfragen :idea:

Re: Netzwerk-Laufwerke

Posted: 05 May 2019, 01:36
by moefr01
NetConnector wrote:
28 Apr 2019, 01:47
Und nochmal Hallo,
am Ende vom Script starte ich ein Programm, dieses gereift auf zuvor verbundene LW zu. Passt alles. Ist das Programm gestartet, erzeugt das Script einen Mausklick auf einen Button im Fenster des gestarteten Programms. Funktioniert, aber nur wenn man ein Sleep in das Script einbaut, was ein paar Sekunden wartet bis das Programm gestartet ist. Schöner wäre eine Abfrage, wann denn das Programm fertig ist mit starten, so dass man dann den Mausklick losschicken kann ….
Natürlich vielen Dank für Hinweise und Hilfen!
VG
Ralf
eventuell über eine WinExist()-Abfrage :?:
https://ahkde.github.io/docs/commands/WinWaitActive.htm
oder WinWaitActive :?:
https://ahkde.github.io/docs/commands/WinExist.htm

schau Dir hierzu einmal die Beispiele an :wave: moefr01