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 ...
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 ...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 483910
Url: https://administrator.de/forum/automatierte-logon-script-ausfuehrung-bei-einer-domaenenverbindung-483910.html
Ausgedruckt am: 21.04.2025 um 04:04 Uhr
2 Kommentare
Neuester Kommentar
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:
Achja! Ein Hallo und ein kleines Bitte wäre sehr motivierend und gehört zum guten Ton.
Grüße!
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!