mayho33
Goto Top

Powershell - Netzwerk der Domain oder nicht? Wie herausfinden

Hi @ All

Schon wieder eine Herausforderung für deren Lösung ich nach Tipps und Hinweisen suche. Wäre dankbar, wenn ich, wie immer, auch dabei eure Unterstützung bekommen würde.

Mein Problem:

Im Unternehmen gibt es unterschiedliche Konfiguration für ONLINE in der Domain, ONLINE via VPN und OFFLINE. Ich kann zwar den Status der einzelnen Adapter abfragen und unterscheiden welcher was ist, diese Methode hinkt aber etwas. Ich hätte gerne eine technisch sauberere Lösung.

Frage:

Wie kann ich feststellen ob das verbundenen Netzwerk das Domain-Netzwerk ist ohne eine Ping auf irgendeinen Server machen zu müssen? Jeder weiß, dass sich diese von Zeit zu Zeit ändern können oder durch einen Standortwechsel andere DNS usw. verfügbar sind.

Hier die Methode wie ich jetzt unterscheide:
Function GetOnlineStatus{

    Logging -Message "Prüfe Online-Status..." -LogType Info  

    $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 )
    {
        Logging -Message "Online-Status: Online via LAN `n`n Adapterdertails:`n $LAN" -LogType Info  
        $toReturn = 'ONLINE'  
    }
    elseif($WLAN -ne $null -and $VPN -ne $null)
    {
        Logging -Message "Online-Status: Online via WLAN `n`n Adapterdertails:`n $WLAN" -LogType Info  
        $toReturn = 'ONLINE'  
    }
    elseif($WLAN -ne $null)
    {
        Logging -Message "Online-Status: Online via WLAN `n`n Adapterdertails:`n $WLAN" -LogType Info  
        $toReturn = 'ONLINE'  
    }
    
    if($toReturn = 'ONLINE')  
    {
        Logging -Message "Prüfe Verfügbarkeit des Servers..." -LogType Info  

        if( (Test-Connection -ComputerName $targetServer -Quiet) -eq $false )
        {
            Logging -Message "Server konnte nicht erreicht werden!!" -LogType Info  
            Logging -Message "OFFLINE- Einrichtung wird begonnen!!" -LogType Info  
            $toReturn = 'OFFLINE'  
        }
    }
    return $toReturn
}
Hat jemand eine Idee dazu?

Vielen Dank für die Hilfe!

Grüße, Mayho

Content-Key: 444239

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

Printed on: April 26, 2024 at 10:04 o'clock

Member: SeaStorm
SeaStorm Apr 25, 2019 at 09:04:54 (UTC)
Goto Top
hi

also ganz stumpf: wenn du den FQDN deiner Firma anpingst, dann weisst du ob du deine Domäne erreichst. Da interessiert der Server dahinter erst mal nicht.

Unterscheiden, ob VPN oder internes LAN geht damit zwar nicht, aber du kannst das ja erweitern um die Abfrage, ob der IP Bereich der VPN IPs verwendet wird oder ähnliches.

Ansonsten:

LAN: "Probing-Host" verwenden. Einfach einen Host im Netz haben die nur von innerhalb des Netzes erreichbar ist. z.B "probe.domain.de". Wenn diese aufgelöst und erreicht werden kann, dann bist du im LAN. Muss natürlich in der Firewall entsprechend abgeschirmt sein, so das da auch keine VPN Client ran kommen


VPN erkennen: Kommt ganz drauf an wie deine VPN aufgebaut wird. idR wirst du die Software um einen Status abfragen können ob sie denn verbunden ist.

Offline: alle Netzwerkadapter prüfen, ob sie Verbunden sind oder nicht. Sobald einer verbunden ist, musst du eigentlich von Online ausgehen, da alle anderen Tests nicht wirklich zuverlässig sind. Webseite aufrufen, Pingen usw ist alles abhängig von den Firewalleinstellungen des entsprechenden Netzwerks.
Member: Tezzla
Solution Tezzla Apr 25, 2019 updated at 09:13:55 (UTC)
Goto Top
Man könnte auch nach verteilten Einstellung in den Adaptern suchen, bspw. nach "DNSDomain" mit
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Format-Table -Property DNSDomain

Edit: Oder einfach nach dem Default Gateway - oder einer Kombination daraus.

VG
T
Mitglied: 139374
Solution 139374 Apr 25, 2019 updated at 10:29:30 (UTC)
Goto Top
Wie kann ich feststellen ob das verbundenen Netzwerk das Domain-Netzwerk ist
Get-NetConnectionProfile | ?{$_.NetworkCategory -eq 'DomainAuthenticated'}  
Member: mayho33
mayho33 Apr 26, 2019 updated at 11:09:52 (UTC)
Goto Top
Zitat von @SeaStorm:
also ganz stumpf: wenn du den FQDN deiner Firma anpingst, dann weisst du ob du deine Domäne erreichst. Da interessiert der Server dahinter erst mal nicht.

Naja! Dann pinge ich aber. Das will ich ja vermeiden

Unterscheiden, ob VPN oder internes LAN geht damit zwar nicht, aber du kannst das ja erweitern um die Abfrage, ob der IP Bereich der VPN IPs verwendet wird oder ähnliches.

War nie die Frage. Das erkenne ich mit der Methode bestens

LAN: "Probing-Host" verwenden. Einfach einen Host im Netz haben die nur von innerhalb des Netzes erreichbar ist. z.B "probe.domain.de". Wenn diese aufgelöst und erreicht werden kann, dann bist du im LAN. Muss natürlich in der Firewall entsprechend abgeschirmt sein, so das da auch keine VPN Client ran kommen

Was nichts anderes als ein "erweiterte Ping ist. Mmmmm...Ne! Will ich vermeiden

VPN erkennen: Kommt ganz drauf an wie deine VPN aufgebaut wird. idR wirst du die Software um einen Status abfragen können ob sie denn
verbunden ist.

VPN erkenne ich anhand des InterfaceType und InterfaceDescription. Das funktioniert

Offline: alle Netzwerkadapter prüfen, ob sie Verbunden sind oder nicht. Sobald einer verbunden ist, musst du eigentlich von Online ausgehen, da alle > anderen Tests nicht wirklich zuverlässig sind. Webseite aufrufen, Pingen usw ist alles abhängig von den Firewalleinstellungen des entsprechenden
Netzwerks.

Hab ich schon. Funktioniert bereits und flutscht. Trottdem Danke für deine Hinweise und Tipps!

Zitat von @Tezzla:

Man könnte auch nach verteilten Einstellung in den Adaptern suchen, bspw. nach "DNSDomain" mit
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Format-Table -Property DNSDomain

Edit: Oder einfach nach dem Default Gateway - oder einer Kombination daraus.

Perfekt!!!! In Verbindung oder auch mit dem Tipp von...


Zitat von @139374:

Wie kann ich feststellen ob das verbundenen Netzwerk das Domain-Netzwerk ist
> Get-NetConnectionProfile | ?{$_.NetworkCategory -eq 'DomainAuthenticated'}  
> 

...habe ich genau das was ich brauche. Tja! Wenn man weiß wo man suchen muss face-smile

Ich setze das nun gemeinsam mit dem was ich inzwischen gefunden habe und das auch Tezzla vorgeschlagen hat:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration | Where-Object {$_.DnsDomain -like '*.<unser entsprechendes suffix>'}

So flutscht das innerhalb von Sekundenbruchteilen, ist sicher und bestens reproduzierbar.

Danke für eure Tipps und besonders an @139374 und @Tezzla die mir gleich die Lösung geliefert haben.

Grüße!

Mayho