
أداة جرد العملاء والكشف عن الانجراف المستندة إلى Azure والتي تجمع بيانات تكوين Windows (مكافحة الفيروسات، التصحيح، Bitlocker) في LogAnalytics للوحات المعلومات المدعومة بـ KQL وتنبيهات Sentinel.

هل أنت المسيطر؟ - أم أن بعض عمليات البنية التحتية الأساسية لديك مثل التصحيح، مكافحة الفيروسات، تمكين BitLocker تنحرف؟ أو هل ترغب في إجراء جرد متقدم، حيث يمكنك البحث عن حالة الضمان الخاصة بك مقابل ضمان Lenovo أو Dell، ثم تابع القراءة.
تعرف على ClientInspector، الذي يمكنه مساعدتك في الحصول على رؤية رائعة لـ بيئة عملائك بالكامل.
ClientInspector مجاني للمجتمع - تم بناؤه ليكون عرضًا رائعًا لكيفية جلب البيانات من أجهزة العملاء باستخدام Azure Log Ingestion Pipeline، Azure Data Collection Rules، Azure LogAnalytics؛ وعرضها باستخدام Azure Monitor & Azure Dashboards - والحصول على "تنبيهات الانحراف" باستخدام Microsoft Sentinel.
فيديو 3 دقائق 01 ثانية - لوحات المعلومات
يقوم ClientInspector (v2) بتحميل البيانات التي تم جمعها إلى سجلات مخصصة في مساحة عمل Azure LogAnalytics - باستخدام Log ingestion API، Azure Data Collection Rules (DCR) و Azure Data Collection Endpoints (DCE).




من المهم بالنسبة لي أن أذكر أنني لا أحاول بناء أداة إدارة منفصلة تتنافس مع مجموعة أدوات الأمان والإدارة من Microsoft.
لا شيء يتفوق على مجموعة حلول أمان وإدارة Microsoft Azure/M365. إنها حلول نجمية.
لكنني حقًا شغوف بـ قدرات التسجيل والقدرة على جلب البيانات من أجهزة العملاء، الخوادم، السحابة والأنظمة الخارجية - والحصول على معلومات قيمة رائعة من البيانات.
لدي حل مماثل لـ الخوادم - ServerInspector. لسوء الحظ، ليس عامًا.
شكر كبير للأشخاص الرائعين في فرق منتجات Microsoft - أنتم نجوم 😄
صيد سعيد 😄
ما هي البيانات التي يتم جمعها؟
لوحات معلومات الحالة المرغوبة - كيف تحصل على رؤية لبيئتي من البيانات؟
كيف أستعلم عن البيانات؟ - Kusto (KQL) هو الجواب
الهيكل، المخطط والشبكات
التنفيذ
التبعيات
تشغيل ClientInspector.ps1 - 3 أوضاع
نموذج إخراج ClientInspector
الأمان
تخطيط مجموعة بيانات ClientInspector
الوضع المفصل والمزيد من المساعدة
التكلفة - كم تكلفة تخزين هذه البيانات؟
العثور على أخطاء، يرجى إبلاغي
اتصل بنا
فيديو 3 دقائق 19 ثانية - تشغيل ClientInspector باستخدام سطر الأوامر (الوضع العادي)
فيديو 1 دقيقة 40 ثانية - إنشاء تلقائي لجدولين و DCRs (الوضع المفصل)
فيديو 1 دقيقة 37 ثانية - إنشاء تلقائي لجدولين و DCRs (الوضع العادي)
فيديو 1 دقيقة 34 ثانية - رؤية مخطط DCR والجدول
فيديو 2 دقيقة 19 ثانية - معالجة البيانات
فيديو 1 دقيقة 58 ثانية - استعلامات Kusto على البيانات
فيديو 3 دقائق 01 ثانية - لوحات المعلومات
فيديو 0 دقيقة 48 ثانية - مثال استخدام البيانات - البحث في قاعدة ضمان Lenovo
فيديو 7 دقائق 25 ثانية - النشر عبر ClientInspector DeploymentKit
يمكن استخدام ClientInspector لجمع الكثير من المعلومات الرائعة من أجهزة Windows الخاصة بك - وإرسال البيانات إلى جداول مخصصة في Azure LogAnalytics.
يجمع السكربت المعلومات التالية (الإعدادات، المعلومات، التكوين، الحالة):
لا تتردد في إضافة مجموعات بيانات رائعة أخرى لتناسب احتياجاتك. إذا كنت ترغب في المشاركة في المجتمع، يرجى إرسال بريد إلكتروني إلي مع مجموعاتك، إذا كنت تعتقد أنها قد تفيد المجتمع بأكمله.
يمكنك استخدام أي بيانات مصدر يمكن استردادها إلى Powershell (wmi، cim، بيانات خارجية، rest api، تنسيق xml، تنسيق json، تنسيق csv، إلخ)
من المهم جدًا أن نفهم أن البيانات تحتاج عادةً إلى معالجتها قبل إرسالها - لضمان صحتها وإزالة أي بيانات غير ذات صلة.
يستخدم ClientInspector جميع الوظائف الـ 24 داخل وحدة Powershell، AzLogDcIngestPS، للتعامل مع معالجة بيانات المصدر لـ إزالة "الضوضاء" في البيانات، لـ إعادة تسمية الأعمدة المحظورة في الجداول/DCR - ودعم احتياجات الشفافية مع رؤية إضافية مثل UserLoggedOn، CollectionTime، Computer:
Write-Output "" Write-Output "Collecting Bios information ... Please Wait !"
$DataVariable = Get-CimInstance -ClassName Win32_BIOS
#-------------------------------------------------------------------------------------------
#-------------------------------------------------------------------------------------------
$DataVariable = Convert-CimArrayToObjectFixStructure -data $DataVariable -Verbose:$Verbose
$DataVariable = Add-CollectionTimeToAllEntriesInArray -Data $DataVariable -Verbose:$Verbose
$DataVariable = Add-ColumnDataToAllEntriesInArray -Data $DataVariable -Column1Name Computer -Column1Data $Env:ComputerName -Column2Name UserLoggedOn -Column2Data $UserLoggedOn -Verbose:$Verbose
$DataVariable = Filter-ObjectExcludeProperty -Data $DataVariable -ExcludeProperty __*,SystemProperties,Scope,Qualifiers,Properties,ClassPath,Class,Derivation,Dynasty,Genus,Namespace,Path,Property_Count,RelPath,Server,Superclass -Verbose:$Verbose
يرجى الاطلاع على المزيد من التفاصيل حول الوظائف المتاحة في AzLogDcrIngestPS - وكيفية استخدامها هنا
كجزء من النشر الأولي باستخدام ClientInSpectorV2-DeploymentKit، ستحصل على إمكانية الوصول إلى العديد من لوحات信息和 مصنفات Azure.
فيديو 3 دقائق و 01 ثانية - لوحات المعلومات
فكرة لوحات المعلومات هي أنها ستظهر أين تبتعد البنية التحتية عن 'الحالة المرغوبة'. فكر فيها كمؤشرات أداء رئيسية (KPIs)، حيث البنية التحتية ليست تحت السيطرة.
بدلاً من وجود مهمة تتعلق بالتحديثات وإدارة مكافحة الفيروسات، يمكنك التفكير في وجود مؤشرات أداء رئيسية، والتي ستظهر أين لا يتم تحديث أجهزة الكمبيوتر - أو أين لا تعمل الحماية في الوقت الفعلي في مكافحة الفيروسات - أو الأجهزة التي تعرضت لشاشة زرقاء خلال الـ 24 ساعة الماضية.
هذا هو نفس مفهوم Microsoft Secure Score.















رابط لرؤية القائمة الكاملة لمصنفات Azure المقدمة
جميع لوحات معلومات Azure النموذجية تم إنشاؤها استناداً إلى أجزاء مثبتة من مصنفات Azure، لذلك إذا كنت تريد التعمق، يمكنك النقر على رابط وستحصل على الوصول إلى المعلومات التفصيلية.

رابط لرؤية لوحات معلومات Azure المقدمة
إذا كنت ترغب في إضافة المزيد من لوحات المعلومات أو المصنفات، فعادةً ما تبدأ بالتحقيق في البيانات المجمعة في جداول السجلات المخصصة باستخدام استعلامات KQL. عندما تجد الاستعلام المطلوب، يمكنك إنشاء مشاهدات جديدة في المصنفات - وتثبيت المفضلة لديك في لوحات المعلومات الخاصة بك.
إذا كنت لا تعرف لغة Kusto، أوصيك بالبدء في اللعب بها، لأنها لغة قوية حقاً.
فيديو 1 دقيقة و 58 ثانية - استعلامات Kusto ضد البيانات
فيديو 3 دقائق و 01 ثانية - لوحات المعلومات
اكتب أول استعلام لك باستخدام Kusto Query Language
تحليل نتائج الاستعلام باستخدام KQL
فيما يلي 4 نماذج من الاستعلامات لبدء العمل - استناداً إلى البيانات من ClientInspector.
إذا كنت ترغب في القيام بالصيد المتقدم، يمكنك استخدام استعلامات Kusto (KQL) التقليدية في الجداول
#----------------------------------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------------------------------------------
$LogAnalyticsWorkspaceId = "e74ca75a-c0e6-4933-a4f7-e5ae943fe4ac"
#----------------------------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------- $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
</details>
## مثال الاستعلام 4: دمج البيانات مع مصادر أخرى (التحقق من الضمان مقابل قاعدة بيانات ضمان Lenovo)
عندما تكون البيانات موجودة في Azure LogAnalytics، يمكننا البدء في دمجها مع مصادر أخرى، مثل بيانات الضمان من Dell أو Lenovo عبر استعلام REST API.
[فيديو 0:48 دقيقة - مثال على استخدام البيانات - البحث في قاعدة بيانات ضمان Lenovo](https://youtu.be/3ZDyTwiLU0w)
إليك مثال على الإخراج، الذي تم إنشاؤه تلقائيًا بواسطة سكريبت PowerShell – استخراج قائمة بأجهزة الكمبيوتر وأرقامها التسلسلية – ثم إجراء بحث في قاعدة بيانات ضمان Lenovo للحصول على معلومات حول تاريخ شراء الجهاز وحالة الضمان.
[مثال على إخراج الضمان (Excel)، استنادًا إلى البيانات التي جمعها ClientInspector](https://github.com/KnudsenMorten/ClientInspectorV2/raw/main/img/WarrantyInfo.xlsx)
<br>
# العمارة، المخطط والشبكات
يقوم ClientInspector (الإصدار 2) برفع البيانات المجمعة إلى **سجلات مخصصة** في **مساحة عمل Azure LogAnalytics** – باستخدام **واجهة برمجة تطبيقات استيعاب السجلات (Log ingestion API)** و **قواعد جمع بيانات Azure (DCR)** و **نقاط نهاية جمع بيانات Azure (DCE)**.

## المخطط (Schema)
يحتوي كل من DCR وجدول LogAnalytics على مخطط، يجب أن يتطابق مع مخطط الكائن المصدر. يتم التعامل مع ذلك باستخدام دوال في وحدة AzLogDcrIngestPS.
[فيديو 1:40 دقيقة - الإنشاء التلقائي لجدولين وDCRs (وضع مفصل)](https://youtu.be/rIUNs3yT-eI)
[فيديو 1:37 دقيقة - الإنشاء التلقائي لجدولين وDCRs (وضع عادي)](https://youtu.be/khQMDcON6r8)
[فيديو 1:34 دقيقة - رؤية مخطط DCR والجدول](https://youtu.be/NDSNhvpa4Gs)
تدعم AzLogDcrIngestPS وضعين لإدارة المخطط: **دمج (Merge)** و**استبدال (Overwrite)**
### SchemaMode = دمج (افتراضي)
إذا قمت بتعيين SchemaMode = Merge، فستتم إضافة الخصائص الجديدة من الكائن المصدر (دمجها) في المخطط الحالي لـ log analytics. سيقوم DCR باستيراد المخطط من جدول log analytics لضمان تطابقهما.
الوضع الافتراضي هو الدمج، إذا لم تقم بتعريف المتغير SchemaMode في الدوال:
CheckCreateUpdate-TableDr-Structure
CreateUpdate-AzLogAnalyticsCustomLogTableDcr
CreateUpdate-AzDataCollectionRuleLogIngestCustomLog
### SchemaMode = استبدال
إذا قمت بتعيين SchemaMode = Overwrite، فسيتم استبدال المخطط في DCR والجدول (تحديثه) بناءً على مخطط الكائن المصدر.
## الشبكات
لديك 3 خيارات للاتصال بـ Azure لرفع البيانات:
|طريقة الرفع|تفاصيل الاتصال|توافق نظام التشغيل|
|:----------|:--------------|:----------------|
|وصول عام|ترسل نقطة نهاية REST إلى DCE عبر عنوان IP العام لـ DCE|تدعم نقطة النهاية TLS 1.2|
|وصول خاص|ترسل نقطة نهاية REST إلى DCE عبر الارتباط الخاص لـ DCE|تدعم نقطة النهاية TLS 1.2|
|مركز السجلات (Log-hub)|ترسل نقطة نهاية REST البيانات عبر [مركز السجلات](https://github.com/KnudsenMorten/AzLogDcrIngestPSLogHub) – وهو مفهوم قمت ببنائه.|لا تدعم نقطة النهاية TLS 1.2.<br>لن تقبل Azure الاتصال من هذه الأجهزة مباشرةً|
### نقاط النهاية المتصلة بالإنترنت - الامتثال على مستوى نظام التشغيل

تحتاج إلى السماح بنقاط النهاية التالية في جدار الحماية الخاص بك:
|نقطة النهاية|الغرض|المنفذ|الاتجاه|تجاوز فحص HTTPS|
|:-----------|:----|:----|:------|:--------------|
|global.handler.control.monitor.azure.com|خدمة التحكم في الوصول|المنفذ 443|صادر|نعم|
|uri استيعاب سجلات DCE<br><br>مثال<br>https://dce-log-platform-management-client-demo-p-iur0.westeurope-1.ingest.monitor.azure.com|استيعاب بيانات السجلات|المنفذ 443|صادر|نعم|
<br>
### لا يوجد وصول إلى الإنترنت أو عدم الامتثال على مستوى نظام التشغيل مثلاً تشغيل TLS 1.0/1.1
[اطلع على مفهوم مركز السجلات باستخدام هذا الرابط](https://github.com/KnudsenMorten/AzLogDcrIngestPSLogHub)

<br>
# التنفيذ
آمل أن تختبر أنه من السهل جدًا تشغيل كل شيء. الخطوات الثلاث موضحة أدناه.
قبل البدء، أشجعك على قراءة المزيد من التفاصيل حول المكونات في المقدمة أدناه.
<details>
<summary>مقدمة عن مكونات Azure المستخدمة كجزء من ClientInspector</summary>
<br>
المكونات التالية مطلوبة:
|مورد Azure|الغرض|مزيد من المعلومات|
|:---------|:----|:----------------|
|أي نقطة نهاية REST|هذا هو المصدر الذي يرسل البيانات| |
|واجهة برمجة تطبيقات استيعاب السجلات (Log Ingestion API)|هذه هي الواجهة الجديدة التي تحل محل واجهة HTTP Data Collector API القديمة|https://learn.microsoft.com/en-us/azure/azure-monitor/logs/logs-ingestion-api-overview|
|نقطة نهاية جمع البيانات (DCE)|هذه هي نقطة الاتصال الرئيسية من نقطة النهاية. يتم إرسال البيانات إلى **Azure Data Collection Endpoint Ingestion Uri**. يمكن لـ DCE واحد دعم عدة DCRs، لذا يمكنك تحديد DCR مختلف لمصادر وجداول مستهدفة مختلفة.|https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/data-collection-endpoint-overview?tabs=portal|
|قواعد جمع البيانات (DCR)|تحدد قواعد جمع البيانات البيانات المجمعة (المخطط) وتحدد كيف وأين يجب إرسال هذه البيانات أو تخزينها. يجب أن يفهم DCR بنية بيانات الإدخال وبنية الجدول الهدف. إذا لم يتطابق الاثنان، فيمكنه استخدام تحويل لتحويل بيانات المصدر لمطابقة الجدول الهدف. يمكنك أيضًا استخدام التحويل لتصفية بيانات المصدر وإجراء أي حسابات أو تحويلات أخرى.|https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/data-collection-rule-overview|
|مساحة عمل Azure LogAnalytics|يتم إرسال البيانات إلى سجلات مخصصة في Azure LogAnalytics|https://learn.microsoft.com/en-us/azure/azure-monitor/logs/log-analytics-overview|
|Azure Workbooks|كجزء من النشر، سيتم نشر دفاتر عمل نموذجية|https://learn.microsoft.com/en-us/azure/azure-monitor/visualize/workbooks-overview|
|Azure Dashboards|كجزء من النشر، سيتم نشر دفاتر عمل نموذجية|https://learn.microsoft.com/en-us/azure/azure-monitor/visualize/tutorial-logs-dashboards|
|Kusto (KQL)|يمكن تحليل البيانات باستخدام استعلامات Kusto (KQL)|https://learn.microsoft.com/en-us/azure/azure-monitor/logs/get-started-queries|
</details>
الخطوات لإعداد ClientInspector في بيئتك هي:
1. [إعداد البيئة باستخدام ClientInSpectorV2-DeploymentKit](https://github.com/KnudsenMorten/ClientInspectorV2-DeploymentKit)
2. تشغيل ClientInspector لأول مرة (الإعداد الأولي) – انظر أدناه لمزيد من التفاصيل
<details>
<summary>كيفية تكوين الإعداد الأولي لجداول Azure LogAnalytics وقواعد جمع البيانات (المرة الأولى)</summary>
<br>
أوصي بوجود جهاز كمبيوتر مرجعي يُستخدم لإدارة الجدول/DCR. بهذه الطريقة، ستكون العملية خاضعة للتحكم، إذا كان يجب إجراء تغييرات – على سبيل المثال إذا تغير مخطط الكائن المصدر.
<br>
<br>
التكوين:
1. عند تشغيل DeploymentKit، سيقوم تلقائيًا بإعداد ملف ClientInspector لك، لذلك تحتاج فقط إلى إدراج المتغيرات```js
$TenantId = "xxxx"
$LogIngestAppId = "xxxx"
$LogIngestAppSecret = "xxxx"
$DceName = "xxxx"
$LogAnalyticsWorkspaceResourceId = "xxxx"
$AzDcrPrefixClient = "xxx"
$AzDcrSetLogIngestApiAppPermissionsDcrLevel = $false
$AzDcrLogIngestServicePrincipalObjectId = "xxx"
$AzDcrDceTableCreateFromReferenceMachine = @()
$AzDcrDceTableCreateFromAnyMachine = $true
قم بتنزيل سكريبت الكشف ClientInspector_Detection.ps1 (انقر بزر الماوس الأيمن واختر 'حفظ الرابط باسم')
افتح الملف باستخدام المحرر المفضل لديك. قم بتعديل التكرار لعدد المرات التي تريد تشغيل المخزون فيها```js ##################################
##################################
$RunEveryHours = 8
$LastRun_RegPath = "HKLM:\SOFTWARE\ClientInspector"
$LastRun_RegKey = "ClientInSpector_System"
3. الآن نحتاج إلى إنشاء مهمة التصحيح. انتقل إلى بوابة Microsoft Intune -> التقارير -> تحليل نقطة النهاية --> التصحيح الاستباقي - وأنشئ حزمة سكريبت كما هو موضح أدناه
ملاحظة: بالنسبة لسكريبت التصحيح، استخدم ملف **ClientInspector.ps1**


### قيود Intune
ملاحظة: لدى Intune حد أقصى لحجم سكريبت التصحيح هو 200 كيلوبايت.**

في حال الوصول إلى هذا الحد، أقترح تقسيم السكريبت إلى سكريبتين.


تذكر تضمين القسم الرأسي بما في ذلك قسم UserLoggedOn كرأس للملف الثاني. يتم استخدام UserLoggedOn لعرض المستخدم الذي قام بتسجيل الدخول.
لقد أعددت [نموذج إعداد سكريبت](https://github.com/KnudsenMorten/ClientInspectorV2/tree/main/Sample%20intune%20setup%20if%20file%20size%20is%20more%20than%20200%20Kb)، حيث يمكنك رؤية كيفية فصلها. ملاحظة: الكود غير محدث في هذه السكريبتات، لذا تأكد من أخذ الأقسام من ملف ClientInspector الرئيسي.
بشكل أساسي، الهيكل كالتالي:
الملف 1 يحتوي على الرأس + UserLoggedOn (القسم 1) + الأقسام 2-9 + يكتب علامة تحقق إلى HKLM\Software\ClientInspector\ClientInspector_System_1
الملف 2 يحتوي على الرأس + UserLoggedOn (القسم 1) + الأقسام 10-18 + يكتب علامة تحقق إلى HKLM\Software\ClientInspector\ClientInspector_System_2



</details>
<details>
<summary>كيفية النشر باستخدام ConfigMgr (أو أي أداة أخرى تشغل ملف CMD)؟</summary>
<br>
ستقوم بتشغيل سكريبت الجرد باستخدام حزمة + نشر تقليدية
1. [تحميل ملف CMD ClientInspector.cmd](https://github.com/KnudsenMorten/ClientInspectorV2/raw/main/ConfigMgr/ClientInspector.cmd) (انقر بزر الماوس الأيمن واختر 'حفظ الرابط باسم')
2. قم بإنشاء هيكل مصدري في دليل مصدر حزمة ConfigMgr الخاص بك، على سبيل المثال اسمه ClientInspector.
3. انسخ الملفين المطلوبين **ClientInspector.cmd** و **ClientInspector.ps1** إلى الدليل
4. قم بإنشاء حزمة - ووجه الحزمة لتشغيل **ClientInspector.cmd**
5. قم بإنشاء نشر
</details>
<br>
# التبعيات
## وحدة PowerShell AzLogDcringestPS - التي بنيتها أنا (Morten Knudsen)
يتطلب ClientInspector وحدة PowerShell، **AzLogDcrIngestPS**
الميزات الأساسية لوحدة PowerShell **AzLogDcrIngestPS** تشمل:
* إنشاء/تحديث DCRs والجداول تلقائيًا - بناءً على مخطط الكائن المصدر
* التحقق من صحة المخطط لمشكلات اصطلاح التسمية. إذا تم العثور عليها، ستقوم بتخفيف المشكلات
* تحديث مخطط DCRs والجداول، في حالة تغير هيكل الكائن المصدر
* الإصلاح التلقائي في حالة حدوث خطأ في DCR أو جدول
* يمكن إزالة البيانات من الكائن المصدر، إذا كانت هناك أعمدة من البيانات لا ترغب في إرسالها
* يمكن تحويل الكائنات المصدر بناءً على كائنات CIM أو PS إلى PSCustomObjects/مصفوفة
* يمكن إضافة معلومات ذات صلة إلى كل سجل مثل UserLoggedOn، Computer، CollectionTime
يمكنك العثور على معلومات أكثر تفصيلًا حول الوحدة باستخدام الروابط أدناه:
[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 من طرف ثالث
أفضل استرداد معلومات تحديثات Windows باستخدام وحدة PowerShell المعروفة، PSWindowsUpdate.
|اسم الوحدة|الغرض|مزيد من المعلومات|الإسناد|
|:---------|:------|:--------|:-----|
|NuGet|موفر حزم شائع يستخدم لنشر العديد من وحدات PowerShell بما في ذلك AzLogDcrIngestPS<br><br>سيتم تثبيت موفر الحزم تلقائيًا على الكمبيوتر عند تشغيل السكريبت|[الرابط](https://www.nuget.org/packages)|
|PSWindowsUpdate|جمع معلومات تحديثات Windows (التحديثات المعلقة، التحديثات المثبتة، إلخ.)<br><br>سيتم تثبيت الوحدة تلقائيًا على الكمبيوتر عند تشغيل السكريبت|[الرابط](https://www.powershellgallery.com/packages/PSWindowsUpdate)|Michal Gajda
<br>
# تشغيل ClientInspector.ps1 - 3 أوضاع
يدعم ClientInspector 3 طرق لتثبيت/تحديث/استيراد وحدة PowerShell المطلوبة: **Download**، **PsGallery**، **LocalPath**
افتراضيًا، سيقوم بتحميل أحدث إصدار من PsGallery إلى نطاق المستخدم الحالي.
[فيديو 3m 19s - تشغيل ClientInspector باستخدام سطر الأوامر (الوضع العادي)](https://youtu.be/4kA4BE0zJ9g)
## .\ClientInspector.ps1 -function:LocalPath
سيبحث ClientInspector عن ملف **AzLogDcrIngest.psm1** في الدليل الذي سيعمل منه السكريبت.
إذا كان ملف AzLogDcrIngest.psm1 مفقودًا، سينتهي السكريبت - وإلا فسيقوم باستيراد الوحدة.
مثال```
.\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
$DataVariable = ValidateFix-AzLogAnalyticsTableSchemaColumnNames -Data $DataVariable -Verbose:$Verbose
$DataVariable = Build-DataArrayToAlignWithSchema -Data $DataVariable -Verbose:$Verbose
يمكنك التحقق من الكائن المصدر بتشغيل هذا الأمر````
# 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







ابدأ تشغيل PowerShell كمسؤول محلي
ابدأ البرنامج النصي باستخدام هذا الأمر```js C:\ClientInspector\ClientInspector.ps1 -verbose:$true
4. سيعمل ClientInspector لمدة 10-20 دقيقة وسينشئ الجداول الضرورية وقواعد Data Collection Rules - بناءً على الهيكل الفعلي في بيئتك. يرجى مراجعة النتائج على الشاشة والبحث عن أي أخطاء (باللون الأحمر)
5. عندما يبدو كل شيء جيدًا، أعد تشغيل السكريبت وسيعمل بشكل أسرع بكثير. تحقق من وصول البيانات باستخدام استعلامات Kusto في الجداول المختلفة. ملاحظة: قد يستغرق التحميل الأول للبيانات حوالي 10-15 دقيقة، حيث يجب إنشاء خط الأنابيب في الخلفية
6. كآخر تغيير، نحتاج إلى تغيير معلمتين في المعلمات لإخبار ClientInspector بإجراء تغييرات المخطط فقط عند التشغيل من الجهاز المرجعي.```js
$AzLogDcrTableCreateFromReferenceMachine = @("<<MyReferenceMachineComputerName>>") # sample @("ComputerName")
$AzLogDcrTableCreateFromAnyMachine = $false # important so changes can only happen on reference machine
سيقوم ClientInspector بتنزيل أحدث إصدار من مستودع Github الخاص بي وتخزينه في المسار المحلي في كل مرة يتم تشغيله (حوالي 300 كيلوبايت)
مثال``` .\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
## .\ClientInspector.ps1 -function:PsGallery -scope [AllUsers|CurrentUser]
تتطلب هذه المعلمة معلمة أخرى: -scope [AllUsers | CurrentUser]
سيتحقق ClientInspector مما إذا كانت الوحدة مثبتة في النطاق المختار.
إذا لم تكن مثبتة، فسيقوم تلقائيًا بتنزيل أحدث إصدار من Powershell Gallery واستيراد الوحدة.
إذا كان العميل يشغل أحدث إصدار، فسيستمر.
مثال```
.\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 !
INPUT:``` .\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
</details>
<br>
## نموذج إخراج ClientInspector
[فيديو 3 دقائق و19 ثانية - تشغيل ClientInspector باستخدام سطر الأوامر (الوضع العادي)](https://youtu.be/4kA4BE0zJ9g)
<br>
# الأمان
## توقيع الكود
كل من **ClientInspector.ps1-file** و **AzLogDcrIngestPS module (AzLogDcrIngest.psm1)** موقعة بشهادة توقيع الكود الخاصة بي (2LINKIT - شركتي). بهذه الطريقة يمكنك تشغيله إذا كنت تتطلب توقيع البرامج النصية. بالطبع يمكنك أيضًا اختيار توقيعه بشهادة توقيع الكود الداخلية الخاصة بك.

يرجى [تنزيل شهادة المفتاح العام](https://github.com/KnudsenMorten/ClientInspectorV2/raw/main/Trusted_Publisher_Certificate/2LINKIT-TrustedPublisher.cer) ووضعها في حاوية 'الناشر الموثوق' الخاصة بك للثقة في الناشر (2LINKIT - شركتي). يمكنك نشر ذلك باستخدام Intune أو نهج المجموعة.



### نشر Intune لا يتطلب وجود الناشر الموثوق
بشكل افتراضي، سيقوم Intune بعمل BYPASS عند تشغيل البرامج النصية للعلاج.
## الهيكل
يتم تقسيم أمان **ClientInspector** إلى 4 طبقات: **data-in** و **data-upload** (إرسال إلى الخلفية) و **data-view** (لوحات البيانات) - و **schema-management**
| المرحلة | تنفيذ الأمان | التفويضات / الأذونات |
|:------|:------------------------|:------------------------|
|Data-in (collection)|يتم التحكم في هذه المرحلة بواسطة الطريقة التي تختارها لإجراء التجميع الفعلي (Intune أو ConfigMg أو طرف ثالث آخر)|يحتاج البرنامج النصي إلى التشغيل كمسؤول محلي (سياق النظام) ليكون قادرًا على جمع البيانات الأساسية من الأجهزة وWindows
|Data-upload|يتم تنفيذ المصادقة لواجهة برمجة تطبيقات إدخال السجلات في DCE، والتي تستخدم مصادقة Azure Resource Manager القياسية.<br><br>الإستراتيجية الشائعة هي استخدام معرف التطبيق ومفتاح التطبيق وهو أيضًا الطريقة المستخدمة في ClientInspector.<br><br>يتم تخزين Azure AppId وSecret في رأس ClientInspector لغرض البساطة<br><br>من الممكن أيضًا استخدام Azure Keyvault لتخزين AppId وSecret|[التفاصيل مغطاة في ClientInspectV2-DeploymentKit](https://github.com/KnudsenMorten/ClientInspectorV2-DeploymentKit#security-1)
|Data-view|أذونات Azure RCAC|يمنح الوصول إلى Azure LogAnalytics و Azure Workbooks و Azure Dashboards|
|Schema-management|الطريقة 1: Azure RBAC (موصى بها)<br><br>الطريقة 2: تطبيق Azure مع secret أو شهادة|[التفاصيل مغطاة في ClientInSpectorV2-DeploymentKit](https://github.com/KnudsenMorten/ClientInspectorV2-DeploymentKit#azure-rbac-security-adjustment-separation-of-permissions-between-log-ingestion-and-tabledcr-management)
<br>
# تخطيط مجموعة بيانات ClientInspector
تم بناء كل من مجموعات البيانات (bios, applications, bitlocker, إلخ) بنفس الهيكل ذي الأربع مراحل:
## المرحلة 1/4 - المتغيرات (التسمية - أين يتم إرسال البيانات)```
#-------------------------------------------------------------------------------------------
# Variables
#-------------------------------------------------------------------------------------------
$TableName = 'InvClientComputerInfoSystemV2' # must not contain _CL
$DcrName = "dcr-" + $AzDcrPrefixClient + "-" + $TableName + "_CL"
#-------------------------------------------------------------------------------------------
#-------------------------------------------------------------------------------------------
Write-Output "" Write-Output "Collecting Computer system information ... Please Wait !"
$DataVariable = Get-CimInstance -ClassName Win32_ComputerSystem
## المرحلة 3/4 - معالجة البيانات (تأكد من أن البيانات بالصيغة الصحيحة وإزالة أي "ضوضاء" وإضافة المعلومات ذات الصلة)```
#-------------------------------------------------------------------------------------------
# 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
#-------------------------------------------------------------------------------------------
#-------------------------------------------------------------------------------------------
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
#-----------------------------------------------------------------------------------------------
#-----------------------------------------------------------------------------------------------
Post-AzLogAnalyticsLogIngestCustomLogDcrDce-Output -DceName $DceName -DcrName $DcrName -Data $DataVariable -TableName $TableName ` -AzAppId $LogIngestAppId -AzAppSecret $LogIngestAppSecret -TenantId $TenantId -Verbose:$Verbose
<br>
**نصيحة: خطأ 513 - الكيان كبير جدًا**
بشكل افتراضي، سيرسل ClientInspector البيانات على دفعات بناءً على متوسط الحجم المحسوب لكل سجل. في حال كان مجموعة السجلات الخاصة بك ذات أحجام مختلفة، قد تتلقى خطأ 513.
السبب هو أنك تتجاوز حد 1 ميغابايت لكل تحميل (حد Azure Pipeline). ترغب Microsoft في استلام العديد من الأجزاء الصغيرة من البيانات، لأن هذه بيئة مشتركة. لاحظت هذه المشكلة عند استرداد قائمة جميع التطبيقات المثبتة. على ما يبدو، تخزن التطبيقات معلومات بأحجام متفاوتة جدًا.
يمكنك التخفيف من هذه المشكلة بإضافة المعامل **-BatchAmount <عدد السجلات المرسلة لكل دفعة>** إلى الأمر Post-command. إذا كنت تريد التأكد، اضبطه على 1```
Post-AzLogAnalyticsLogIngestCustomLogDcrDce-Output -DceName $DceName `
-DcrName $DcrName `
-Data $DataVariable `
-TableName $TableName `
-AzAppId $LogIngestAppId `
-AzAppSecret $LogIngestAppSecret `
-TenantId $TenantId `
-BatchAmount 1 `
-Verbose:$Verbose `
#-----------------------------------------------------------------------------------------------
#-----------------------------------------------------------------------------------------------
$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
#-----------------------------------------------------------------------------------------------
#-----------------------------------------------------------------------------------------------
$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
$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
<br>
# Verbose-mode & المزيد من المساعدة
إذا كنت تريد الحصول على معلومات أكثر تفصيلاً حول ما يحدث، يمكنك تمكين الوضع المفصل (-verbose:$true)```
.\ClientInspector.ps1 -verbose:$true -function:localpath
إذا كنت تفضل الاختبار باستخدام Powershell ISE، يمكنك أيضًا تمكين الوضع المفصل باستخدام المتغير $Verbose``` $Verbose = $false # can be $true or $false
إذا كنت ترغب في الحصول على مساعدة حول الصيغة والأمثلة من الوحدة النمطية AzLogDcrLogIngestPS، يمكنك كتابة
get-module```
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
الحصول على المساعدة حول أمر cmdlet محدد - 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
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
-------------------------- 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
<br>
# التكلفة - كم تكلفة تخزين هذه البيانات؟
بيانات من **500** عميل يقومون بجرد ClientInspector **يوميًا** ستكلفك تقريبًا **200 كرونة دانمركية شهريًا / 27 دولارًا أمريكيًا شهريًا**
<br>
# الأخطاء والاكتشافات، يرجى إبلاغي
اليوم، يتم استخدام ClientInspectorV1 على آلاف أجهزة الكمبيوتر (وServerInspectorV1 على آلاف الخوادم)
نظرًا لأن ClientInspectorV2 هو إعادة بناء كاملة من V1 يتم طرحها الآن مع، على سبيل المثال، اصطلاح تسمية جديد، لا يمكنني أن أعدك بعدم العثور على أخطاء.
لكن **يمكنني أن أعدك** بأنني سأصلحها بأسرع ما تسمح به أوقات فراغي. يرجى إرسال بريد إلكتروني إلى [email protected] مع ما تجده.
فكر في عمل fork لموقع Github - أو ترقب التحديثات في لوحات المعلومات/المصنفات أو برنامج ClientInspector النصي.
علاوة على ذلك، تم بناء ClientInspector لتغطية تصاميم ومنصات مختلفة، ولكن قد يكون لديك تكوينات فريدة لا تغطيها المجموعات أو لوحات المعلومات.
لكن النهج المفتوح يسمح لك بتعديل كل من لوحات المعلومات والمصنفات وبرنامج ClientInspector النصي، بحيث يعمل بنسبة 100% من أجلك. اعتبره عرضًا توضيحيًا للقيام بالمزيد باستخدام تقنيات تسجيل Azure - إنه ليس منتجًا مدفوعًا بدعم على مدار الساعة طوال أيام الأسبوع. إنه مجاني للجميع!
<br>
# الاتصال
إذا كان لديك تعليقات على الحل - أو تريد فقط التواصل معي، فيرجى الاتصال بي عبر هذه القنوات - أحب التواصل:
[Github](https://github.com/KnudsenMorten)
[Twitter](https://twitter.com/knudsenmortendk)
[Blog](https://mortenknudsen.net/)
[LinkedIn](https://www.linkedin.com/in/mortenwaltorpknudsen/)
[Microsoft MVP profile](https://mvp.microsoft.com/en-us/PublicProfile/5005156?fullName=Morten%20Knudsen)
[Sessionize](https://sessionize.com/mortenknudsen/)
[Mail](mailto:[email protected])
<br>
# شكر كبير للأشخاص الرائعين في فرق منتجات Microsoft - أنتم نجوم :smile:
أخيرًا، أود أن أقدم شكرًا كبيرًا لعدد قليل من الأشخاص الذين عملت معهم على بناء وحدة AzLogDcrIngestPS PowerShell وعملي اليومي مع قدرات السجل والعرض في Azure:
|الاسم|الدور|
|:---|:---|
|Ivan Varnitski|مدير برنامج - Azure Pipeline|
|Evgeny Ternovsky|مدير برنامج - Azure Pipeline|
|Nick Kiest|مدير برنامج - Azure Data Collection Rules|
|Oren Salzberg|مدير برنامج - Azure LogAnalytics|
|Guy Wild|كاتب تقني - Azure LogAnalytics|
|John Gardner|مدير برنامج - Azure Workbooks|
|Shikha Jain|مدير برنامج - Azure Workbooks|
|Shayoni Seth|مدير برنامج - Azure Monitor Agent|
|Jeff Wolford|مدير برنامج - Azure Monitor Agent|
|Xema Pathak|مدير برنامج - Azure VMInsight (التكامل مع Azure Monitor Agent)|
