Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
ClientInspectorV2 — Azure-basiertes Client-Inventar- und Drift-Erkennungstool, das Windows-Konfigurationsdaten (Antivirus, Patchen, Bitlocker) in LogAnalytics sammelt, für KQL-gesteuerte Dashboards und Sentinel-Benachrichtigungen. | Kitploit
Tools/GitHubGitHub/knudsenmorten/clientinspectorv2
DefensivwerkzeugeKonfigurationsprüfungCloud-SicherheitIncident ResponseLog-Analyse
GitHubknudsenmorten/clientinspectorv2

ClientInspectorV2

Azure-basiertes Client-Inventar- und Drift-Erkennungstool, das Windows-Konfigurationsdaten (Antivirus, Patchen, Bitlocker) in LogAnalytics sammelt, für KQL-gesteuerte Dashboards und Sentinel-Benachrichtigungen.

Repository anzeigen

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
275vor 3 JahrenVon Kitploit geprüft

Einführung in ClientInspector (v2)

ClientInspector

Haben Sie die Kontrolle? - oder driften einige Ihrer Kerninfrastrukturprozesse wie Patchen, Antivirus, Bitlocker-Aktivierung ab? Oder möchten Sie eine erweiterte Inventur durchführen, bei der Sie Ihren Garantiestatus gegen die Lenovo- oder Dell-Garantie prüfen können? Dann lesen Sie weiter.

Sehen Sie sich ClientInspector an, der Ihnen helfen kann, großartige Einblicke in Ihre gesamte Client-Umgebung zu gewinnen.

ClientInspector ist kostenlos für die Community - entwickelt als coole Demonstration, wie Sie Daten von Ihren Clients zurückholen können mit Azure Log Ingestion Pipeline, Azure Data Collection Rules, Azure LogAnalytics; betrachten Sie sie mit Azure Monitor & Azure Dashboards - und erhalten Sie "Drift-Alarme" mit Microsoft Sentinel.

Video 3m 01s - Dashboards

Architektur & Ablauf von ClientInspector

ClientInspector (v2) lädt die gesammelten Daten in benutzerdefinierte Protokolle in den Azure LogAnalytics-Arbeitsbereich hoch - unter Verwendung der Log Ingestion API, Azure Data Collection Rules (DCR) und Azure Data Collection Endpoints (DCE).

Architektur

Beispiel-Dashboards

KPIs

Antivirus

Bluescreens

Haftungsausschluss

Es ist mir wichtig zu betonen, dass ich nicht versuche, ein separates Verwaltungstool zu entwickeln, das mit dem Microsoft-Sicherheits- und Verwaltungsstack konkurriert.

Nichts übertrifft den Microsoft Azure/M365-Verwaltungs- und Sicherheitsstack. Sie sind erstklassige Lösungen.

Aber ich bin wirklich leidenschaftlich, was die Protokollierungsfähigkeiten und die Macht angeht, Daten von Clients, Servern, der Cloud und Drittsystemen zurückzuholen - und coole wertvolle Informationen aus den Daten zu gewinnen.

Ich habe eine ähnliche Lösung für Server - ServerInspector. Leider ist sie nicht öffentlich.

Großen Dank an die großartigen Leute in den Microsoft-Produktteams - ihr seid Rockstars 😄

Viel Erfolg bei der Jagd 😄


Schnelllinks

Welche Daten werden gesammelt?
Sollzustands-Dashboards - Wie erhalte ich Einblicke in meine Umgebung aus den Daten?
Wie frage ich die Daten ab? - Kusto (KQL) ist die Antwort
Architektur, Schema & Netzwerk
Implementierung
Abhängigkeiten
ClientInspector.ps1 ausführen - 3 Modi
Beispielausgabe von ClientInspector
Sicherheit
Aufbau des ClientInspector-Datensatzes
Ausführlicher Modus & Weitere Hilfe
Kosten - Wie viel kostet die Speicherung dieser Daten? Fehlerfunde, bitte informieren Sie mich
Kontakt

Videos der Lösung

Video 3m 19s - ClientInspector über die Befehlszeile ausführen (normaler Modus)
Video 1m 40s - Automatische Erstellung von 2 Tabellen und DCRs (ausführlicher Modus)
Video 1m 37s - Automatische Erstellung von 2 Tabellen und DCRs (normaler Modus)
Video 1m 34s - Schema von DCR und Tabelle anzeigen)
Video 2m 19s - Datenmanipulation
Video 1m 58s - Kusto-Abfragen gegen Daten
Video 3m 01s - Dashboards
Video 0m 48s - Beispielhafte Nutzung der Daten - Abfrage der Lenovo-Garantiedatenbank
Video 7m 25s - Bereitstellung über ClientInspector DeploymentKit


Welche Daten werden gesammelt?

ClientInspector kann verwendet werden, um viele großartige Informationen von Ihren Windows-Clients zu sammeln - und die Daten an Azure LogAnalytics Custom Tables zu senden.

Das Skript sammelt die folgenden Informationen (Einstellungen, Informationen, Konfiguration, Zustand):

  1. Angemeldeter Benutzer am Client
  2. Computerinformationen - BIOS, Prozessor, Hardwareinfo, Windows-Betriebssysteminfo, Betriebssysteminformationen, letzter Neustart
  3. Installierte Anwendungen, sowohl über WMI als auch Registry
  4. Antivirus-Sicherheitscenter von Windows - Standard-Antivirus, Status, Konfiguration
  5. Microsoft Defender Antivirus - alle Einstellungen einschließlich ASR, Ausschlüsse, Echtzeitschutz usw.
  6. Office - Version, Update-Kanal-Konfiguration, SKUs
  7. VPN-Client - Version, Produkt
  8. LAPS - Version
  9. Admin By Request (Drittanbieter) - Version
  10. Windows Update - letztes Ergebnis (wann), Windows Update-Quellinformationen (wo), ausstehende Updates, letzte Installationen (was)
  11. Bitlocker - Konfiguration
  12. Ereignisprotokoll - Suche nach bestimmten Ereignissen einschließlich Anmeldeereignissen, Bluescreens usw.
  13. Netzwerkadapter - Konfiguration, installierte Adapter
  14. IP-Informationen für alle Adapter
  15. Mitgliedschaft in der lokalen Administratorengruppe
  16. Windows-Firewall - Einstellungen für alle 3 Modi
  17. Gruppenrichtlinie - letzte Aktualisierung
  18. TPM-Informationen - relevant zur Erkennung von Maschinen mit/ohne TPM

Fügen Sie gerne weitere coole Datensammlungen hinzu, die Ihren Anforderungen entsprechen. Wenn Sie an der Community teilnehmen möchten, senden Sie mir bitte eine E-Mail mit Ihren Sammlungen, wenn Sie glauben, dass sie der gesamten Community von Nutzen sein könnten.


Quelldaten - welche Daten kann ich verwenden?

Sie können beliebige Quelldaten verwenden, die in PowerShell abgerufen werden können (WMI, CIM, externe Daten, REST-API, XML-Format, JSON-Format, CSV-Format usw.)

Es ist sehr wichtig zu verstehen, dass die Daten in der Regel vor dem Senden manipuliert werden müssen - um sicherzustellen, dass sie gültig sind und alle irrelevanten Daten entfernt wurden.

ClientInspector verwendet alle 24 Funktionen innerhalb des PowerShell-Moduls AzLogDcIngestPS, um die Manipulation von Quelldaten zu handhaben, um "Rauschen" in Daten zu entfernen, verbotene Spalten in Tabellen/DCR umzubenennen - und Unterstützung für Transparenz mit zusätzlichen Einblicken wie UserLoggedOn, CollectionTime, Computer:

Beispiele zur Verwendung der Funktionen Convert-CimArrayToObjectFixStructure, Add-CollectionTimeToAllEntriesInArray, Add-ColumnDataToAllEntriesInArray, ValidateFix-AzLogAnalyticsTableSchemaColumnNames, Build-DataArrayToAlignWithSchema, Filter-ObjectExcludeProperty```js #------------------------------------------------------------------------------------------- # Collecting data (in) #-------------------------------------------------------------------------------------------

Write-Output "" Write-Output "Collecting Bios information ... Please Wait !"

$DataVariable = Get-CimInstance -ClassName Win32_BIOS

#-------------------------------------------------------------------------------------------

Preparing data structure

#-------------------------------------------------------------------------------------------

convert CIM array to PSCustomObject and remove CIM class information

$DataVariable = Convert-CimArrayToObjectFixStructure -data $DataVariable -Verbose:$Verbose

add CollectionTime to existing array

$DataVariable = Add-CollectionTimeToAllEntriesInArray -Data $DataVariable -Verbose:$Verbose

add Computer & UserLoggedOn info to existing array

$DataVariable = Add-ColumnDataToAllEntriesInArray -Data $DataVariable -Column1Name Computer -Column1Data $Env:ComputerName -Column2Name UserLoggedOn -Column2Data $UserLoggedOn -Verbose:$Verbose

Remove unnecessary columns in schema

$DataVariable = Filter-ObjectExcludeProperty -Data $DataVariable -ExcludeProperty __*,SystemProperties,Scope,Qualifiers,Properties,ClassPath,Class,Derivation,Dynasty,Genus,Namespace,Path,Property_Count,RelPath,Server,Superclass -Verbose:$Verbose

Weitere Details zu den verfügbaren Funktionen in AzLogDcrIngestPS – und wie man sie verwendet – finden Sie hier


Desired State Dashboards – Wie erhalte ich Einblicke in meine Umgebung aus den Daten?

Im Rahmen der Erstbereitstellung mit dem ClientInSpectorV2-DeploymentKit haben Sie Zugriff auf viele Azure-Dashboards und Azure Workbooks.

Video 3m 01s – Dashboards

Die Idee der Dashboards ist, dass sie zeigen, wo Ihre Infrastruktur vom „gewünschten Zustand“ abweicht. Betrachten Sie sie als KPIs, bei denen die Infrastruktur nicht unter Kontrolle ist.

Anstatt sich mit Patchen und Antivirenverwaltung zu beschäftigen, können Sie KPIs betrachten, die zeigen, wo Computer nicht gepatcht sind – oder wo der Echtzeitschutz des Antivirenprogramms nicht läuft – oder Maschinen, die in den letzten 24 Stunden einen Bluescreen hatten.

Dies ist das gleiche Konzept wie der Microsoft Secure Score.

Antivirus

Bluescreens

Weitere Beispielansichten in der Lösung enthalten

Antivirus

Antivirus

Antivirus

Antivirus

Bitlocker

Bitlocker

Bluescreens

ComputerInfo

ComputerInfo

ComputerInfo

ComputerInfo

Defender

Office

Link zur vollständigen Liste der bereitgestellten Azure Workbooks

Alle Beispiel-Azure-Dashboards basieren auf angehefteten Teilen aus Azure Workbooks. Wenn Sie also tiefer einsteigen möchten, können Sie auf einen Link klicken und erhalten Zugriff auf die detaillierten Informationen.

Dashboards

Link zu den bereitgestellten Azure Dashboards

Kann ich eigene Workbooks & Dashboards erstellen – ja, das können Sie 😄

Wenn Sie weitere Dashboards oder Workbooks hinzufügen möchten, beginnen Sie in der Regel damit, die gesammelten Daten in den benutzerdefinierten Protokolltabellen mithilfe von KQL-Abfragen zu untersuchen. Wenn Sie die gewünschte Abfrage gefunden haben, können Sie neue Ansichten in Workbooks erstellen und Ihre Favoriten an Ihre Dashboards anheften.


Wie frage ich die Daten ab? – Kusto (KQL) ist die Antwort

Wenn Sie die Kusto-Sprache nicht kennen, empfehle ich Ihnen, damit herumzuspielen, da es eine wirklich leistungsstarke Sprache ist.

Video 1m 58s – Kusto-Abfragen gegen Daten
Video 3m 01s – Dashboards

Schreiben Sie Ihre erste Abfrage mit der Kusto Query Language

Analysieren von Abfrageergebnissen mit KQL

Nachfolgend finden Sie 4 Beispielabfragen für den Einstieg – basierend auf den Daten von ClientInspector.

Beispielabfrage 1: Erweiterte Suche mit Kusto (KQL)-Abfrage

Wenn Sie erweiterte Suchvorgänge durchführen möchten, können Sie herkömmliche Kusto (KQL)-Abfragen in den Tabellen verwenden.

Beispielabfrage ```js InvClientDefenderAvV2_CL | where TimeGenerated > ago(31d) | summarize CollectionTime = arg_max(CollectionTime, *) by Computer | where ((AMRunningMode == "Not running") or (parse_version(AMProductVersion) < parse_version("4.18.2203")) or (MPComputerStatusFound == false) or (MPPreferenceFound == false) or (RealTimeProtectionEnabled == false) or (AntivirusSignatureAge > 7) or (AntispywareSignatureAge > 7) or (NISSignatureAge > 7) or (AMRunningMode == "EDR Block Mode") or (AMRunningMode == "Passive Mode") or (AntispywareEnabled == false) or ((TamperProtectionSource != "ATP") and (TamperProtectionSource != "Intune")) or (IsTamperProtected == false) ) | project Computer, UserLoggedOn, CollectionTime, MPComputerStatusFound, MPPreferenceFound, AMEngineVersion, AMProductVersion, AMRunningMode, AMServiceEnabled, AMServiceVersion, AntispywareEnabled, AntispywareSignatureAge, AntispywareSignatureLastUpdated, AntispywareSignatureVersion, AntivirusEnabled, AntivirusSignatureAge, AntivirusSignatureLastUpdated, AntivirusSignatureVersion, BehaviorMonitorEnabled, DefenderSignaturesOutOfDate, DisableAutoExclusions, DisableBehaviorMonitoring, DisableRealtimeMonitoring, DisableScanningMappedNetworkDrivesForFullScan, DisableScanningNetworkFiles, DisableScriptScanning, EnableControlledFolderAccess, EnableNetworkProtection, FullScanAge, IoavProtectionEnabled, IsTamperProtected, IsVirtualMachine, MAPSReporting, NISEnabled, NISEngineVersion, NISSignatureAge, NISSignatureLastUpdated, NISSignatureVersion, OnAccessProtectionEnabled, ProductStatus, PUAProtection, QuickScanAge, RealTimeProtectionEnabled, RealTimeScanDirection, RebootRequired, ScanAvgCPULoadFactor, SignatureUpdateCatchupInterval, SignatureUpdateInterval, SubmitSamplesConsent, TamperProtectionSource ```

Beispielabfrage 2: Kusto-Abfrage zum Zusammenführen von Daten aus 3 Tabellen

Beispielabfrage ```js InvClientComputerInfoBiosV2_CL | summarize TimeGenerated = arg_max(TimeGenerated,*) by Computer | join (InvClientComputerInfoSystemV2_CL | summarize TimeGenerated = arg_max(TimeGenerated,*) by Computer) on $left.Computer == $right.Computer | join (InvClientComputerOSInfoV2_CL | summarize TimeGenerated = arg_max(TimeGenerated,*) by Computer) on $left.Computer == $right.Computer | project Computer, UserLoggedOn, SerialNumber, Manufacturer, PCSystemType, SystemFamily, Model, Windows=Caption2, WindowsVersion=Version1, TimeGenerated ```

Beispielabfrage 3: LogAnalytics-Daten von Powershell abfragen

Beispielabfrage ```js Connect-AzAccount

#----------------------------------------------------------------------------------------------------------------------

Variables

#----------------------------------------------------------------------------------------------------------------------

$LogAnalyticsWorkspaceId = "e74ca75a-c0e6-4933-a4f7-e5ae943fe4ac"

#----------------------------------------------------------------------------------------------------------------------

Collecting Computer data from Azure LogAnalytics

#---------------------------------------------------------------------------------------------------------------------- $Query = @' InvClientComputerInfoBiosV2_CL | summarize TimeGenerated = arg_max(TimeGenerated,) by Computer | join (InvClientComputerInfoSystemV2_CL | summarize TimeGenerated = arg_max(TimeGenerated,) by Computer) on $left.Computer == $right.Computer | join (InvClientComputerOSInfoV2_CL | summarize TimeGenerated = arg_max(TimeGenerated,*) by Computer) on $left.Computer == $right.Computer | project Computer, UserLoggedOn, SerialNumber, Manufacturer, PCSystemType, SystemFamily, Model, Windows=Caption2, WindowsVersion=Version1, TimeGenerated '@

write-output "Collecting computer information from LogAnalytics" $Query = Invoke-AzOperationalInsightsQuery -WorkspaceId $LogAnalyticsWorkspaceId -Query $Query $ComputerInfoArray = $Query.Results $ComputerInfoArray

root@kitploit:~
</details>

## Beispielabfrage 4: Integration von Daten mit anderen Quellen (Garantieprüfung gegen Lenovo-Garantiedatenbank)
Wenn wir die Daten in Azure LogAnalytics haben, können wir beginnen, die Daten mit anderen Quellen zu integrieren, z.B. mit Dell- oder Lenovo-Garantiedaten über REST-API-Nachschlage.

[Video 0m 48s - Beispielverwendung der Daten - Abfrage der Lenovo-Garantiedatenbank](https://youtu.be/3ZDyTwiLU0w)  

Hier ist ein Beispiel für eine Ausgabe, die automatisch von einem PowerShell-Skript erstellt wurde – extrahiert eine Liste von Computern & Seriennummern – und führt dann eine Abfrage der Lenovo-Garantiedatenbank durch, um Informationen darüber abzurufen, wann der Computer gekauft wurde – und seinen Garantiestatus.

[Beispiel-Garantieausgabe (Excel), basierend auf Daten, die von ClientInspector gesammelt wurden](https://github.com/KnudsenMorten/ClientInspectorV2/raw/main/img/WarrantyInfo.xlsx)

   
# Architektur, Schema und Netzwerk
ClientInspector (v2) lädt die gesammelten Daten in **Custom Logs** im **Azure LogAnalytics-Arbeitsbereich** hoch – unter Verwendung der **Log Ingestion API**, **Azure Data Collection Rules (DCR)** und **Azure Data Collection Endpoints (DCE)**. 

![Architecture](https://assets.kitploit.com/production/public/readmes/6097/a1f4330c4e3747c2ebe092927df32352c2c158028f239afb7617e608aa882966.png)

## Schema
Sowohl die DCR als auch die LogAnalytics-Tabelle haben ein Schema, das mit dem Schema des Quellobjekts übereinstimmen muss. Dies wird durch die Verwendung von Funktionen im AzLogDcrIngestPS-Modul gehandhabt.

[Video 1m 40s - Automatische Erstellung von 2 Tabellen und DCRs (ausführlicher Modus)](https://youtu.be/rIUNs3yT-eI)  
[Video 1m 37s - Automatische Erstellung von 2 Tabellen und DCRs (normaler Modus)](https://youtu.be/khQMDcON6r8)  
[Video 1m 34s - Schema von DCR und Tabelle anzeigen](https://youtu.be/NDSNhvpa4Gs)  

AzLogDcrIngestPS unterstützt 2 Modi zur Verwaltung des Schemas: **Merge** und **Overwrite**

### SchemaMode = Merge (Standard)
Wenn Sie SchemaMode = Merge setzen, werden neue Eigenschaften des Quellobjekts zum aktuellen Schema des Log Analytics hinzugefügt (zusammengeführt). Die DCR importiert das Schema aus der Log Analytics-Tabelle, um sicherzustellen, dass sie identisch sind.

Der Standardmodus ist Merge, wenn Sie die Variable SchemaMode in den Funktionen nicht definieren: 
CheckCreateUpdate-TableDr-Structure
CreateUpdate-AzLogAnalyticsCustomLogTableDcr
CreateUpdate-AzDataCollectionRuleLogIngestCustomLog

### SchemaMode = Overwrite
Wenn Sie SchemaMode = Overwrite setzen, wird das Schema in der DCR und der Tabelle basierend auf dem Schema des Quellobjekts überschrieben (aktualisiert). 


## Netzwerk
Sie haben 3 Optionen für die Konnektivität zu Azure für den Daten-Upload: 

|Upload-Methode|Verbindungsdetails|Betriebssystem-Konformität|
|:------------|:-------------------|:------------|
|Öffentlicher Zugriff|REST-Endpunkt sendet an DCE über öffentliche IP des DCE|Endpunkt unterstützt TLS 1.2|
|Privater Zugriff|REST-Endpunkt sendet an DCE über Private Link des DCE|Endpunkt unterstützt TLS 1.2|
|Log-Hub|REST-Endpunkt sendet Daten über [log-hub](https://github.com/KnudsenMorten/AzLogDcrIngestPSLogHub) – ein von mir entwickeltes Konzept.|Endpunkt unterstützt TLS 1.2 nicht.<br> Azure akzeptiert keine Verbindungen von diesen Geräten direkt|

### Mit dem Internet verbundene Endpunkte – Betriebssystem-Konformität
![Mit dem Internet verbundene Endpunkte – Betriebssystem-Konformität](https://assets.kitploit.com/production/public/readmes/6097/3cc67f07297302ff59d08c95a790ec8ad417f8dbd07f566a24b154eecfecb8bb.png)

Sie müssen die folgenden Endpunkte in Ihrer Firewall zulassen:
|Endpunkt|Zweck|Port|Richtung|HTTPS-Inspektion umgehen|
|:-------|:------|:----|:-------|:----------------------|
|global.handler.control.monitor.azure.com|Zugriffssteuerungsdienst|Port 443|Ausgehend|Ja|
|DCE Logs Ingestion URI<br><br>Beispiel<br>https://dce-log-platform-management-client-demo-p-iur0.westeurope-1.ingest.monitor.azure.com|Logdaten erfassen|Port 443|Ausgehend|Ja|

<br>

### Kein Internetzugang oder Betriebssystem-Inkompatibilität, z. B. bei Verwendung von TLS 1.0/1.1
[Informieren Sie sich über das Log-Hub-Konzept unter diesem Link](https://github.com/KnudsenMorten/AzLogDcrIngestPSLogHub)

![Kein Internetzugang oder Betriebssystem-Inkompatibilität, z. B. bei Verwendung von TLS 1.0/1.1](https://assets.kitploit.com/production/public/readmes/6097/42435b25d7c2cc8d405e62d577420fa980aef5f9267f461c56ce9a08f7f81917.png)

<br>

# Implementierung
Hoffentlich werden Sie feststellen, dass es ziemlich einfach ist, alles zum Laufen zu bringen. Die 3 Schritte sind unten aufgeführt.

Bevor Sie beginnen, empfehle ich Ihnen, die Komponenten in der folgenden Einführung genauer zu lesen.

<details>
  <summary>Einführung in die Azure-Komponenten, die im Rahmen von ClientInspector verwendet werden</summary>

<br>

Die folgenden Komponenten werden benötigt:

| Azure-Ressource                | Zweck                                           | Weitere Informationen |
| :-------------                | :-----                                            | :-----           |
| Ein beliebiger REST-Endpunkt  | Dies ist die Quelle, die Daten sendet              |                  |
| Log Ingestion API             | Dies ist die neue API, die die alte HTTP Data Collector API ersetzt | https://learn.microsoft.com/en-us/azure/azure-monitor/logs/logs-ingestion-api-overview |
| Data Collection Endpoint (DCE)| Dies ist der Einstiegspunkt für die Kommunikation vom Endpunkt. Daten werden an eine **Azure Data Collection Endpoint Ingestion Uri** gesendet. Ein einzelner DCE kann mehrere DCRs unterstützen, sodass Sie eine andere DCR für verschiedene Quellen und Zieltabellen angeben können. | https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/data-collection-endpoint-overview?tabs=portal |
| Data Collection Rules (DCR)   | Data Collection Rules definieren die gesammelten Daten (Schema) und legen fest, wie und wohin diese Daten gesendet oder gespeichert werden sollen. Die DCR muss die Struktur der Eingabedaten und die Struktur der Zieltabelle verstehen. Wenn beide nicht übereinstimmen, kann sie eine Transformation verwenden, um die Quelldaten an die Zieltabelle anzupassen. Sie können die Transformation auch verwenden, um Quelldaten zu filtern und andere Berechnungen oder Konvertierungen durchzuführen. | https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/data-collection-rule-overview | 
| Azure LogAnalytics-Arbeitsbereich | Daten werden an Custom Logs in Azure LogAnalytics gesendet | https://learn.microsoft.com/en-us/azure/azure-monitor/logs/log-analytics-overview |
| Azure Workbooks               | Im Rahmen der Bereitstellung werden Beispiel-Workbooks bereitgestellt | https://learn.microsoft.com/en-us/azure/azure-monitor/visualize/workbooks-overview |
| Azure Dashboards              | Im Rahmen der Bereitstellung werden Beispiel-Workbooks bereitgestellt | https://learn.microsoft.com/en-us/azure/azure-monitor/visualize/tutorial-logs-dashboards |
| Kusto (KQL)                   | Daten können mit Kusto (KQL)-Abfragen analysiert werden | https://learn.microsoft.com/en-us/azure/azure-monitor/logs/get-started-queries |

</details>

Die Schritte zur Einrichtung von ClientInspector in Ihrer Umgebung sind:
1. [Umgebung mit ClientInSpectorV2-DeploymentKit einrichten](https://github.com/KnudsenMorten/ClientInspectorV2-DeploymentKit)

2. ClientInspector zum ersten Mal ausführen (Ersteinrichtung) – siehe unten
<details>
  <summary>So konfigurieren Sie die Ersteinrichtung von Azure LogAnalytics-Tabellen und Data Collection Rules (erstmalig)</summary>

<br>
Ich empfehle, einen Referenzcomputer zu verwenden, der für die Tabellen-/DCR-Verwaltung genutzt wird. Auf diese Weise ist es ein kontrollierter Prozess, falls Änderungen vorgenommen werden müssen – z. B. wenn sich das Schema des Quellobjekts ändert.

<br>
<br>
Konfiguration:

1. Wenn Sie das DeploymentKit ausführen, bereitet es automatisch die ClientInspector-Datei für Sie vor, sodass Sie nur noch die Variablen einfügen müssen```js
$TenantId                                   = "xxxx" 
$LogIngestAppId                             = "xxxx" 
$LogIngestAppSecret                         = "xxxx" 

$DceName                                    = "xxxx" 
$LogAnalyticsWorkspaceResourceId            = "xxxx"

$AzDcrPrefixClient                          = "xxx" 
$AzDcrSetLogIngestApiAppPermissionsDcrLevel = $false
$AzDcrLogIngestServicePrincipalObjectId     = "xxx" 
$AzDcrDceTableCreateFromReferenceMachine    = @()
$AzDcrDceTableCreateFromAnyMachine          = $true
  1. Richten Sie einen Bereitstellungsauftrag ein, damit ClientInspector täglich ausgeführt wird, um das Inventar zu sammeln. Sie können das ClientInspector-Skript mit Ihrem bevorzugten Bereitstellungstool ausführen. Skripte für Microsoft Intune und ConfigMgr werden bereitgestellt.
Wie bereitstelle ich mit Microsoft Intune ?
Sie führen das Inventarskript mit 'proaktiven Remediationen' in Microsoft Intune aus.
  1. Laden Sie das Erkennungsskript ClientInspector_Detection.ps1 herunter (Rechtsklick und 'Link speichern unter' wählen)

  2. Öffnen Sie die Datei mit Ihrem bevorzugten Editor. Passen Sie die Häufigkeit an, wie oft das Inventar ausgeführt werden soll.```js ##################################

VARIABLES

##################################

root@kitploit:~
$RunEveryHours    = 8
$LastRun_RegPath  = "HKLM:\SOFTWARE\ClientInspector"
$LastRun_RegKey   = "ClientInSpector_System"
root@kitploit:~
3. Jetzt müssen wir den Korrektur-Job erstellen. Gehen Sie in das Microsoft Intune Portal -> Berichte -> Endpunktanalyse --> Proaktive Korrekturen – und erstellen Sie ein Skriptpaket wie unten gezeigt

HINWEIS: Für das Korrektur-Skript verwenden Sie die Datei **ClientInspector.ps1**

![Flow](https://assets.kitploit.com/production/public/readmes/6097/c5d24f8afca4130a3a58414028120540526722b92ed5c9ae6cb029c605baf657.png)

![Flow](https://assets.kitploit.com/production/public/readmes/6097/ea200a01c92a84d801e03439891428130160b4dd8bbb11e6ecac4b2f68de18d1.png)


### Einschränkung von Intune

HINWEIS: Intune hat eine Größenbeschränkung von 200 Kb für ein Korrektur-Skript.  

![Intune-error](https://assets.kitploit.com/production/public/readmes/6097/7488505e7c4a5e3fa31e1007bf435b89aeb5ebf4fb1c1dbf133835082cce33e6.png)


Falls Sie diese Grenze erreichen, empfehle ich, das Skript in 2 Skripte aufzuteilen.

![Intune-split](https://assets.kitploit.com/production/public/readmes/6097/3ddc7edb1bdf2a492928a0dad8487996a9166878fba20a0403d347a895fe69a3.png)

![Intune-split](https://assets.kitploit.com/production/public/readmes/6097/36f29366fa4fbf0f878a569489c59100601f5a27f8d015373497b9fd387309ec.png)

Denken Sie daran, den Header-Bereich einschließlich des UserLoggedOn-Abschnitts als Header der zweiten Datei einzufügen. UserLoggedOn wird verwendet, um anzuzeigen, welcher Benutzer angemeldet ist.

Ich habe ein [Beispiel-Skript-Setup](https://github.com/KnudsenMorten/ClientInspectorV2/tree/main/Sample%20intune%20setup%20if%20file%20size%20is%20more%20than%20200%20Kb) vorbereitet, in dem Sie sehen können, wie man sie trennt. Hinweis: Der Code ist in diesen Skripten NICHT aktualisiert. Stellen Sie daher sicher, dass Sie die Abschnitte aus der Haupt-ClientInspector-Datei übernehmen.

Im Grunde ist die Struktur wie folgt:

Datei 1 enthält Header + UserLoggedOn (Abschnitt 1) + Abschnitt 2-9 + schreibt Check-Flag in HKLM\Software\ClientInspector\ClientInspector_System_1  

Datei 2 enthält Header + UserLoggedOn (Abschnitt 1) + Abschnitt 10-18 + schreibt Check-Flag in HKLM\Software\ClientInspector\ClientInspector_System_2  


![Flow](https://assets.kitploit.com/production/public/readmes/6097/37639a721b2d45fae907e177c6cb90ea32151f1ab8bdb1262e8e2bed0f8ec354.png)

![Flow](https://assets.kitploit.com/production/public/readmes/6097/96d02fdeaf59594c29e9755b0033557a3594e33b6bf61b92fa38edebd4c5b84d.png)

![Flow](https://assets.kitploit.com/production/public/readmes/6097/070c7a1431ad3899d496cc333224c8ff58b35d523ba7c77e11ba151501039d73.png)


</details>


<details>
  <summary>Wie bereitstellen mit ConfigMgr (oder einem anderen Tool, das eine CMD-Datei ausführt)?</summary>
  
<br>
Sie führen das Inventarskript über ein traditionelles Paket + Bereitstellung aus.
    
1. [Laden Sie die CMD-Datei ClientInspector.cmd herunter](https://github.com/KnudsenMorten/ClientInspectorV2/raw/main/ConfigMgr/ClientInspector.cmd) (Rechtsklick und 'Ziel speichern unter' wählen)

2. Erstellen Sie eine Quellstruktur in Ihrem ConfigMgr-Paketquellverzeichnis, z. B. mit dem Namen ClientInspector.

3. Kopieren Sie die beiden benötigten Dateien **ClientInspector.cmd** und **ClientInspector.ps1** in das Verzeichnis

4. Erstellen Sie ein Paket – und weisen Sie das Paket an, **ClientInspector.cmd** auszuführen.

5. Erstellen Sie eine Bereitstellung

</details>

<br>

# Abhängigkeiten

## Powershell-Modul AzLogDcringestPS – von mir erstellt (Morten Knudsen)

ClientInspector benötigt das Powershell-Modul **AzLogDcrIngestPS**

Die Kernfunktionen des Powershell-Moduls **AzLogDcrIngestPS** umfassen:
* Automatisches Erstellen/Aktualisieren der DCRs und Tabellen basierend auf dem Quellobjektschema
* Validieren des Schemas auf Probleme mit Namenskonventionen. Falls solche gefunden werden, werden die Probleme behoben
* Aktualisieren des Schemas von DCRs und Tabellen, falls sich die Struktur des Quellobjekts ändert
* Automatische Reparatur, falls etwas mit einer DCR oder Tabelle schiefgeht
* Entfernen von Daten aus dem Quellobjekt, wenn Sie Spalten mit Daten, die Sie nicht senden möchten, entfernen möchten
* Konvertieren von Quellobjekten basierend auf CIM- oder PS-Objekten in PSCustomObjects/Array
* Hinzufügen relevanter Informationen zu jedem Datensatz wie UserLoggedOn, Computer, CollectionTime

Weitere detaillierte Informationen zum Modul finden Sie unter den folgenden Links:

[AzLogDcrIngestPS (Github)](https://github.com/KnudsenMorten/AzLogDcrIngestPS)

[AzLogDcrIngestPS (Powershell Gallery)](https://www.powershellgallery.com/packages/AzLogDcrIngestPS)

[AzLogDcrIngestPSLogHub (Github)](https://github.com/KnudsenMorten/AzLogDcrIngestPSLogHub)

<br>

## Powershell-Module von Drittanbietern
Ich ziehe es vor, Windows Update-Informationen mit einem bekannten Powershell-Modul, PSWindowsUpdate, abzurufen.

|Modulname|Zweck|Weitere Informationen|Autor|
|:---------|:------|:--------|:-----|
|NuGet|Allgemeiner Paketanbieter, der zum Bereitstellen vieler Powershell-Module verwendet wird, einschließlich AzLogDcrIngestPS<br><br>Der Paketanbieter wird beim Ausführen des Skripts automatisch auf dem Computer installiert|[Link](https://www.nuget.org/packages)|
|PSWindowsUpdate|Sammlung von Windows Update-Informationen (ausstehende Updates, installierte Updates usw.)<br><br>Das Modul wird beim Ausführen des Skripts automatisch auf dem Computer installiert|[Link](https://www.powershellgallery.com/packages/PSWindowsUpdate)|Michal Gajda

<br>

# Ausführen von ClientInspector.ps1 – 3 Modi
ClientInspector unterstützt 3 Möglichkeiten zum Installieren/Aktualisieren/Importieren des benötigten Powershell-Moduls: **Download**, **PsGallery**, **LocalPath**

Standardmäßig wird die neueste Version von PsGallery in den CurrentUser-Bereich heruntergeladen.

[Video 3m 19s – Ausführen von ClientInspector über die Befehlszeile (normaler Modus)](https://youtu.be/4kA4BE0zJ9g)  

## .\ClientInspector.ps1 -function:LocalPath
ClientInspector sucht nach der Datei **AzLogDcrIngest.psm1** im Verzeichnis, aus dem das Skript ausgeführt wird.
Wenn AzLogDcrIngest.psm1 fehlt, wird das Skript beendet – andernfalls wird ein Import-Module durchgeführt.

Beispiel```
.\ClientInspector.ps1 -verbose:$false -function:localpath

ClientInspector | Inventory of Operational & Security-related information
Developed by Morten Knudsen, Microsoft MVP - for free community use

Using AzLogDcrIngestPS module from local path D:\scripts\ClientInspectorV2
Tool herunterladen

Validating/fixing schema data structure of source data

$DataVariable = ValidateFix-AzLogAnalyticsTableSchemaColumnNames -Data $DataVariable -Verbose:$Verbose

Aligning data structure with schema (requirement for DCR)

$DataVariable = Build-DataArrayToAlignWithSchema -Data $DataVariable -Verbose:$Verbose

root@kitploit:~
Sie können das Quellobjekt überprüfen, indem Sie diesen Befehl ausführen.````
# Get insight about the schema structure of an object BEFORE changes. Command is only needed to verify columns in schema
Get-ObjectSchemaAsArray -Data $DataVariable -Verbose:$Verbose

Office

Office

Office

WU

WU

WU

Winfw

  1. Starten Sie PowerShell als lokaler Administrator

  2. Starten Sie das Skript mit diesem Befehl```js C:\ClientInspector\ClientInspector.ps1 -verbose:$true

root@kitploit:~
4. ClientInspector wird 10-20 Minuten lang ausgeführt und erstellt die notwendigen Tabellen & Data Collection Rules – basierend auf der tatsächlichen Struktur in Ihrer Umgebung. Bitte gehen Sie die Ergebnisse auf dem Bildschirm durch und achten Sie auf Fehler (rot).

5. Wenn alles gut aussieht, führen Sie das Skript erneut aus. Es wird dann viel schneller durchlaufen. Überprüfen Sie mit Kusto-Abfragen in den verschiedenen Tabellen, ob Daten eingehen. HINWEIS: Der erste Upload der Daten kann ca. 10-15 Minuten dauern, da die Pipeline im Backend erstellt werden muss.

6. Als letzte Änderung müssen wir 2 Parameter in den Parametern ändern, um ClientInspector mitzuteilen, Schemaänderungen nur dann vorzunehmen, wenn das Skript auf dem Referenzrechner ausgeführt wird.```js
$AzLogDcrTableCreateFromReferenceMachine    = @("<<MyReferenceMachineComputerName>>")   # sample @("ComputerName")
$AzLogDcrTableCreateFromAnyMachine          = $false    # important so changes can only happen on reference machine
  1. Sie sind jetzt bereit, es in Ihrer Testgruppe bereitzustellen

.\ClientInspector.ps1 -function:Download

ClientInspector lädt bei jeder Ausführung die neueste Version aus meinem Github-Repo herunter und speichert sie im lokalen Pfad (ca. 300 kb).

Beispiel``` .\ClientInspector.ps1 -verbose:$false -function:download

ClientInspector | Inventory of Operational & Security-related information Developed by Morten Knudsen, Microsoft MVP - for free community use

Downloading latest version of module AzLogDcrIngestPS from https://github.com/KnudsenMorten/CientInspectorV2 into local path D:\scripts\ClientInspectorV2

root@kitploit:~
## .\ClientInspector.ps1 -function:PsGallery -scope [AllUsers|CurrentUser]
Dieser Parameter erfordert einen weiteren Parameter: -scope [AllUsers | CurrentUser]

ClientInspector prüft, ob das Modul im gewählten Bereich installiert ist.
Falls nicht installiert, wird automatisch die neueste Version aus der PowerShell Gallery heruntergeladen und das Modul importiert.
Wenn der Client die neueste Version ausführt, wird fortgefahren.

Beispiel```
.\ClientInspector.ps1 -verbose:$false -function:PSGallery -scope:CurrentUser

ClientInspector | Inventory of Operational & Security-related information
Developed by Morten Knudsen, Microsoft MVP - for free community use

Powershell module was not found !
Installing in scope currentuser .... Please Wait !

  • Firefly - Ein fortschrittlicher Black-Box-Fuzzer und nicht nur ein Standard-Tool zur Asset-Erkennung.
  • QIDI - Ein fortschrittliches Rule-Engine, das zur Erkennung von Schwachstellen in Webanwendungen entwickelt wurde.
  • BombParty - Ein interaktives Cheat-Programm für das Spiel BombParty auf jklm.fun.
  • NITL - Ein leistungsstarkes Tool zur Asset-Erkennung und ein Befehlszeilen-Fuzzer für Sicherheitstests.
  • One-Lin3r - Bietet One-Liner, die bei Penetrationstests, Rechteausweitungen und mehr helfen.
  • WAF-A-MoLE - Ein geführter, mutationsbasierter Fuzzer für ML-basierte Web Application Firewalls.
  • TIDoS-Framework - Das offensive Framework für Penetrationstests von Webanwendungen.
  • DSSS - Verdammt kleiner SQLi-Scanner.
  • Phonia - Das ultimative Toolkit zum Finden und Verfolgen von Telefonnummern.
  • ByPassBeEF - BurpSuite-Erweiterung, die die Kontrolle über BeEFs hook.js ermöglicht und Kompatibilität mit BurpSuites Upstream-Proxy und einem benutzerdefinierten SSL-Zertifikat hinzufügt.
  • Demiguise - HTA-Verschlüsselungstool für RedTeams.
  • Rustbuster - Ein umfassender Web-Fuzzer und Tool zur Inhaltserkennung.
  • BruteSploit - Sammlung von Methoden zur automatisierten Generierung, zum Brute-Forcing und zur Manipulation von Wortlisten mit interaktiver Shell.
  • AutoSploit - Automatisierter Massen-Exploiter.
  • fuzzuli - Ein URL-basiertes Fuzzing-Tool, das darauf abzielt, kritische Backup-Dateien zu finden, indem es eine dynamische Wortliste basierend auf der Domain erstellt.
  • XSScrapy - Ein XSS/SQLi-Spider.
  • PwnXSS - Ein leistungsstarker XSS-Scanner.
  • Sn1per - Automatisiertes Pentest-Framework für offensive Sicherheitsexperten.
  • IntRec-Pack - Intelligence- und Reconnaissance-Bundle/Installationsskript.
  • pik - Verarbeitet das Einfärben, Formatieren und Fusionieren verschiedener Arten biologischer Sequenzen.
  • OSINT-Framework - Eine Sammlung von OSINT-Tools.``` .\ClientInspector.ps1 -verbose:$false -function:PsGallery -scope:currentuser

ClientInspector | Inventory of Operational & Security-related information Developed by Morten Knudsen, Microsoft MVP - for free community use

Checking latest version at PsGallery for AzLogDcrIngestPS module OK - Running latest version

root@kitploit:~
</details>

<br>

## Beispielausgabe von ClientInspector
[Video 3m 19s - Ausführen von ClientInspector über die Befehlszeile (normaler Modus)](https://youtu.be/4kA4BE0zJ9g)  


<br>

# Sicherheit
## Codesignatur
Sowohl die **ClientInspector.ps1-Datei** als auch das **AzLogDcrIngestPS-Modul (AzLogDcrIngest.psm1)** sind mit meinem Codesignaturzertifikat (2LINKIT – mein Unternehmen) signiert. Auf diese Weise können Sie es ausführen, wenn Sie signierte Skripte benötigen. Sie können es natürlich auch mit Ihrem eigenen internen Codesignaturzertifikat signieren.

![Signiert](https://assets.kitploit.com/production/public/readmes/6097/95ae9fae064341feae5467ba04c909e3bab84393eb7070a304d9d9e6fd184499.png)

Bitte [laden Sie das öffentliche Schlüsselzertifikat herunter](https://github.com/KnudsenMorten/ClientInspectorV2/raw/main/Trusted_Publisher_Certificate/2LINKIT-TrustedPublisher.cer) und legen Sie es in Ihren 'trusted publisher'-Container, um dem Herausgeber (2LINKIT – mein Unternehmen) zu vertrauen. Sie können dies mit Intune oder Gruppenrichtlinien bereitstellen.

![Vertrauenswürdiger Herausgeber](https://assets.kitploit.com/production/public/readmes/6097/b02285397783a3495f5d1418ed716fa450b677117dd1754875354779568b0b47.png)  
![Vertrauenswürdiger Herausgeber](https://assets.kitploit.com/production/public/readmes/6097/740ae59eff117b8e59d56a7274440a991b7c5ceddd486894160d0248826084b2.png)  
![Vertrauenswürdiger Herausgeber](https://assets.kitploit.com/production/public/readmes/6097/47d1eb6b7da9ff5a341b8486c7b4bc7532b0b8ef3d05e7b710d495e183929279.png)  


### Intune-Bereitstellung erfordert keinen vorhandenen vertrauenswürdigen Herausgeber
Standardmäßig führt Intune beim Ausführen von Korrekturskripten einen BYPASS durch.

## Struktur
Die Sicherheit von **ClientInspector** ist in 4 Schichten unterteilt: **Dateneingabe**, **Datenhochladen** (an das Backend senden) und **Datenansicht** (Dashboards) – sowie **Schemaverwaltung**

| Phase | Sicherheitsimplementierung |Delegierungen / Berechtigungen|
|:------|:------------------------|:------------------------|
|Dateneingabe (Sammlung)|Diese Phase wird durch die von Ihnen gewählte Methode zur Durchführung der tatsächlichen Sammlung gesteuert (Intune, ConfigMg oder andere Drittanbieter)|Das Skript muss als lokaler Administrator (Systemkontext) ausgeführt werden, um Kerndaten von Hardware und Windows sammeln zu können|
|Datenhochladen|Die Authentifizierung für die Logs Ingestion API erfolgt am DCE, das die standardmäßige Azure Resource Manager-Authentifizierung verwendet.<br><br>Eine gängige Strategie ist die Verwendung einer Anwendungs-ID und eines Anwendungsschlüssels, was auch die in ClientInspector verwendete Methode ist.<br><br>Azure AppId und Secret werden aus Gründen der Einfachheit im Header von ClientInspector gespeichert.<br><br>Es ist auch möglich, Azure Keyvault zum Speichern der AppId und des Secrets zu verwenden|[Details im ClientInspectV2-DeploymentKit behandelt](https://github.com/KnudsenMorten/ClientInspectorV2-DeploymentKit#security-1)|
|Datenansicht|Azure RCAC-Berechtigungen|Gewähren Sie Zugriff auf Ihre Azure LogAnalytics, Azure Workbooks und Azure Dashboards|
|Schemaverwaltung|Methode 1: Azure RBAC (empfohlen)<br><br>Methode 2: Azure-App mit Secret oder Zertifikat|[Details im ClientInSpectorV2-DeploymentKit behandelt](https://github.com/KnudsenMorten/ClientInspectorV2-DeploymentKit#azure-rbac-security-adjustment-separation-of-permissions-between-log-ingestion-and-tabledcr-management)|

<br>

# Layout des ClientInspector-Datensatzes
Jeder der Datensätze (BIOS, Anwendungen, BitLocker usw.) ist mit derselben 4-phasigen Struktur aufgebaut:

## Phase 1/4 – Variablen (Benennung – wohin die Daten gesendet werden sollen)```
#-------------------------------------------------------------------------------------------
# Variables
#-------------------------------------------------------------------------------------------
	
$TableName  = 'InvClientComputerInfoSystemV2'   # must not contain _CL
$DcrName    = "dcr-" + $AzDcrPrefixClient + "-" + $TableName + "_CL"

Phase 2/4 - Datensammlung```

#-------------------------------------------------------------------------------------------

Collecting data (in)

#-------------------------------------------------------------------------------------------

Write-Output "" Write-Output "Collecting Computer system information ... Please Wait !"

$DataVariable = Get-CimInstance -ClassName Win32_ComputerSystem

root@kitploit:~
## Phase 3/4 - Datenmanipulation (sicherstellen, dass die Daten im richtigen Format vorliegen und jegliches "Rauschen" entfernt wird sowie relevante Informationen hinzugefügt werden)```
#-------------------------------------------------------------------------------------------
# Preparing data structure
#-------------------------------------------------------------------------------------------

# convert CIM array to PSCustomObject and remove CIM class information
$DataVariable = Convert-CimArrayToObjectFixStructure -data $DataVariable -Verbose:$Verbose

# add CollectionTime to existing array
$DataVariable = Add-CollectionTimeToAllEntriesInArray -Data $DataVariable -Verbose:$Verbose

# add Computer & UserLoggedOn info to existing array
$DataVariable = Add-ColumnDataToAllEntriesInArray -Data $DataVariable -Column1Name Computer -Column1Data $Env:ComputerName  -Column2Name UserLoggedOn -Column2Data $UserLoggedOn

# Validating/fixing schema data structure of source data
$DataVariable = ValidateFix-AzLogAnalyticsTableSchemaColumnNames -Data $DataVariable -Verbose:$Verbose

# Aligning data structure with schema (requirement for DCR)
$DataVariable = Build-DataArrayToAlignWithSchema -Data $DataVariable -Verbose:$Verbose

Phase 4/4 - Datenausgabe (an LogAnalytics senden) - kombinierte Funktionen```

#-------------------------------------------------------------------------------------------

Create/Update Schema for LogAnalytics Table & Data Collection Rule schema

#-------------------------------------------------------------------------------------------

CheckCreateUpdate-TableDcr-Structure -AzLogWorkspaceResourceId $LogAnalyticsWorkspaceResourceId -SchemaMode Merge -AzAppId $LogIngestAppId -AzAppSecret $LogIngestAppSecret -TenantId $TenantId -Verbose:$Verbose -DceName $DceName -DcrName $DcrName -TableName $TableName -Data $DataVariable -LogIngestServicePricipleObjectId $AzDcrLogIngestServicePrincipalObjectId -AzDcrSetLogIngestApiAppPermissionsDcrLevel $AzDcrSetLogIngestApiAppPermissionsDcrLevel -AzLogDcrTableCreateFromAnyMachine $AzLogDcrTableCreateFromAnyMachine -AzLogDcrTableCreateFromReferenceMachine $AzLogDcrTableCreateFromReferenceMachine

#-----------------------------------------------------------------------------------------------

Upload data to LogAnalytics using DCR / DCE / Log Ingestion API

#-----------------------------------------------------------------------------------------------

Post-AzLogAnalyticsLogIngestCustomLogDcrDce-Output -DceName $DceName -DcrName $DcrName -Data $DataVariable -TableName $TableName ` -AzAppId $LogIngestAppId -AzAppSecret $LogIngestAppSecret -TenantId $TenantId -Verbose:$Verbose

root@kitploit:~
<br>

**TIPP: Fehler 513 - Entität ist zu groß**  
Standardmäßig sendet ClientInspector die Daten in Stapeln, basierend auf einer berechneten durchschnittlichen Größe pro Datensatz. Falls Ihr Datensatz unterschiedliche Größen aufweist, kann der Fehler 513 auftreten.

Ursache ist, dass Sie die Beschränkung von 1 MB pro Upload erreicht haben (Azure Pipeline-Beschränkung). Microsoft möchte viele kleinere Datenblöcke empfangen, da es sich um eine gemeinsam genutzte Umgebung handelt. Ich habe dieses Problem beim Abrufen der Liste aller installierten Anwendungen gesehen. Offenbar speichern die Anwendungen Informationen mit sehr unterschiedlichem Größenumfang.

Sie können dieses Problem umgehen, indem Sie den Parameter **-BatchAmount <Anzahl der pro Stapel zu sendenden Datensätze>** zum Post-command hinzufügen. Um sicherzugehen, setzen Sie ihn auf 1.```
Post-AzLogAnalyticsLogIngestCustomLogDcrDce-Output -DceName $DceName `
                                                   -DcrName $DcrName `
                                                   -Data $DataVariable `
                                                   -TableName $TableName `
                                                   -AzAppId $LogIngestAppId `
                                                   -AzAppSecret $LogIngestAppSecret `
                                                   -TenantId $TenantId `
                                                   -BatchAmount 1 `
                                                   -Verbose:$Verbose `
												   

Phase 4/4 "unter der Haube" - Datenausgabe (an LogAnalytics senden)```

#-----------------------------------------------------------------------------------------------

Check if table and DCR exist - or schema must be updated due to source object schema changes

#-----------------------------------------------------------------------------------------------

Get insight about the schema structure

$Schema = Get-ObjectSchemaAsArray -Data $Data $StructureCheck = Get-AzLogAnalyticsTableAzDataCollectionRuleStatus -AzLogWorkspaceResourceId $AzLogWorkspaceResourceId -TableName $TableName -DcrName $DcrName -SchemaSourceObject $Schema -SchemaMode $SchemaMode -AzAppId $AzAppId -AzAppSecret $AzAppSecret -TenantId $TenantId ` -Verbose:$Verbose

#-----------------------------------------------------------------------------------------------

Structure check = $true -> Create/update table & DCR with necessary schema

#-----------------------------------------------------------------------------------------------

build schema to be used for LogAnalytics Table

$Schema = Get-ObjectSchemaAsHash -Data $Data -ReturnType Table -Verbose:$Verbose

CreateUpdate-AzLogAnalyticsCustomLogTableDcr -AzLogWorkspaceResourceId $AzLogWorkspaceResourceId -SchemaSourceObject $Schema -SchemaMode $SchemaMode -TableName $TableName -AzAppId $AzAppId -AzAppSecret $AzAppSecret -TenantId $TenantId -Verbose:$Verbose

build schema to be used for DCR

$Schema = Get-ObjectSchemaAsHash -Data $Data -ReturnType DCR

CreateUpdate-AzDataCollectionRuleLogIngestCustomLog -AzLogWorkspaceResourceId $AzLogWorkspaceResourceId -SchemaSourceObject $Schema -SchemaMode $SchemaMode -DceName $DceName -DcrName $DcrName -TableName $TableName -LogIngestServicePricipleObjectId $LogIngestServicePricipleObjectId -AzDcrSetLogIngestApiAppPermissionsDcrLevel $AzDcrSetLogIngestApiAppPermissionsDcrLevel -AzAppId $AzAppId -AzAppSecret $AzAppSecret -TenantId $TenantId -Verbose:$Verbose

$AzDcrDceDetails = Get-AzDcrDceDetails -DcrName $DcrName -DceName $DceName -AzAppId $AzAppId -AzAppSecret $AzAppSecret -TenantId $TenantId ` -Verbose:$Verbose

Post-AzLogAnalyticsLogIngestCustomLogDcrDce -DceUri $AzDcrDceDetails[2] -DcrImmutableId $AzDcrDceDetails[6] -TableName $TableName -DcrStream $AzDcrDceDetails[7] -Data $Data -BatchAmount $BatchAmount -AzAppId $AzAppId -AzAppSecret $AzAppSecret -TenantId $TenantId ` -Verbose:$Verbose

root@kitploit:~
<br>

# Verbose-Modus & Weitere Hilfe
Wenn Sie detailliertere Informationen darüber erhalten möchten, was passiert, können Sie den Verbose-Modus aktivieren (-verbose:$true)```
.\ClientInspector.ps1 -verbose:$true -function:localpath

Wenn Sie es vorziehen, mit Powershell ISE zu testen, können Sie auch den Verbose-Modus mit der Variable $Verbose aktivieren.``` $Verbose = $false # can be $true or $false

root@kitploit:~
Wenn Sie Hilfe mit der Syntax und den Beispielen aus dem Modul AzLogDcrLogIngestPS erhalten möchten, können Sie get-module eingeben```
PS  get-command -module AzLogDcrIngestPS

CommandType     Name                                               Version    Source                                                                         
-----------     ----                                               -------    ------                                                                         
Function        Add-CollectionTimeToAllEntriesInArray              1.1.17     AzLogDcrIngestPS                                                               
Function        Add-ColumnDataToAllEntriesInArray                  1.1.17     AzLogDcrIngestPS                                                               
Function        Build-DataArrayToAlignWithSchema                   1.1.17     AzLogDcrIngestPS                                                               
Function        CheckCreateUpdate-TableDcr-Structure               1.1.17     AzLogDcrIngestPS                                                               
Function        Convert-CimArrayToObjectFixStructure               1.1.17     AzLogDcrIngestPS                                                               
Function        Convert-PSArrayToObjectFixStructure                1.1.17     AzLogDcrIngestPS                                                               
Function        CreateUpdate-AzDataCollectionRuleLogIngestCusto... 1.1.17     AzLogDcrIngestPS                                                               
Function        CreateUpdate-AzLogAnalyticsCustomLogTableDcr       1.1.17     AzLogDcrIngestPS                                                               
Function        Delete-AzDataCollectionRules                       1.1.17     AzLogDcrIngestPS                                                               
Function        Delete-AzLogAnalyticsCustomLogTables               1.1.17     AzLogDcrIngestPS                                                               
Function        Filter-ObjectExcludeProperty                       1.1.17     AzLogDcrIngestPS                                                               
Function        Get-AzAccessTokenManagement                        1.1.17     AzLogDcrIngestPS                                                               
Function        Get-AzDceListAll                                   1.1.17     AzLogDcrIngestPS                                                               
Function        Get-AzDcrDceDetails                                1.1.17     AzLogDcrIngestPS                                                               
Function        Get-AzDataCollectionRuleTransformKql               1.1.17     AzLogDcrIngestPS                                                               
Function        Get-AzDcrListAll                                   1.1.17     AzLogDcrIngestPS                                                               
Function        Get-AzLogAnalyticsTableAzDataCollectionRuleStatus  1.1.17     AzLogDcrIngestPS                                                               
Function        Get-ObjectSchemaAsArray                            1.1.17     AzLogDcrIngestPS                                                               
Function        Get-ObjectSchemaAsHash                             1.1.17     AzLogDcrIngestPS                                                               
Function        Post-AzLogAnalyticsLogIngestCustomLogDcrDce        1.1.17     AzLogDcrIngestPS                                                               
Function        Post-AzLogAnalyticsLogIngestCustomLogDcrDce-Output 1.1.17     AzLogDcrIngestPS                                                               
Function        Update-AzDataCollectionRuleDceEndpoint             1.1.17     AzLogDcrIngestPS                                                               
Function        Update-AzDataCollectionRuleResetTransformKqlDef... 1.1.17     AzLogDcrIngestPS                                                               
Function        Update-AzDataCollectionRuleTransformKql            1.1.17     AzLogDcrIngestPS                                                               
Function        ValidateFix-AzLogAnalyticsTableSchemaColumnNames   1.1.17     AzLogDcrIngestPS                                                               

Hilfe zu einem bestimmten Cmdlet erhalten - get-help Add-CollectionTimeToAllEntriesInArray -full``` get-help Add-CollectionTimeToAllEntriesInArray -full

NAME Add-CollectionTimeToAllEntriesInArray

SYNOPSIS Add property CollectionTime (based on current time) to all entries on the object

SYNTAX Add-CollectionTimeToAllEntriesInArray [-Data] []

DESCRIPTION Gives capability to do proper searching in queries to find latest set of records with same collection time Time Generated cannot be used when you are sending data in batches, as TimeGenerated will change An example where this is important is a complete list of applications for a computer. We want all applications to show up when queriying for the latest data

PARAMETERS -Data Object to modify

root@kitploit:~
    Required?                    true
    Position?                    1
    Default value                
    Accept pipeline input?       false
    Accept wildcard characters?  false
    
<CommonParameters>
    This cmdlet supports the common parameters: Verbose, Debug,
    ErrorAction, ErrorVariable, WarningAction, WarningVariable,
    OutBuffer, PipelineVariable, and OutVariable. For more information, see 
    about_CommonParameters (https:/go.microsoft.com/fwlink/?LinkID=113216). 

INPUTS None. You cannot pipe objects

OUTPUTS Updated object with CollectionTime

root@kitploit:~
-------------------------- EXAMPLE 1 --------------------------

PS C:\>#-------------------------------------------------------------------------------------------

# Variables
#-------------------------------------------------------------------------------------------
$Verbose                   = $true  # $true or $false

#-------------------------------------------------------------------------------------------
# Collecting data (in)
#-------------------------------------------------------------------------------------------
$DNSName                   = (Get-CimInstance win32_computersystem).DNSHostName +"." + (Get-CimInstance win32_computersystem).Domain
$ComputerName              = (Get-CimInstance win32_computersystem).DNSHostName
[datetime]$CollectionTime  = ( Get-date ([datetime]::Now.ToUniversalTime()) -format "yyyy-MM-ddTHH:mm:ssK" )

$UserLoggedOnRaw           = Get-Process -IncludeUserName -Name explorer | Select-Object UserName -Unique
$UserLoggedOn              = $UserLoggedOnRaw.UserName

$DataVariable = Get-CimInstance -ClassName Win32_Processor | Select-Object -ExcludeProperty "CIM*"

#-------------------------------------------------------------------------------------------
# Preparing data structure
#-------------------------------------------------------------------------------------------
$DataVariable = Convert-CimArrayToObjectFixStructure -data $DataVariable -Verbose:$Verbose
$DataVariable

# add CollectionTime to existing array
$DataVariable = Add-CollectionTimeToAllEntriesInArray -Data $DataVariable -Verbose:$Verbose
$DataVariable

#-------------------------------------------------------------------------------------------
# Output
#-------------------------------------------------------------------------------------------

VERBOSE:   Adding CollectionTime to all entries in array .... please wait !
Caption                                 : Intel64 Family 6 Model 165 Stepping 5
Description                             : Intel64 Family 6 Model 165 Stepping 5
InstallDate                             : 
Name                                    : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
Status                                  : OK
Availability                            : 3
ConfigManagerErrorCode                  : 
ConfigManagerUserConfig                 : 
CreationClassName                       : Win32_Processor
DeviceID                                : CPU0
ErrorCleared                            : 
ErrorDescription                        : 
LastErrorCode                           : 
PNPDeviceID                             : 
PowerManagementCapabilities             : 
PowerManagementSupported                : False
StatusInfo                              : 3
SystemCreationClassName                 : Win32_ComputerSystem
SystemName                              : STRV-MOK-DT-02
AddressWidth                            : 64
CurrentClockSpeed                       : 2904
DataWidth                               : 64
Family                                  : 198
LoadPercentage                          : 1
MaxClockSpeed                           : 2904
OtherFamilyDescription                  : 
Role                                    : CPU
Stepping                                : 
UniqueId                                : 
UpgradeMethod                           : 1
Architecture                            : 9
AssetTag                                : To Be Filled By O.E.M.
Characteristics                         : 252
CpuStatus                               : 1
CurrentVoltage                          : 8
ExtClock                                : 100
L2CacheSize                             : 2048
L2CacheSpeed                            : 
L3CacheSize                             : 16384
L3CacheSpeed                            : 0
Level                                   : 6
Manufacturer                            : GenuineIntel
NumberOfCores                           : 8
NumberOfEnabledCore                     : 8
NumberOfLogicalProcessors               : 16
PartNumber                              : To Be Filled By O.E.M.
ProcessorId                             : BFEBFBFF000A0655
ProcessorType                           : 3
Revision                                : 
SecondLevelAddressTranslationExtensions : False
SerialNumber                            : To Be Filled By O.E.M.
SocketDesignation                       : U3E1
ThreadCount                             : 16
Version                                 : 
VirtualizationFirmwareEnabled           : False
VMMonitorModeExtensions                 : False
VoltageCaps                             : 
PSComputerName                          : 
CollectionTime                          : 12-03-2023 16:08:33




RELATED LINKS https://github.com/KnudsenMorten/AzLogDcrIngestPS

root@kitploit:~
<br>

# Kosten - Wie viel kostet die Speicherung dieser Daten?
Daten von **500** Clients, die **täglich** eine ClientInspector-Inventur durchführen, kosten ca. **DKK 200 pro Monat / USD 27 pro Monat**

<br>

# Fehler/Befunde, bitte informieren Sie mich
Derzeit wird ClientInspectorV1 auf Tausenden von Computern (und ServerInspectorV1 auf Tausenden von Servern) eingesetzt.

Da ClientInspectorV2 eine vollständige Neuerstellung von V1 ist, die jetzt z.B. mit einer neuen Namenskonvention ausgerollt wird, kann ich nicht versprechen, dass keine Fehler gefunden werden.
Aber **ich kann Ihnen versprechen**, dass ich sie so schnell beheben werde, wie es meine Freizeit erlaubt. Bitte senden Sie mir Ihre Befunde per E-Mail an [email protected].

Ziehen Sie in Betracht, die Github-Seite zu forken – oder behalten Sie die Updates in den Dashboards/Workbooks oder dem ClientInspector-Skript im Auge.

Darüber hinaus ist ClientInspector so konzipiert, dass es verschiedene Designs und Plattformen abdeckt, aber Sie können Konfigurationen haben, die einzigartig sind und nicht von Sammlungen oder Dashboards abgedeckt werden.
Aber der offene Ansatz ermöglicht es Ihnen, sowohl die Dashboards, Workbooks als auch das ClientInspector-Skript anzupassen, sodass es zu 100 % für Sie funktioniert. Betrachten Sie es als eine Showcase, um mehr mit Azure-Protokollierungstechnologien zu machen – es ist kein kostenpflichtiges Produkt mit 24x7-Support. Es ist für alle kostenlos!

<br>

# Kontakt
Wenn Sie Kommentare zur Lösung haben – oder einfach mit mir in Kontakt treten möchten, kontaktieren Sie mich bitte über diese Kanäle – ich würde mich über eine Verbindung freuen:

[Github](https://github.com/KnudsenMorten)

[Twitter](https://twitter.com/knudsenmortendk)

[Blog](https://mortenknudsen.net/)

[LinkedIn](https://www.linkedin.com/in/mortenwaltorpknudsen/)

[Microsoft MVP-Profil](https://mvp.microsoft.com/en-us/PublicProfile/5005156?fullName=Morten%20Knudsen)

[Sessionize](https://sessionize.com/mortenknudsen/)

[E-Mail](mailto:[email protected])

<br>

# Großer Dank an die großartigen Menschen in den Microsoft-Produktteams – ihr seid Rockstars :smile:
Zu guter Letzt möchte ich einigen Personen großen Dank aussprechen, mit denen ich bei der Entwicklung des AzLogDcrIngestPS Powershell-Moduls und meiner täglichen Arbeit mit den Azure-Protokollierungs- und Anzeigefunktionen zusammengearbeitet habe:

|Name|Rolle|
|:---|:---|
|Ivan Varnitski|Programmmanager - Azure Pipeline|
|Evgeny Ternovsky|Programmmanager - Azure Pipeline|
|Nick Kiest|Programmmanager - Azure Data Collection Rules|
|Oren Salzberg|Programmmanager - Azure LogAnalytics|
|Guy Wild|Technischer Redakteur - Azure LogAnalytics|
|John Gardner|Programmmanager - Azure Workbooks|
|Shikha Jain|Programmmanager - Azure Workbooks|
|Shayoni Seth|Programmmanager - Azure Monitor Agent|
|Jeff Wolford|Programmmanager - Azure Monitor Agent|
|Xema Pathak|Programmmanager - Azure VMInsight (Integration in Azure Monitor Agent)|

![MS-friends](https://assets.kitploit.com/production/public/readmes/6097/654c3844cb0324e2b53e04ebfd758652372ae0820636c3c37adc3f18ab178e8e.jpg)