none
Laufwerk Mapping RRS feed

  • 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 (?)
    
     
    
    Freitag, 12. Februar 2021 14:38

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

    http://evgenij.smirnov.de

    Freitag, 12. Februar 2021 15:26
  • ###### 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
    
     
    

    Freitag, 12. Februar 2021 16:51
  • ---- 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

    Freitag, 12. Februar 2021 16:56
  • sorry, ich hoffe, so kann man es nun besser lesen.
    Freitag, 12. Februar 2021 16:56
  • 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.

    Freitag, 12. Februar 2021 18:28
  • 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''

    Freitag, 12. Februar 2021 23:29