gmot82
Goto Top

VPN: Netzlaufwerke per Skript mounten

article-picture
Hier geht es darum den Usern im Homeoffice die entsprechenden Netzlaufwerke zu mounten, ein automatisches GPUPDATE zu starten, oder diverse Scripts autmatisch nach der VPN Einwahl auszuführen.

Um das zu bewerkstelligen nutzen wir eine Kombonation aus Scripts, GPO und Windows Tasks.

In der entsprechenden GPO wird zuerst unter Benutzer / Einstellungen / Systemsteuerungseinstellungen eine geplante Aufgabe min. Windows 7 erstellt.

trigger

Als Trigger für diese Aufgabe nutzen wir die Eregnisanzeige / Bei einem Ereignis. Dies bewirkt, dass unser Powershell Script ausgeführt wird, sobald eine Verbindung zu einem Netzwerk aufgebaut wird.

aktion

Als Aktion wird die Powershell gestartet. Die Argumente sind -WindowStyle hidden "%appdata%\loginVPN.ps1"

-WindowStyle hidden bewirkt dass das Powershell Fenster nur für eine kurze Sekunde sichtbar ist. %appdata%\loginVPN.ps1 ist der Pfad zu dem Script.

Nun widmen wir uns dem Powershell Script. Wir gehen davon aus das eure lokale Domäne MeineDom.local heisst und dass der IP Adressrange des VPN 10.0.2.0/24 ist. Für diejenigen die Ihre Laufwerke noch via Script einbinden gehen wir davon aus, dass das Script unter \\PFADzuEUREMSCRIPT\Loginscript.cmd liegt. Die jenigen die das über die GPO machen können die Zeile 6 löschen. Zeile 7 & 8 dienen dazu den Basepfad des Benutzers auszulesen und das Homelaufwerk auf H: zu mounten.

  
if (Test-Connection MeineDom.local)
{
    if (Get-NetIPAddress -AddressFamily IPv4 | Where-Object -FilterScript { $_.IPAddress -like "10.0.2.*"})  
    {
        cmd.exe /c '\\PFADzuEUREMSCRIPT\Loginscript.cmd'  
        $Base = Get-ADUser -Identity (Get-ChildItem Env:\USERNAME).Value -Properties HomeDirectory
        New-SMBMapping -Localpath 'h:' -Remotepath $Base.HomeDirectory  
        cmd.exe /c gpupdate
    }
}

datei

Zu guter letzt muss das Script noch beim Client auftauchen. Dazu nutzen wir ebenfalls die GPO. Benutzer/Einstellungen/Windows-Einstellungen/Dateien erstellen wir einen neuen Eintrag und wählen Quelle und Ziel aus.Anschließend kopierren wir unser Powershell Script nach \\MeineDom.local\NETLOGON\ und warten darauf, dass sich alle Clients die neue GPO ziehen.

Content-ID: 3378453519

Url: https://administrator.de/contentid/3378453519

Ausgedruckt am: 21.11.2024 um 10:11 Uhr

Doskias
Doskias 19.07.2022 um 12:19:57 Uhr
Goto Top
Moin,

wieso so kompliziert? Nutz doch einfach das Laufwerksmapping via GPO. Die Laufwerke bleiben bei der richtigen Konfiguration auch ohne VPN verbunden und werden entsprechend dann verfügbar, wenn die VPN-Verbindung wieder aufgebaut wird. Ja, dafür muss der Client sich einmal im Netzwerk anmelden, aber dass muss er ja für das kopieren deines Scriptes nach %appdata% ja auch.
Außerdem weißt du nicht was der Anwender mit dem Skript anstellt, wenn es bei ihm unter %appdata% liegt und er es dort verändern kann.

Gruß
Doskias
GMOT82
GMOT82 19.07.2022 aktualisiert um 12:25:47 Uhr
Goto Top
Moin, das stimmt schon. Das Basislaufwerk bekommst du so aber leider nicht gemountet. Und es gibt auch noch einige die Ihre Laufwerke per Script mappen. Hier kannst du auch jegliches Script beim verbinden via VPN ansprechen und das GPUpdate wird sofort nach dem Verbinden ausgeführt. Eventuell würde es noch SInn machen die Gruppenmitgliedschaft zu aktualisieren.
Und was soll er denn mit dem Script anstellen können? Die lokalen und domänen Berechtigungen greifen ja noch weiterhin.
Doskias
Doskias 19.07.2022 um 12:52:15 Uhr
Goto Top
Ok, aber:

Zitat von @GMOT82:
Moin, das stimmt schon. Das Basislaufwerk bekommst du so aber leider nicht gemountet. Und es gibt auch noch einige die Ihre Laufwerke per Script mappen.
Das ist dann aber ein "Anwenderproblem". Versteh mich nicht falsch: ja, es gibt sicher Leute die das machen, aber das wäre mir, salopp gesagt, als Administrator egal. Wenn ich eine Freigabe als H mappe, dann interessiert mich nicht was die anderen mit ihren "privaten" Skripten machen. H muss H sein, sonst funktionieren dahinterliegende Prozesse nicht,

Hier kannst du auch jegliches Script beim verbinden via VPN ansprechen und das GPUpdate wird sofort nach dem Verbinden ausgeführt. Eventuell würde es noch SInn machen die Gruppenmitgliedschaft zu aktualisieren.
Wenn es dir nur um das gpupdate geht, dann mach doch einfach ein gpupdate als Befehl, wenn eine aufgebaute VPN-Verbindung und in den Logs erkannt wird. Also geplanter Task mit Trigger "bestimmtes Ereignis im Log"

Und was soll er denn mit dem Script anstellen können? Die lokalen und domänen Berechtigungen greifen ja noch weiterhin.
Klar, aber er kann da immer noch drin rumfummeln und ggf. etwa rauslöschen, was dann später zu Folgeproblemen kommt. Stichwort von dir: eigenes Mapping-Skript face-wink

Ansonsten, Stichwort: Always ON VPN. Ja hat auch gewisse Nachteile.

Achso und:
-WindowsStyle hidden bewirkt dass das Powershell Fenster nur für eine kurze Sekunde sichtbar ist. %appdata%\loginVPN.ps1 ist der Pfad zu dem Script.
Nicht WindowsStyle, sondern WindowStyle. Das zusätzliche S führt zu ungewolltem verhalten face-wink

Gruß
Doskias
GMOT82
GMOT82 19.07.2022 um 13:06:39 Uhr
Goto Top
Das ist dann aber ein "Anwenderproblem". Versteh mich nicht falsch: ja, es gibt sicher Leute die das machen, aber das wäre mir, salopp gesagt, als Administrator egal. Wenn ich eine Freigabe als H mappe, dann interessiert mich nicht was die anderen mit ihren "privaten" Skripten machen. H muss H sein, sonst funktionieren dahinterliegende Prozesse nicht,

Ich meinte damit eher, dass es noch Admins gibt, die Laufwerke via Skript einbinden.


Wenn es dir nur um das gpupdate geht, dann mach doch einfach ein gpupdate als Befehl, wenn eine aufgebaute VPN-Verbindung und in den Logs erkannt wird. Also geplanter Task mit Trigger "bestimmtes Ereignis im Log"

und genau dieses macht doch die Aufgabe und das Script face-smile
Die Zeile 1 prüft lediglich ob die Domäne erreichbar ist. Zeile 4 prüft ob du intern oder extern bist.

Achso und:
-WindowsStyle hidden bewirkt dass das Powershell Fenster nur für eine kurze Sekunde sichtbar ist. %appdata%\loginVPN.ps1 ist der Pfad zu dem Script.
Nicht WindowsStyle, sondern WindowStyle. Das zusätzliche S führt zu ungewolltem verhalten face-wink

Danke habs korriegiert face-smile

Grüße
Doskias
Doskias 19.07.2022 um 13:34:09 Uhr
Goto Top
Zitat von @GMOT82:
und genau dieses macht doch die Aufgabe und das Script face-smile
Die Zeile 1 prüft lediglich ob die Domäne erreichbar ist. Zeile 4 prüft ob du intern oder extern bist.

ja habe ich schon versanden, mich nur ungünstig ausgedrückt. Was ich meine: war, dass du anstelle des Skriptes auch einfach gleich sagen kannst, dass du ein Powershell-Befehl ausgeben willst.

Anstelle der Aktion das PS-Skript einzugeben, machst du als Aktion einfach:
powershell.exe und dann bei den argument -WindowsStyle hidden wie bisher aber dann zum Beispiel noch zusätzlich -command "New-SMBMapping -Localpath 'h:' -Remotepath $Base.HomeDirectory".
Die Prüfung ob intern oder extern sehe ich als unnötig an, wenn die VPN aufgebaut.
Aber wenn du es willst, dann geht auch -command"[Dein ganzes Skript]". Damit sparst du dir das kopieren.

also:
powershell.exe -windowstyle hidden -command "New-SMBMapping -Localpath 'h:' -Remotepath $Base.HomeDirectory"  
powershell.exe -windowstyle hidden -command "gpupdate /force"  

Das beides als Aktion in der Aufgabenplanung und du hast, was du willst ohne ein Skript vom Server nach %appdata% verschieben zu müssen.

Gruß
Doskias
148523
148523 19.07.2022 aktualisiert um 23:50:12 Uhr
Goto Top
Wir gehen davon aus das eure lokale Domäne MeineDom.local
Schon wieder der immer wiederkehrende fatale Fehler!!!
Die TLD .local ist ein NoGo!

Hinweise zur Verwendung der Domäne .local in DNS und mDNS
GMOT82
GMOT82 19.07.2022 um 13:53:51 Uhr
Goto Top
Anstelle der Aktion das PS-Skript einzugeben, machst du als Aktion einfach:
powershell.exe und dann bei den argument -WindowsStyle hidden wie bisher aber dann zum Beispiel noch zusätzlich -command "New-SMBMapping -Localpath 'h:' -Remotepath $Base.HomeDirectory".
Die Prüfung ob intern oder extern sehe ich als unnötig an, wenn die VPN aufgebaut.
Aber wenn du es willst, dann geht auch -command"[Dein ganzes Skript]". Damit sparst du dir das kopieren.

In der Ereignisanzeige hast du aber kein Ereignis ob die VPN Verbindung aufgebaut wurde, sondern nur das eine Verbindung aufgebaut ist (ich hab zumindest nichts gefunden, nutzen OpenVPN als Client). Das bedeutet das ohne Prüfung ob Domäne und ob VPN oder Lokal, die Powershell Befehle bei jeder Verbindung (WLAN/LAN/anderes VPN) ausgeführt würde.

Grüße
Doskias
Doskias 19.07.2022 um 14:26:47 Uhr
Goto Top
Zitat von @GMOT82:
In der Ereignisanzeige hast du aber kein Ereignis ob die VPN Verbindung aufgebaut wurde, sondern nur das eine Verbindung aufgebaut ist (ich hab zumindest nichts gefunden, nutzen OpenVPN als Client). Das bedeutet das ohne Prüfung ob Domäne und ob VPN oder Lokal, die Powershell Befehle bei jeder Verbindung (WLAN/LAN/anderes VPN) ausgeführt würde.

Kenne OpenVPn nicht und weiß nicht wie und wo es loggt. Vielleicht nicht in einem Standard-Protokoll. Kaspersky-VPN-Verbindungen (nutzen wir nicht, aber nur als Beispiel), werden auch im Anwendungsprotokoll -> Kaspersky Event Log protokolliert, hab ich mir sagen lassen.
Unser Client (kurz geprüft) loggt es auch nicht sichtbar mit, aber in irgendeinem Windows-Protokoll wird bestimmt mitgeloggt wann ein Netzwerkadapter verbunden wurde. Und unser VPN Client nutzt hier einen virtuellen Netzwerkadapter. Da könnte man über eine benutzerdefinierte Ereignissuche im Eventlog bestimmt was basteln face-wink
CoeurdeBoeuf
CoeurdeBoeuf 01.02.2023 um 08:17:37 Uhr
Goto Top
Hallo,
mit was für einem VPN-Client wird die Verbindung aufgebaut? Wir nutzen den LanCom VPN-Client. Der LanCom VPN-Client bietet die Möglichkeit Skripte nach hergestellter Verbindung und Skripte nach abgebauter Verbindung laufen zu lassen.
Also bräuchte man nur ein "net use" Skript zu schreiben, das die Laufwerke mappt bei hergestellter Verbindung und ein "net use" Skript, dass die Laufwerke trennt, wenn die Verbindung abgebaut wurde.
Damit sind die Laufwerke immer dann da, wenn die Verbindung "established" ist.
Gruß
Tom