Wie Sie Ihre Active Directory Computer mit WSUS und Lansweeper abgleichen

Wie Sie Ihre Active Directory Computer mit WSUS und Lansweeper abgleichen

Read this article in english: Wie Sie Ihre Active Directory Computer mit WSUS und Lansweeper abgleichen

Jeder Systemadministrator kennt es – Mitarbeiter kommen in das Unternehmen oder verlassen dieses und das Active Directory muss akribisch gepflegt werden, ansonsten weiß niemand mehr welche Rechner und Benutzer noch benötigt werden und welche bereits veraltet sind, oder vielleicht nur im Regel stehen. Denkt man dann daran einen Computer aus dem Active Directory zu nehmen, bleiben oft in anderen Systemen wie WSUS oder Lansweeper die Objekte bestehen. Vermeiden kann man dies nur durch Einführung von Prozessen - am besten natürlich IT gestützte Prozesse, die das Entfernen der Computerobjekte übernimmt.

Im Lansweeper kann man die AD-Synchronisation aktivieren, um das Problem zu vermeiden. Wie aber mit dem WSUS umgehen? Was tun, wenn die Systeme bereits Differenzen in der Anzahl der Computer aufweisen? Dann bleibt nur der Weg dies aufzuräumen. Klar kann ich mir von allen Systemen einen Report erstellen, aber das Aussortieren der Computer die in drei unterschiedlichen Reports stehen ist mühselig. Es wäre viel besser alle Computer in einem Report für alle drei Systeme zu haben.

Dazu habe ich ein PowerShell Script geschrieben das genau dies für Sie tut.

Das brauchen Sie für das PowerShell Script

  • Active-Directory Tools installiert (RSAT for Directory Services) (Import-Module Active-Directory)
  • Administrator Rechte auf dem WSUS Server (Es geht sowohl WSUS wie auch Downstream Server)
  • Mein OpenSource Tool: API-Lansweeper installiert

Das PowerShell Script erklärt

Das PowerShell Script ist in drei Sektionen aufgeteilt. Zuerst wird das Active-Directory PowerShell Modul geladen, um alle AD-Computerobjekte zu ermitteln. Im zweiten Schritt wird die Lansweeper API (Muss zusätzlich installiert werden) abgefragt und die Computer-Assets ermittelt. Redundante Computer werden in der For-Schleife aussortiert. Passen Sie hier die URL zu Ihrer API-Lansweeper Installation an (http://localhost:85…).

Im letzten Schritt werden alle Computerobjekte von WSUS abgefragt. Passen Sie hier die Verbindungsinformationen zu Ihrem WSUS Server an. Wenn Sie ein Downstream Server über SSL befragen brauchen Sie lediglich den Hostnamen einzugeben. Ansonsten Port und SSL ($True) überprüfen. Im letzten Schritt werden all die gesammelten Informationen für Sie zusammengefasst und in einem Grid ausgegeben. Alternativ können Sie hier auch Export-CSV oder Export-Excel (ImportExcel Modul notwendig) verwenden.

Das Script

#Get-WindowsCapability -Online | ? {$_.Name -like "*RSAT*" -and $_.State -eq "NotPresent"} | Add-WindowsCapability -Online
# Oder:
#DISM /Online /Add-Capability /CapabilityName:Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0
#Install-Module ImportExcel

class HostInfo {
    [string]$Hostname
	[string]$LastSync
}

## Get AD Computers
Import-Module ActiveDirectory
$computers = Get-ADComputer -Filter * -Properties * | select DNSHostName, Created, LastLogonDate, OperatingSystem, IPv4Address, Description

## Get Lansweeper Computers
$response = Invoke-WebRequest -Uri "http://localhost:85/api/Values"  # Hier URL zu API-Lansweeper hinterlegen
$data = ConvertFrom-Json $([String]::new($response.Content))

$lansweeper_machines = @()
foreach($d in $data) {
    $obj = @([HostInfo]@{Hostname=$d.AssetName})

    $found = $False
    foreach($entry in $lansweeper_machines) {
        if ($entry.Hostname -eq $obj.Hostname) {
            $found = $True
            break;
        }
    }

    if ($found -ne $True) { $lansweeper_machines += $obj  }
}


## Get WSUS Computers
$srv = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer("MeinWSUS.Domain.Int",$True,8531) # WSUS Server. SSL und Port überprüfen!
$wsusdata = (Get-WsusComputer -UpdateServer $srv -IncludeDownstreamComputerTargets)
$wsuscomputers = @()

foreach($d in $wsusdata) {
		$comp = $d.FullDomainName.Split('.')[0]
        $obj = @([HostInfo]@{Hostname=$comp;LastSync=$d.LastReportedStatusTime})
    
        $found = $False
        foreach($entry in $wsuscomputers) {
            if ($entry.Hostname -eq $obj.Hostname) {
                $found = $True
                break;
            }
        }
    
        if ($found -ne $True) { $wsuscomputers += $obj  }
    }

class OutputData {
    [string]$Hostname = ""
	[string]$Description = ""
	[string]$OS = ""
    [string]$LastLogon = ""
    [boolean]$isInLansweeper = $False
    [boolean]$isInWSUS = $False
	[string]$LastWsusSync = ""
}

$reportData = @()

foreach($comp in $computers) {
    $isInLansweeper = $False
    $isInWSUS = $False
    $splittedName = $comp.DNSHostName.Split('.')[0].ToLower()

    foreach($lscomp in $lansweeper_machines) {
        if ($splittedName -like $lscomp.Hostname.ToLower()) {
            $isInLansweeper= $True
            break;
        }
    }

    foreach($wsuscomp in $wsuscomputers) {
        if ($splittedName -like $wsuscomp.Hostname.ToLower()) {
            $isInWSUS = $True
			$LastWsusSync = $wsuscomp.LastSync
            break;
        }
    }

    $repobj = @([OutputData]@{Hostname=$splittedName;Description=$comp.Description;OS=$comp.OperatingSystem;LastLogon=$comp.LastLogonDate;isInLansweeper=$isInLansweeper;isInWSUS=$isInWSUS;LastWsusSync=$LastWsusSync})

    $reportData += $repobj
}

$reportData | Out-GridView

#$reportData | Export-Excel

Sie brauchen Hilfe?

Wenn Sie Hilfe bei der Implementierung oder ein eigenes PowerShell Script benötigen können Sie mich gerne per Mail Kontaktieren und ein kostenloses Erstberatungsgespräch vereinbaren: Kontakt

Information

Ich selbst hasse Websites die voll mit Werbebanner oder Tracking Software sind und vermeide all diese auf meiner Seite. Wenn Sie gut finden was ich mit meinem Blog und den darauf zu findenden Tipps und Tools mache, dann würde es mich freuen, wenn Sie mir einen Kaffee ausgeben oder über PayPal eine Spende in beliebiger Höhe an GriepMarco@gmail.com senden. Danke!