Fragensteller
Laufwerk Mapping

Allgemeine Diskussion
-
Hallo, ich weiß es wurden hier schon viele Kommentare zu diesem Thema gepostet, trotzdem hoffe ich, dass ihr mir bei dem Script helfen könnt. In Powershell bin ich kaum bewandert, habe mir die Infos durch Recherche von hier und anderen Quellen zusammen gebastelt. Trotzdem treten manche Probleme bei den Usern auf. *Script 1* - legt keinen neuen Task an, zeigt einen Fehler an „missing )“… aber keine weiteren Infos! - oder wird durch die Aufgabenplanung als erfolgreich aufgerufen angezeigt, aber nicht ausgeführt. * Script 2* - findet den Eintag in der Registry nicht - oder schreibt einen falschen Paramenter unter HKCU\Env rein: System.DirectoryServices.PropertyValueCollection (?)
- Bearbeitet _Stingray1975 Freitag, 12. Februar 2021 16:49
- Typ geändert Denniver ReiningMVP, Moderator Donnerstag, 18. Februar 2021 14:25 ......
Alle Antworten
-
Moin,
als erste Amtshandlung poste bitte Deinen Code als Code (2. Button von rechts), dann wird er für uns leserlich.
Evgenij Smirnov
-
###### Powershell Script TASK ###### Teil 1 ---- erstellen eines Tasks auf dem Client ---- Anfang Script 1 # Die auszuführende Aktion $Action = New-ScheduledTaskAction -Execute 'C:\Program Files\XXXX\vpn\H-Laufwerk verbinden.ps1' # Der Trigger damit das Script nach dem Verbindungsaufbau gestartet wird $CIMTriggerClass = Get-CimClass -ClassName MSFT_TaskEventTrigger -Namespace Root/Microsoft/Windows/TaskScheduler:MSFT_TaskEventTrigger $Trigger = New-CimInstance -CimClass $CIMTriggerClass -ClientOnly # Pulse Secure VPN - bei erfolgreichem Aufbau wird Event-ID 312 gemeldet $Trigger.Subscription = @" <QueryList><Query Id="0" Path="Pulse Secure/Operational"><Select Path="Pulse Secure/Operational">*[System[Provider[@Name='IVE'] and EventID=312]]</Select></Query></QueryList> "@ $Trigger.Enabled = $True # Benutzerkonto unter dem das alles laufen soll später $principal = New-ScheduledTaskPrincipal -UserId (Get-CimInstance –ClassName Win32_ComputerSystem | Select-Object -expand UserName) # Registrieren des Tasks in der Aufgabenplanung Register-ScheduledTask -Action $Action -Trigger $Trigger -TaskName "XXX_VPN-Map-DriveH" -Description 'Mapping-Script-DriveH-CurrentUser' -Principal $principal ---- Ende Script 1
-
---- Anfang Script 2 ###### Powershell Script MapDrive ###### Teil 2 ---- Automatisierung des Mappings bei Eintritt der Event-ID (siehe Script 1) # # powershell.exe -executionpolicy bypass -noprofile -file "XXXXX" # # Script Parameter [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | out-Null # Lade Assembly ohne Ausgabe # ----------- # 1 Versuch ermittle Homedrive des Benutzers über den Eintrag über den statischen Eintrag unter HKCU:\Environment try { $homedir = Get-ItemPropertyValue -Path "HKCU:\Environment\" -Name HOMESHARE -ErrorAction Stop } ## 2 Versuch, den Eintrag über den flexiblen Eintrag durch Domain-Logon unter HKCU:\Volatile Environment catch { try { $homedir = Get-ItemPropertyValue -Path "HKCU:\Volatile Environment\" -Name HOMESHARE -ErrorAction Stop } ## 3 danach Fallback, den Eintrag die durch AD-Abfrage catch { try { ($homedir = ([ADSI](([AdsiSearcher]"(&(objectClass=user)(samaccountname=$env:USERNAME))").FindOne()).Path).homedirectory) } # Fehleranzeige bei fehlenden Registry-Daten catch { [System.Windows.Forms.MessageBox]::Show("Fehler bei der Datenabfrage","Netzwerk-Laufwerk",0,[System.Windows.Forms.MessageBoxIcon]::Error) } } } # prüfen, ob das Laufwerk / Share für den User auf dem aktuellen Server besteht, falls nicht bis zu 1x8 Sec Verzögerung if (!(Test-Path $homedir)) { (Start-Sleep -s 8) write-host "homedir missing" if (!(Test-Path $homedir)){( Start-Sleep -s 8)} } else {(Start-Sleep -s 2); write-host "homedir found"; # Prüfung dass H-Laufwerk bereits verbunden wurde, zeige Info an if ((Test-Path H:)) { [System.Windows.Forms.MessageBox]::Show("Zugriff auf H-Laufwerk besteht bereits","Netzwerk-Laufwerk",0)} # falls kein H-Laufwerk verbunden, führe das Mapping durch, zeige Info an elseif (!(Test-Path H:)) { New-PSDrive -Name "H" -Root "$homedir" -Persist -PSProvider "FileSystem";if ((Test-Path H:)) {[System.Windows.Forms.MessageBox]::Show("H-Laufwerk ist nun verbunden","Netzwerk-Laufwerk",0,[System.Windows.Forms.MessageBoxIcon]::Information)} gpupdate } # falls via VPN nicht in der Domäne authentifiziert, zeige Warnung an, dass Gerät nicht korrekt registriert ist elseif (!(Get-WinEvent -ComputerName $env:COMPUTERNAME -FilterHashTable @{LogName="Microsoft-Windows-NetworkProfile/Operational";ID=10000;StartTime=(get-date).AddHours(-1)} | where message -match 'Domäne')) {[System.Windows.Forms.MessageBox]::Show("Computer nicht korrekt in Domäne registriert!","Netzwerk-Laufwerk",0,[System.Windows.Forms.MessageBoxIcon]::Error) } # falls weitere Probleme auftreten - Warnung an User else {{[System.Windows.Forms.MessageBox]::Show("Fehler beim Verbinden von H-Laufwerk","Netzwerk-Laufwerk",0,[System.Windows.Forms.MessageBoxIcon]::Error)}} ## Setze vom Fallback das Homedrive des Benutzers unter HKCU:\Environment für schnelleres Laden der Daten if (Test-Path $homedir) {New-ItemProperty -Path "HKCU:\Environment\" -Name HOMESHARE -Value $homedir -force} ---- Ende Script 2
-
zu 1)
Die .ps1 kann man leider nicht direkt aufrufen, hierfür muss man "powershell.exe -file <PfadundName>" starten.zu 2)
Bevor du irgendwelche RegistryKeys angibst, prüfe mal per regedit nach, welche Pfade überhaupt existieren und welchen Basispfad du angeben musst. -
sorry, ich hoffe, so kann man es nun besser lesen.
Leider nicht. Ich finde den Code wahnsinnig schlecht formatiert und sehr verworren. Vielleich erklärst Du uns erstmal in "prosa", was Du eigentlich erreichen möchtest. Eventuell gibt es ja eine einfachere Methode.
... zum Thema "Code Foratierung": Es wäre der Lesbarkeit zuträglich, deutlich weniger Leerzeilen und weniger Kommentare zu benutzen. Powershell-Code ist die meiste Zeit ziemlich "beschreibend". Eine Code-Zeile die mit "Register-ScheduledTask" beginnt, braucht man nicht kommentieren. Jeder, der auch nur ein wenig Englisch spricht, kann sich denken, dass diese Zeile eine geplante Aufgabe in der Aufgabenplanung registrieren soll. ;-)
Hier noch Etwas zum Nachlesen zu diesem Thema: The Unofficial PowerShell Best Practices and Style Guide
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''