So überprüfen Sie, ob sich Ihre Active Directory-Computer in Ivanti DSM und Lansweeper befinden

So überprüfen Sie, ob sich Ihre Active Directory-Computer in Ivanti DSM und Lansweeper befinden
Bildrechte: Marco Griep (CC BY-NC-ND)

Wer weiß es nicht? Ihr IT-Manager kommt um die Ecke und möchte erneut eine Bewertung der IT-Systeme. Sie haben verschiedene Systeme wie eine Inventarlösung, ERP, Softwareverteilung oder vielleicht ein Active Directory. Die Daten aus den Systemen werden auf verschiedene Produkte verteilt. Mehrmals im Jahr habe ich genau diese Anforderungen und die Notwendigkeit, Berichte zu erstellen - wieder im letzten Monat. Es sollte ein Bericht erstellt werden, der zeigt, welche Computerobjekte sich im Active Directory, im Lansweeper und in unserer Softwareverteilung (Ivanti DSM) befinden. Dank Gott kann ein solcher Bericht mithilfe von PowerShell-Code und verschiedenen Commandlets oder API-Schnittstellen schnell per Skript erstellt werden. Ich musste vorher einen ähnlichen Bericht erstellen, der Active Directory und WSUS liest. Es war also kein Problem, diesen Bericht einfach anzupassen.


PowerShell bietet Commandlets zum Abfragen von Active Directory, die selbst für Administratoren ohne fundierte Programmierkenntnisse sehr einfach zu verwenden sind. Diese Commandlets werden über die RSAT-Tools für Active Directory installiert. Lansweeper-Bewertungen werden am besten über meine API-Lansweeper-Schnittstelle durchgeführt. Der einfachste Weg, auf Ivanti DSM-Informationen zuzugreifen, sind die PSX PowerShell-Erweiterungen. Ich habe in meinem Blog häufig Artikel über die PSX PowerShell-Erweiterungen geschrieben.

PowerShell Script - Sektionen

Das PowerShell-Skript ist in mehrere Abschnitte unterteilt.

  1. Im ersten Schritt werden alle Computerinformationen aus der Softwareverteilung gelesen.
  2. Dann bestimme ich alle Clients aus dem Active Directory
  3. Dann bekomme ich alle Computerinformationen von Lansweeper von API-Lansweeper
  4. Im letzten Schritt fasse ich Informationen in einer Liste zusammen, die alle erforderlichen Berichtsdaten enthält, und gebe sie als CSV-Datei aus.
    param(  
        [string]$argServer = 'mybls-server.intranet.int:8085',
        [string]$argUser = 'domain\username', 
        [string]$argPassword = 'DSMPassoword', 
        [string]$context = "emdb:\rootDSE\Managed Users & Computers\*"
    )

    #==============================================
    # IDENTIFY ALL DSM COMPUTERS
    #==============================================

    #Prepare PS to Use HEAT DSM
    import-module psx7 -DisableNameChecking
    #Create global Authentification
    $Server = "\\$argServer"; $Username = $argUser; 
    $global:path = $context
    $password = $argPassword | ConvertTo-SecureString -asPlainText -Force
    $credential = New-Object System.Management.Automation.PSCredential($Username, $password)
    Write-Host "Using context: " + $context

    #Connect to HEAT DSM
    new-psdrive -name emdb -root $Server -scope script -psprovider blsemdb -Credential $credential

    emdb:

    $DSMComputers = Get-EmdbComputer $context -Recurse

    #==============================================
    # IDENTIFY ALL ACTIVE DIRECTORY COMPUTERS
    #==============================================

    Import-Module ActiveDirectory

    $ADComputers = Get-ADComputer -Filter * -Properties * | select DNSHostName, Created, LastLogonDate, OperatingSystem, IPv4Address, Description

    #==============================================
    # LANSWEEPER DATA
    #==============================================

    $response = Invoke-WebRequest -Uri "http://lansweeper-server:95/api/Values"  # URL FOR API-LANSWEEPER
    $LSAssetdata = ConvertFrom-Json $([String]::new($response.Content))

    #==============================================
    #MERGE DATA FOR REPORTING
    #==============================================

    class OutputData {
        ​​​​​​​
        [string]$Hostname = ""
        [string]$Description = ""    
        [string]$Model = ""    
        [string]$OS = ""    
        [string]$CreateDate = ""    
        [string]$LastLogon = ""    
        [boolean]$isInAD = $False    
        [boolean]$isInDSM = $False    
        [boolean]$isInLS = $False   
        [string]$LastSeenLansweeper = ""    
        [string]$LastDSMSync = ""
    }

    ​​​​​​​$reportData = @()
    ​​​

    foreach ($comp in $ADComputers) {
        ​​​​​​​       
        $found = $false    
        $sync = ""    

        foreach ($dsmc in $DSMComputers) {
            ​​​​​​​
            if (!$comp.DNSHostName) { ​​​​​​​ continue }​​​​​​​
            if ($dsmc.Name.ToLower() -eq $comp.DNSHostName.ToLower().Replace(".your.fqdn", "")) {
                $found = $true          
                $sync = $dsmc.LastSyncDate.ToString()          
                break       
            }​​​​​​​    
        }​​​​​​​    
        $LSfound = $false    
        $LSsync = ""    

        foreach ($asset in $LSdata) {
            ​​​​​​​
            if (!$comp.DNSHostName) { ​​​​​​​ continue }​​​​​​​       
            if ($asset.AssetName.ToLower() -eq $comp.DNSHostName.ToLower().Replace(".your.fqdn", "")) {
                ​​​​​​​
                $LSfound = $true          
                $LSsync = $asset.LastSeen.ToString()          
                break       
            }​​​​​​​       

            $x = $LSAssetdata | Where-Object { ​​​​​​​ $_.AssetName -Match $asset.AssetName }​​​​​​​       
            $model = ""       
            if ($x.Count -gt 0 ) {
                ​​​​​​​        
                $model = $x[0].Model       
            }​​​​​​​         
        }​​​​​​​    
        $obj = @([OutputData]@{​​​​​​​Hostname=$comp.DNSHostName; Description=$comp.Description; Model=$model; OS=$comp.OperatingSystem; CreateDate=$comp.Created.ToString(); LastLogon=$comp.LastLogonDate.ToString(); isInAD=$true; isInDSM=$found; LastDSMSync=$sync; isInLS=$LSfound; LastSeenLansweeper = $LSsync }​​​​​​​)    
        $reportData += $obj
    }​​​​​​​

    #==============================================
    # OUTPUT
    #==============================================

    $reportData | Out-GridView
    #$reportData | Export-CSV -Path "C:\temp\export.csv"

Wie verwende ich das Script?

  1. Installieren Sie die RSAT-Tools
  2. Installieren Sie PSX PowerShell-Erweiterungen
  3. Ersetzen Sie URLs für die Lansweeper-API und den BLS-Server
  4. In der Zuordnung. Ersetzen Sie “your.fqdn” durch Ihre Domain