alienated
Goto Top

Automatierte Logon Script Ausführung bei einer Domänenverbindung

Folgendes versuche ich zu erreichen:

Benutzer meldet sich per VPN an: unmittelbar nach dem VPN Verbindungsaufbau soll das Logon Script(Verbindung der Netzlaufwerke) des Benutzers ausgeführt werden .
Die Bedingungen (wie z.B. Logon Script Name) sollen Variabel sein, da es zahlreiche Personen und Computer betrifft.
Betriebssystem: Windows 10 1809
VPN Client: Cisco Anyconnect

Folgende Lösung habe ich dazu herausgefunden:
-Aufgabenplanung
-Task: Logon Script ausführen
-Trigger beim Ereignis -> Benutzerdefiniert:

<QueryList>
<Query Id="0" Path="Microsoft-Windows-NetworkProfile/Operational">
<Select Path="Microsoft-Windows-NetworkProfile/Operational">*[System[(EventID=10000)]] and *[EventData[Data[@Name='Category'] and (Data='2')]]</Select>
</Query>
</QueryList>

Die Ereignis ID 10000 mit der Kategorie 2 wird generiert wenn man sich mit der Domäne verbindet ( also der VPN Verbindungsaufbau erfolgreich war).

Das ganze funktioniert auch wenn man den Computer z.B. startet und sofort sich per VPN verbindet.

Das Problem:
Wenn man den Rechner mehrere Minuten laufen lässt und dann sich per VPN verbindet wird die entsprechende Ereignis ID nicht generiert und der Logon Script nicht ausgeführt.

Ich konnte das Problem auf mehreren Rechner mit unterschiedlichen Benutzeranmeldungen reproduzieren. Auch meine erfahrene IT Kollegen konnten mir bei diesem Problem nicht helfen, wenn hierzu jemand eine Lösung findet würde es mich sehr wundern und erfreuen!

Den Tipp zu der SQL Abfrage habe ich von hier:
https://ardamis.com/2015/09/09/windows-event-log-query-for-domain-joined ...

Content-Key: 483910

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

Printed on: April 24, 2024 at 19:04 o'clock

Member: SeaStorm
Solution SeaStorm Aug 10, 2019 at 19:11:46 (UTC)
Goto Top
Zitat von @Alienated:

Folgendes versuche ich zu erreichen:

Auch kein Hallo
VPN Client: Cisco Anyconnect
https://www.petenetlive.com/KB/Article/0001353
Member: mayho33
mayho33 Aug 10, 2019 updated at 19:16:39 (UTC)
Goto Top
Wenn du das wirklich per ScheduledTask machen willst, solltest du vielleicht direkt die Verbindungen prüfen zur Laufzeit des ScheduledTask

Ich habe das so gelöst, weil auch wir Cisco Anyconnect verwenden. In Zeile 8 muss deine Domain rein:

Function GetOnlineStatus{

    $domainSuffix = ("." + ($env:USERDNSDOMAIN.Split('.'))[1])  
    $dns = Get-WmiObject -Class Win32_NetworkAdapterConfiguration | Where-Object {$_.DnsDomain -like "*$domainSuffix"}  

    if($dns -eq $null)
    {
        $dns = "DEINE DOMAIN z.B. MeineFirma.de"  
    }
    

    $autheticated = Get-NetConnectionProfile | ?{$_.NetworkCategory -eq 'DomainAuthenticated'}  

    $adapters = (Get-NetAdapter | where {$_.Status -eq 'up'})  
    $isUp = @()

    foreach ($ad in $adapters){
        $isUp += $ad | Select-Object InterfaceType, MediaType, [a-z]*MediaType, InterfaceDescription
    }

    $VPN = $isUp | Where-Object {$_.InterfaceType -eq '6' -and $_.InterfaceType -ne '71' -and `  
        ([regex]::Match($_.InterfaceDescription, 'cisco', [System.Text.RegularExpressions.RegexOptions]::IgnoreCase).success) -and `  
        ([regex]::Match($_.MediaType, '802.3', [System.Text.RegularExpressions.RegexOptions]::IgnoreCase).success)}  

    $LAN = $isUp | Where-Object {$_.InterfaceType -eq '6' -and $_.InterfaceType -ne '71' -and `  
        (![regex]::Match($_.InterfaceDescription, 'cisco', [System.Text.RegularExpressions.RegexOptions]::IgnoreCase).success) -and `  
        ([regex]::Match($_.MediaType, '802.3', [System.Text.RegularExpressions.RegexOptions]::IgnoreCase).success)}  

    $WLAN = $isUp | Where-Object {$_.InterfaceType -ne '6' -and $_.InterfaceType -eq '71' -and `  
        (![regex]::Match($_.InterfaceDescription, 'cisco', [System.Text.RegularExpressions.RegexOptions]::IgnoreCase).success) -and `  
        ([regex]::Match($_.MediaType, '802.11', [System.Text.RegularExpressions.RegexOptions]::IgnoreCase).success)}  


    $toReturn = 'OFFLINE'  
    if($LAN -ne $null -and $dns -ne $null)
    {
        Write-Host "Online-Status: Online via LAN `n`n Adapterdertails:`n $LAN"  
        $toReturn = 'ONLINE'  
    }
    elseif($WLAN -ne $null -and $dns -ne $null)
    {
        Write-Host "Online-Status: Online via WLAN `n`n Adapterdertails:`n $WLAN"  
        $toReturn = 'ONLINE'  
    }
    elseif($LAN -ne $null -and $VPN -ne $null)
    {
        Write-Host "Online-Status: Online via LAN/VPN `n`n Adapterdertails:`n $LAN `n`n $VPN"  
        $toReturn = 'ONLINE'  
    }
    elseif($WLAN -ne $null -and $VPN -ne $null)
    {
        Write-Host "Online-Status: Online via WLAN/VPN `n`n Adapterdertails:`n $WLAN `n`n $VPN"  
        $toReturn = 'ONLINE'  
    }
    
    
    if($toReturn = 'ONLINE')  
    {
       Write-Host "Prüfe Verfügbarkeit des Servers..."  

        if( (Test-Connection -ComputerName $targetServer -Quiet) -eq $false )
        {
            Write-Host "Server konnte nicht erreicht werden!!"  
            Write-Host "OFFLINE- Einrichtung wird begonnen!!"  
            $toReturn = 'OFFLINE'  
        }
    }
    return $toReturn
}

Achja! Ein Hallo und ein kleines Bitte wäre sehr motivierend und gehört zum guten Ton.

Grüße!