Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
ClientInspectorV2 — Azure-आधारित क्लाइंट इन्वेंट्री और ड्रिफ्ट डिटेक्शन टूल जो विंडोज कॉन्फ़िगरेशन डेटा (एंटीवायरस, पैचिंग, बिटलॉकर) को LogAnalytics में एकत्र करता है, KQL-संचालित डैशबोर्ड और Sentinel अलर्टिंग के लिए। | Kitploit
उपकरण/GitHubGitHub/knudsenmorten/clientinspectorv2
रक्षात्मक उपकरणकॉन्फ़िगरेशन ऑडिटिंगक्लाउड सुरक्षाघटना प्रतिक्रियालॉग विश्लेषण
GitHubknudsenmorten/clientinspectorv2

ClientInspectorV2

Azure-आधारित क्लाइंट इन्वेंट्री और ड्रिफ्ट डिटेक्शन टूल जो विंडोज कॉन्फ़िगरेशन डेटा (एंटीवायरस, पैचिंग, बिटलॉकर) को LogAnalytics में एकत्र करता है, KQL-संचालित डैशबोर्ड और Sentinel अलर्टिंग के लिए।

रिपॉजिटरी देखें
2753 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

क्लाइंट इंस्पेक्टर (v2) का परिचय

ClientInspector

क्या आप नियंत्रण में हैं? - या आपकी कुछ मुख्य बुनियादी ढांचा प्रक्रियाएँ जैसे पैचिंग, एंटीवायरस, बिटलॉकर सक्षमीकरण बहाव कर रही हैं? या क्या आप उन्नत इन्वेंट्री करना चाहेंगे, जहाँ आप Lenovo या Dell वारंटी के विरुद्ध अपनी वारंटी स्थिति देख सकते हैं, तो पढ़ते रहें।

क्लाइंट इंस्पेक्टर देखें, जो आपको अपने संपूर्ण क्लाइंट वातावरण में उत्कृष्ट अंतर्दृष्टि प्राप्त करने में मदद कर सकता है।

क्लाइंट इंस्पेक्टर समुदाय के लिए मुफ़्त है - इसे एक शानदार प्रदर्शन के रूप में बनाया गया है कि आप Azure Log Ingestion Pipeline, Azure Data Collection Rules, Azure LogAnalytics का उपयोग करके अपने क्लाइंट्स से डेटा वापस कैसे ला सकते हैं; उन्हें Azure Monitor & Azure Dashboards के साथ देख सकते हैं - और Microsoft Sentinel का उपयोग करके "ड्रिफ्ट-अलर्ट" प्राप्त कर सकते हैं।

Video 3m 01s - Dashboards

क्लाइंट इंस्पेक्टर का आर्किटेक्चर और प्रवाह

क्लाइंट इंस्पेक्टर (v2) एकत्रित डेटा को Azure LogAnalytics कार्यक्षेत्र में कस्टम लॉग्स में अपलोड कर रहा है - Log ingestion API, Azure Data Collection Rules (DCR) और Azure Data Collection Endpoints (DCE) का उपयोग करके।

आर्किटेक्चर

नमूना डैशबोर्ड

KPIs

एंटीवायरस

ब्लूस्क्रीन

अस्वीकरण

मेरे लिए यह कहना महत्वपूर्ण है कि मैं एक अलग प्रबंधन उपकरण बनाने की कोशिश नहीं कर रहा हूँ, जो Microsoft सुरक्षा और प्रबंधन स्टैक के साथ प्रतिस्पर्धा करेगा।

Microsoft Azure/M365 प्रबंधन और सुरक्षा स्टैक को कोई नहीं हरा सकता। वे रॉक स्टार समाधान हैं।

लेकिन मैं वास्तव में लॉगिंग क्षमताओं और क्लाइंट्स, सर्वर, क्लाउड और तीसरे पक्ष के सिस्टम से डेटा वापस लाने की शक्ति के बारे में भावुक हूँ - और डेटा से शानदार मूल्यवान जानकारी प्राप्त करने के बारे में।

मेरे पास सर्वर के लिए एक समान समाधान है - सर्वर इंस्पेक्टर। दुर्भाग्य से, यह सार्वजनिक नहीं है।

माइक्रोसॉफ्ट उत्पाद टीमों के महान लोगों को बहुत-बहुत धन्यवाद - आप रॉक स्टार हैं 😄

शुभ शिकार 😄


त्वरित लिंक

क्या डेटा एकत्र किया जा रहा है?
वांछित स्थिति डैशबोर्ड - डेटा से अपने वातावरण की अंतर्दृष्टि कैसे प्राप्त करें?
मैं डेटा कैसे क्वेरी करूं? - Kusto (KQL) उत्तर है
आर्किटेक्चर, स्कीमा और नेटवर्किंग
कार्यान्वयन
निर्भरताएँ
ClientInspector.ps1 चलाना - 3 मोड
ClientInspector का नमूना आउटपुट
सुरक्षा
ClientInspector डेटा-सेट का लेआउट
वर्बोज़-मोड और अधिक सहायता
लागत - इन डेटा को संग्रहीत करने में कितना खर्च आता है? बग मिले, कृपया मुझे सूचित करें
संपर्क

समाधान के वीडियो

वीडियो 3मी 19से - ClientInspector को कमांडलाइन का उपयोग करके चलाना (सामान्य मोड)
वीडियो 1मी 40से - 2 तालिकाओं और DCRs का स्वचालित निर्माण (वर्बोज़ मोड)
वीडियो 1मी 37से - 2 तालिकाओं और DCRs का स्वचालित निर्माण (सामान्य मोड)
वीडियो 1मी 34से - DCR और तालिका की स्कीमा देखें)
वीडियो 2मी 19से - डेटा हेरफेर
वीडियो 1मी 58से - डेटा के विरुद्ध Kusto क्वेरी
वीडियो 3मी 01से - डैशबोर्ड
वीडियो 0मी 48से - डेटा का नमूना उपयोग - Lenovo वारंटी db के विरुद्ध लुकअप
वीडियो 7मी 25से - ClientInspector DeploymentKit के माध्यम से तैनाती


क्या डेटा एकत्र किया जा रहा है?

ClientInspector का उपयोग आपके Windows क्लाइंट्स से बहुत सारी शानदार जानकारी एकत्र करने के लिए किया जा सकता है - और डेटा को Azure LogAnalytics कस्टम तालिकाओं में भेज सकते हैं।

स्क्रिप्ट निम्नलिखित जानकारी (सेटिंग्स, सूचना, कॉन्फ़िगरेशन, स्थिति) एकत्र करती है:

  1. क्लाइंट पर लॉग ऑन उपयोगकर्ता
  2. कंप्यूटर की जानकारी - BIOS, प्रोसेसर, हार्डवेयर जानकारी, Windows OS जानकारी, OS जानकारी, अंतिम पुनरारंभ
  3. स्थापित एप्लिकेशन, दोनों WMI और रजिस्ट्री का उपयोग करके
  4. Windows से एंटीवायरस सुरक्षा केंद्र - डिफ़ॉल्ट एंटीवायरस, स्थिति, कॉन्फ़िगरेशन
  5. Microsoft Defender Antivirus - ASR, बहिष्करण, रीयलटाइम सुरक्षा आदि सहित सभी सेटिंग्स
  6. Office - संस्करण, अपडेट चैनल कॉन्फ़िगरेशन, SKU
  7. VPN क्लाइंट - संस्करण, उत्पाद
  8. LAPS - संस्करण
  9. Admin By Request (तीसरा पक्ष) - संस्करण
  10. Windows Update - अंतिम परिणाम (कब), विंडोज अपडेट स्रोत जानकारी (कहाँ), लंबित अपडेट, अंतिम स्थापनाएँ (क्या)
  11. Bitlocker - कॉन्फ़िगरेशन
  12. ईवेंटलॉग - लॉगऑन ईवेंट, ब्लू स्क्रीन आदि सहित विशिष्ट ईवेंट देखें
  13. नेटवर्क एडेप्टर - कॉन्फ़िगरेशन, स्थापित एडेप्टर
  14. सभी एडेप्टर के लिए IP जानकारी
  15. स्थानीय प्रशासक समूह सदस्यता
  16. Windows फ़ायरवॉल - सभी 3 मोड के लिए सेटिंग्स
  17. समूह नीति - अंतिम ताज़ा
  18. TPM जानकारी - TPM वाली/बिना TPM वाली मशीनों का पता लगाने के लिए प्रासंगिक

अपनी आवश्यकताओं के अनुरूप और अच्छे डेटा-संग्रह जोड़ने के लिए स्वतंत्र महसूस करें। यदि आप समुदाय में भाग लेना चाहते हैं, तो कृपया मुझे अपने संग्रह के साथ एक ईमेल भेजें, यदि आपको लगता है कि वे पूरे समुदाय के लाभ के हो सकते हैं।


स्रोत डेटा - मैं किस डेटा का उपयोग कर सकता हूँ?

आप किसी भी स्रोत डेटा का उपयोग कर सकते हैं जिसे Powershell में प्राप्त किया जा सकता है (wmi, cim, बाहरी डेटा, rest api, xml-format, json-format, csv-format, आदि)

यह समझना बहुत महत्वपूर्ण है कि डेटा को भेजने से पहले आमतौर पर हेरफेर करने की आवश्यकता होती है - यह सुनिश्चित करने के लिए कि वे मान्य हैं और कोई अप्रासंगिक डेटा हटा दिया गया है।

ClientInspector, Powershell मॉड्यूल AzLogDcIngestPS के भीतर सभी 24 फ़ंक्शनों का उपयोग करता है, ताकि स्रोत डेटा हेरफेर को संभाल सके, डेटा में "शोर" को हटा सके, तालिकाओं/DCR में निषिद्ध कॉलम का नाम बदल सके - और पारदर्शिता के लिए आवश्यकताओं का समर्थन कर सके, जैसे UserLoggedOn, CollectionTime, Computer जैसी अतिरिक्त अंतर्दृष्टि के साथ:

फ़ंक्शन 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

कृपया AzLogDcrIngestPS में उपलब्ध फ़ंक्शनों के बारे में अधिक जानकारी और उनका उपयोग कैसे करें, यहाँ देखें


वांछित स्थिति डैशबोर्ड - मेरे पर्यावरण से डेटा का अंतर्दृष्टि कैसे प्राप्त करें ?

प्रारंभिक तैनाती के भाग के रूप में ClientInSpectorV2-DeploymentKit का उपयोग करते हुए, आपको बहुत सारे Azure डैशबोर्ड और Azure वर्कबुक तक पहुंच प्राप्त होगी।

वीडियो 3m 01s - डैशबोर्ड

डैशबोर्ड का विचार यह है कि वे दिखाएंगे कि आपका बुनियादी ढाँचा 'वांछित स्थिति' से कहाँ भटक रहा है। उन्हें KPI के रूप में सोचें, जहाँ बुनियादी ढाँचा नियंत्रण में नहीं है।

पैचिंग और एंटीवायरस प्रबंधन के कार्य के बजाय, आप KPI रखने पर विचार कर सकते हैं, जो दिखाएंगे कि कंप्यूटर पैच नहीं किए गए हैं - या जहाँ एंटीवायरस में रीयलटाइम सुरक्षा चल नहीं रही है - या वे मशीनें जिन्होंने पिछले 24 घंटों में ब्लूस्क्रीन किया है।

यह Microsoft Secure Score के समान अवधारणा है।

एंटीवायरस

ब्लूस्क्रीन

समाधान में शामिल अधिक नमूना दृश्य

एंटीवायरस

एंटीवायरस

एंटीवायरस

एंटीवायरस

बिटलॉकर

बिटलॉकर

ब्लूस्क्रीन

कंप्यूटर जानकारी

कंप्यूटर जानकारी

कंप्यूटर जानकारी

कंप्यूटर जानकारी

डिफ़ेंडर

ऑफ़िस

प्रदान किए गए Azure वर्कबुक की पूरी सूची देखने का लिंक

सभी नमूना Azure डैशबोर्ड Azure वर्कबुक से पिन किए गए भागों के आधार पर बनाए गए हैं, इसलिए यदि आप गहराई में जाना चाहते हैं, तो आप एक लिंक पर क्लिक कर सकते हैं और विस्तृत जानकारी तक पहुँच प्राप्त करेंगे।

डैशबोर्ड

प्रदान किए गए Azure डैशबोर्ड देखने का लिंक

क्या मैं अपनी स्वयं की वर्कबुक और डैशबोर्ड बना सकता हूँ - हाँ, आप कर सकते हैं 😄

यदि आप और अधिक डैशबोर्ड या वर्कबुक जोड़ना चाहते हैं, तो आप सामान्यतः KQL क्वेरीज़ का उपयोग करके कस्टम लॉग तालिकाओं में एकत्रित डेटा की जांच करके शुरू करेंगे। जब आपको वांछित क्वेरी मिल जाए, तो आप वर्कबुक में नए दृश्य बना सकते हैं - और अपने पसंदीदा को अपने डैशबोर्ड पर पिन कर सकते हैं।


मैं डेटा कैसे क्वेरी करूं? - Kusto (KQL) ही उत्तर है

यदि आप Kusto भाषा नहीं जानते हैं, तो मैं अनुशंसा करता हूँ कि आप इसके साथ खेलना शुरू करें, क्योंकि यह वास्तव में एक शक्तिशाली भाषा है।

वीडियो 1m 58s - Kusto क्वेरीज़ विरुद्ध डेटा
वीडियो 3m 01s - डैशबोर्ड

Kusto क्वेरी भाषा के साथ अपनी पहली क्वेरी लिखें

KQL का उपयोग करके क्वेरी परिणामों का विश्लेषण करें

नीचे आपको शुरू करने के लिए 4 नमूना क्वेरी दी गई हैं - जो ClientInspector के डेटा पर आधारित हैं।

नमूना क्वेरी 1: Kusto (KQL) क्वेरी का उपयोग करके उन्नत शिकार

यदि आप उन्नत शिकार करना चाहते हैं, तो आप तालिकाओं में पारंपरिक Kusto (KQL) क्वेरी का उपयोग कर सकते हैं

नमूना क्वेरी ```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 ```

नमूना क्वेरी 2: 3 तालिकाओं से डेटा मर्ज करने के लिए Kusto क्वेरी

नमूना क्वेरी ```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 ```

नमूना क्वेरी 3: Powershell से LogAnalytics डेटा क्वेरी करें

नमूना क्वेरी ```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>

## नमूना प्रश्न 4: अन्य स्रोतों के साथ डेटा को एकीकृत करना (Lenovo वारंटी डेटाबेस के विरुद्ध वारंटी जाँच)

जब हमारे पास Azure LogAnalytics में डेटा होता है, तो हम अन्य स्रोतों के साथ डेटा को एकीकृत करना शुरू कर सकते हैं, जैसे REST API लुकअप के माध्यम से Dell या Lenovo वारंटी डेटा।

[वीडियो 0m 48s - डेटा के नमूना उपयोग - Lenovo वारंटी डीबी के विरुद्ध लुकअप](https://youtu.be/3ZDyTwiLU0w)  

यहां आउटपुट का एक उदाहरण दिया गया है, जो एक PowerShell स्क्रिप्ट द्वारा स्वचालित रूप से बनाया गया था - कंप्यूटरों और सीरियल नंबरों की सूची निकालना - और फिर कंप्यूटर कब खरीदा गया था और इसकी वारंटी स्थिति के बारे में जानकारी प्राप्त करने के लिए Lenovo वारंटी डेटाबेस में लुकअप करना।

[नमूना वारंटी आउटपुट (Excel), ClientInspector द्वारा एकत्रित डेटा पर आधारित](https://github.com/KnudsenMorten/ClientInspectorV2/raw/main/img/WarrantyInfo.xlsx)

<br>
   
# आर्किटेक्चर, स्कीमा और नेटवर्किंग
ClientInspector (v2) एकत्रित डेटा को **Azure LogAnalytics वर्कस्पेस** में **कस्टम लॉग्स** में अपलोड कर रहा है - **Log इंजेशन API**, **Azure Data Collection Rules (DCR)** और **Azure Data Collection Endpoints (DCE)** का उपयोग करके।

![आर्किटेक्चर](https://assets.kitploit.com/production/public/readmes/6097/a1f4330c4e3747c2ebe092927df32352c2c158028f239afb7617e608aa882966.png)

## स्कीमा
DCR और LogAnalytics तालिका दोनों का एक स्कीमा होता है, जिसे स्रोत ऑब्जेक्ट के स्कीमा से मेल खाना चाहिए। यह AzLogDcrIngestPS मॉड्यूल में फ़ंक्शन का उपयोग करके संभाला जाता है।

[वीडियो 1m 40s - 2 तालिकाओं और DCRs का स्वचालित निर्माण (वर्बोज़ मोड)](https://youtu.be/rIUNs3yT-eI)  
[वीडियो 1m 37s - 2 तालिकाओं और DCRs का स्वचालित निर्माण (सामान्य मोड)](https://youtu.be/khQMDcON6r8)  
[वीडियो 1m 34s - DCR और तालिका का स्कीमा देखें](https://youtu.be/NDSNhvpa4Gs)  

AzLogDcrIngestPS स्कीमा प्रबंधन के लिए 2 मोड का समर्थन करता है: **Merge** और **Overwrite**

### SchemaMode = Merge (डिफ़ॉल्ट)
यदि आप SchemaMode = Merge सेट करते हैं, तो स्रोत ऑब्जेक्ट से नए गुण लॉग एनालिटिक्स के वर्तमान स्कीमा में जोड़े (मर्ज) जाएंगे। DCR यह सुनिश्चित करने के लिए लॉग एनालिटिक्स तालिका से स्कीमा आयात करेगा कि वे समान हैं।

डिफ़ॉल्ट मोड Merge है, यदि आप निम्नलिखित फ़ंक्शन पर वेरिएबल SchemaMode परिभाषित नहीं करते हैं:
CheckCreateUpdate-TableDr-Structure
CreateUpdate-AzLogAnalyticsCustomLogTableDcr
CreateUpdate-AzDataCollectionRuleLogIngestCustomLog

### SchemaMode = Overwrite
यदि आप SchemaMode = Overwrite सेट करते हैं, तो DCR और तालिका में स्कीमा स्रोत ऑब्जेक्ट स्कीमा के आधार पर अधिलेखित (अपडेट) हो जाएगा।

## नेटवर्किंग
Azure में डेटा अपलोड के लिए कनेक्टिविटी के 3 विकल्प हैं:

|अपलोड विधि|कनेक्टिविटी विवरण|OS अनुपालन|
|:------------|:-------------------|:------------|
|सार्वजनिक पहुंच|REST एंडपॉइंट DCE के सार्वजनिक IP के माध्यम से DCE को भेजता है|एंडपॉइंट TLS 1.2 का समर्थन करता है|
|निजी पहुंच|REST एंडपॉइंट DCE के प्राइवेट लिंक के माध्यम से DCE को भेजता है|एंडपॉइंट TLS 1.2 का समर्थन करता है|
|लॉग-हब|REST एंडपॉइंट [लॉग-हब](https://github.com/KnudsenMorten/AzLogDcrIngestPSLogHub) के माध्यम से डेटा भेजता है - एक अवधारणा जो मैंने बनाई है।|एंडपॉइंट TLS 1.2 का समर्थन नहीं करता।<br> Azure इन उपकरणों से सीधे कनेक्टिविटी स्वीकार नहीं करेगा|

### इंटरनेट-कनेक्टेड एंडपॉइंट - OS-स्तरीय अनुपालन
![इंटरनेट-कनेक्टेड एंडपॉइंट - OS-स्तरीय अनुपालन](https://assets.kitploit.com/production/public/readmes/6097/3cc67f07297302ff59d08c95a790ec8ad417f8dbd07f566a24b154eecfecb8bb.png)

आपको अपने फ़ायरवॉल में निम्नलिखित एंडपॉइंट की अनुमति देनी होगी:

|एंडपॉइंट|उद्देश्य|पोर्ट|दिशा|HTTPS निरीक्षण को बायपास करें|
|:-------|:------|:----|:-------|:----------------------|
|global.handler.control.monitor.azure.com|एक्सेस कंट्रोल सेवा|पोर्ट 443|बाहर जाने वाला|हाँ|
|dce लॉग्स इंजेशन URI<br><br>नमूना<br>https://dce-log-platform-management-client-demo-p-iur0.westeurope-1.ingest.monitor.azure.com|लॉग डेटा इंजेस्ट करें|पोर्ट 443|बाहर जाने वाला|हाँ|

<br>

### कोई इंटरनेट एक्सेस नहीं या OS-स्तरीय गैर-अनुपालन उदाहरण के लिए TLS 1.0/1.1 चला रहा है
[इस लिंक का उपयोग करके लॉग-हब अवधारणा देखें](https://github.com/KnudsenMorten/AzLogDcrIngestPSLogHub)

![कोई इंटरनेट एक्सेस नहीं या OS-स्तरीय गैर-अनुपालन उदाहरण के लिए TLS 1.0/1.1 चला रहा है](https://assets.kitploit.com/production/public/readmes/6097/42435b25d7c2cc8d405e62d577420fa980aef5f9267f461c56ce9a08f7f81917.png)

<br>

# कार्यान्वयन
उम्मीद है कि आप अनुभव करेंगे कि सब कुछ चालू करना काफी आसान है। 3 चरण नीचे रेखांकित किए गए हैं।

शुरू करने से पहले, मैं आपसे आग्रह करता हूं कि नीचे दिए गए परिचय में घटकों के बारे में अधिक विस्तार से पढ़ें।

<details>
  <summary>ClientInspector के भाग के रूप में उपयोग किए जाने वाले Azure घटकों का परिचय</summary>

<br>

निम्नलिखित घटकों की आवश्यकता है:

| Azure संसाधन                | उद्देश्य                                           | अधिक जानकारी |
| :-------------                | :-----                                            | :-----           |
| कोई भी REST एंडपॉइंट             | यह वह स्रोत है जो डेटा भेजता है                   |                  |
| Log इंजेशन API             | यह नया API है जो पुराने HTTP डेटा कलेक्टर API को बदलता है | https://learn.microsoft.com/en-us/azure/azure-monitor/logs/logs-ingestion-api-overview |
| Data Collection Endpoint (DCE)| यह एंडपॉइंट से संचार का प्रवेश बिंदु है। डेटा **Azure Data Collection Endpoint Ingestion Uri** को भेजा जाता है। एक एकल DCE कई DCR का समर्थन कर सकता है, इसलिए आप विभिन्न स्रोतों और लक्ष्य तालिकाओं के लिए एक अलग DCR निर्दिष्ट कर सकते हैं। | https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/data-collection-endpoint-overview?tabs=portal |
| Data Collection Rules (DCR)   | डेटा संग्रह नियम एकत्रित डेटा (स्कीमा) को परिभाषित करते हैं और निर्दिष्ट करते हैं कि उस डेटा को कैसे और कहाँ भेजा या संग्रहीत किया जाना चाहिए। DCR को इनपुट डेटा की संरचना और लक्ष्य तालिका की संरचना को समझना चाहिए। यदि दोनों मेल नहीं खाते हैं, तो यह स्रोत डेटा को लक्ष्य तालिका से मेल करने के लिए रूपांतरण का उपयोग कर सकता है। आप स्रोत डेटा को फ़िल्टर करने और कोई अन्य गणना या रूपांतरण करने के लिए भी रूपांतरण का उपयोग कर सकते हैं। | https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/data-collection-rule-overview | 
| Azure LogAnaltyics Workspace  | डेटा 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
  1. क्लाइंट इन्वेंट्री को प्रतिदिन एकत्र करने के लिए ClientInspector को चलाने हेतु एक तैनाती कार्य सेटअप करें। आप अपने पसंदीदा तैनाती उपकरण का उपयोग करके ClientInspector स्क्रिप्ट चला सकते हैं। Microsoft Intune और ConfigMgr के लिए स्क्रिप्ट प्रदान की गई हैं।
Microsoft Intune का उपयोग करके कैसे तैनात करें?
आप Microsoft Intune में 'प्रोएक्टिव रेमेडिएशन' का उपयोग करके इन्वेंट्री स्क्रिप्ट चलाएंगे।
  1. डिटेक्शन स्क्रिप्ट ClientInspector_Detection.ps1 डाउनलोड करें (राइट-क्लिक करें और 'लिंक को इस रूप में सहेजें' चुनें)

  2. फ़ाइल को अपने पसंदीदा संपादक में खोलें। इन्वेंट्री कितनी बार चलानी है, इसकी आवृत्ति समायोजित करें```js ##################################

VARIABLES

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

root@kitploit:~
$RunEveryHours    = 8
$LastRun_RegPath  = "HKLM:\SOFTWARE\ClientInspector"
$LastRun_RegKey   = "ClientInSpector_System"
root@kitploit:~
3. अब हमें रेमेडिएशन जॉब बनाने की आवश्यकता है। Microsoft Intune पोर्टल -> Reports -> Endpoint Analysis --> Proactive remediations पर जाएं और नीचे दिखाए अनुसार एक स्क्रिप्ट पैकेज बनाएं

नोट: रेमेडिएशन स्क्रिप्ट के लिए **ClientInspector.ps1** फ़ाइल का उपयोग करें

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

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


### Intune सीमा

नोट: Intune में रेमेडिएशन स्क्रिप्ट के लिए आकार की सीमा 200 Kb है।**  

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


यदि आप इस सीमा तक पहुँचते हैं, तो मैं स्क्रिप्ट को 2 स्क्रिप्ट्स में विभाजित करने का सुझाव देता हूँ।

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

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

दूसरी फ़ाइल के शीर्षलेख के रूप में 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 पर चेक-फ़्लैग लिखता है  


![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>ConfigMgr (या CMD-फ़ाइल चलाने वाले किसी अन्य टूल) का उपयोग करके कैसे डिप्लॉय करें?</summary>
  
<br>
आप पारंपरिक पैकेज + डिप्लॉयमेंट द्वारा इन्वेंटरी स्क्रिप्ट चलाएंगे
    
1. [CMD-फ़ाइल ClientInspector.cmd डाउनलोड करें](https://github.com/KnudsenMorten/ClientInspectorV2/raw/main/ConfigMgr/ClientInspector.cmd) (राइट-क्लिक करें और 'save link as' चुनें)

2. अपने ConfigMgr पैकेज स्रोत निर्देशिका पर ClientInspector नामक एक स्रोत संरचना बनाएं।

3. 2 आवश्यक फ़ाइलों **ClientInspector.cmd** और **ClientInspector.ps1** को निर्देशिका में कॉपी करें

4. एक पैकेज बनाएं - और पैकेज को **ClientInspector.cmd** चलाने के लिए इंगित करें

5. एक डिप्लॉयमेंट बनाएं

</details>

<br>

# निर्भरताएँ

## PowerShell मॉड्यूल AzLogDcringestPS - मेरे द्वारा बनाया गया (Morten Knudsen)

ClientInspector को PowerShell मॉड्यूल **AzLogDcrIngestPS** की आवश्यकता है

PowerShell मॉड्यूल **AzLogDcrIngestPS** की मुख्य विशेषताओं में शामिल हैं:
* स्रोत ऑब्जेक्ट स्कीमा के आधार पर DCR और तालिकाओं को स्वचालित रूप से बनाना/अपडेट करना
* नामकरण सम्मेलन मुद्दों के लिए स्कीमा मान्य करना। यदि कोई मौजूद है, तो यह मुद्दों को कम करेगा
* यदि स्रोत ऑब्जेक्ट की संरचना बदलती है, तो DCR और तालिकाओं की स्कीमा अपडेट करें
* यदि DCR या तालिका में कुछ गलत होता है तो ऑटो-फिक्स करें
* स्रोत ऑब्जेक्ट से डेटा हटा सकता है, यदि ऐसे डेटा के कॉलम हैं जिन्हें आप भेजना नहीं चाहते हैं
* CIM या PS ऑब्जेक्ट पर आधारित स्रोत ऑब्जेक्ट को PSCustomObjects/array में बदल सकता है
* प्रत्येक रिकॉर्ड में प्रासंगिक जानकारी जोड़ सकता है जैसे 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 मॉड्यूल
मैं एक प्रसिद्ध PowerShell मॉड्यूल, PSWindowsUpdate का उपयोग करके Windows Update जानकारी प्राप्त करना पसंद करता हूं।

|ModuleName|Purpose|More info|Credit|
|:---------|:------|:--------|:-----|
|NuGet|AzLogDcrIngestPS सहित कई PowerShell मॉड्यूल को तैनात करने के लिए उपयोग किया जाने वाला सामान्य पैकेज प्रदाता<br><br>स्क्रिप्ट चलने पर पैकेज प्रदाता स्वचालित रूप से कंप्यूटर पर स्थापित हो जाएगा|[Link](https://www.nuget.org/packages)|
|PSWindowsUpdate|Windows Update जानकारी का संग्रह (लंबित अपडेट, स्थापित अपडेट, आदि)<br><br>स्क्रिप्ट चलने पर मॉड्यूल स्वचालित रूप से कंप्यूटर पर स्थापित हो जाएगा|[Link](https://www.powershellgallery.com/packages/PSWindowsUpdate)|Michal Gajda

<br>

# ClientInspector.ps1 चलाना - 3 मोड
ClientInspector आवश्यक PowerShell मॉड्यूल को स्थापित/अपडेट/आयात करने के 3 तरीकों का समर्थन करता है: **Download**, **PsGallery**, **LocalPath**

डिफ़ॉल्ट रूप से, यह PsGallery से नवीनतम संस्करण को CurrentUser स्कोप में डाउनलोड करेगा।

[वीडियो 3m 19s - कमांडलाइन (सामान्य मोड) का उपयोग करके ClientInspector चलाना](https://youtu.be/4kA4BE0zJ9g)  

## .\ClientInspector.ps1 -function:LocalPath
ClientInspector स्क्रिप्ट जिस निर्देशिका से चलेगी, वहां **AzLogDcrIngest.psm1** फ़ाइल खोजेगा।
यदि AzLogDcrIngest.psm1 गायब है, तो स्क्रिप्ट समाप्त हो जाएगी - अन्यथा यह import-module करेगी।

उदाहरण```
.\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
```
टूल डाउनलोड करें

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:~
आप इस कमांड को चलाकर स्रोत ऑब्जेक्ट को सत्यापित कर सकते हैं````
# 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

ऑफ़िस

ऑफ़िस

ऑफ़िस

विंडोज अपडेट

विंडोज अपडेट

विंडोज अपडेट

विंडोज फ़ायरवॉल

  1. स्थानीय व्यवस्थापक के रूप में PowerShell प्रारंभ करें

  2. इस कमांड का उपयोग करके स्क्रिप्ट प्रारंभ करें```js C:\ClientInspector\ClientInspector.ps1 -verbose:$true

root@kitploit:~
4. ClientInspector आपके वातावरण में वास्तविक संरचना के आधार पर 10-20 मिनट तक चलेगा और आवश्यक तालिकाएँ और डेटा संग्रह नियम बनाएगा। कृपया स्क्रीन पर परिणाम देखें और किसी भी त्रुटि (लाल) की जाँच करें।

5. जब सब कुछ ठीक दिखे, तो स्क्रिप्ट को फिर से चलाएँ और यह बहुत तेज़ी से चलेगी। विभिन्न तालिकाओं में Kusto क्वेरीज़ का उपयोग करके डेटा आने की पुष्टि करें। नोट: डेटा के पहले अपलोड में लगभग 10-15 मिनट लग सकते हैं, क्योंकि बैकएंड में पाइपलाइन बनानी होती है।

6. अंतिम परिवर्तन के रूप में, हमें पैरामीटर में 2 पैरामीटर बदलने की आवश्यकता है, ताकि ClientInspector को संदर्भ मशीन से चलने पर केवल स्कीमा परिवर्तन करने का निर्देश दिया जा सके।```js
$AzLogDcrTableCreateFromReferenceMachine    = @("<<MyReferenceMachineComputerName>>")   # sample @("ComputerName")
$AzLogDcrTableCreateFromAnyMachine          = $false    # important so changes can only happen on reference machine
  1. अब आप इसे अपने परीक्षण समूह में तैनात करने के लिए तैयार हैं।

.\ClientInspector.ps1 -function:Download

ClientInspector अपने Github रिपॉजिटरी से नवीनतम संस्करण डाउनलोड करेगा और इसे हर बार चलने पर स्थानीय पथ में संग्रहीत करेगा (लगभग 300 kb)

उदाहरण``` .\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]
यह पैरामीटर एक और पैरामीटर की आवश्यकता होती है: -scope [AllUsers | CurrentUser]

ClientInspector जाँच करेगा कि क्या मॉड्यूल चुने गए स्कोप में स्थापित है। यदि स्थापित नहीं है, तो यह स्वचालित रूप से Powershell Gallery से नवीनतम संस्करण डाउनलोड करेगा और import-module करेगा। यदि क्लाइंट नवीनतम संस्करण चला रहा है, तो यह जारी रहेगा।

उदाहरण```
.\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 !

.\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>

## ClientInspector का नमूना आउटपुट
[वीडियो 3 मिनट 19 सेकंड - कमांडलाइन (सामान्य मोड) का उपयोग करके ClientInspector चलाना](https://youtu.be/4kA4BE0zJ9g)  


<br>

# सुरक्षा
## कोड साइनिंग
**ClientInspector.ps1-फ़ाइल** और **AzLogDcrIngestPS मॉड्यूल (AzLogDcrIngest.psm1)** दोनों मेरे कोड साइनिंग प्रमाणपत्र (2LINKIT - मेरी कंपनी) से हस्ताक्षरित हैं। इस तरह आप इसे चला सकते हैं, यदि आपको स्क्रिप्ट पर हस्ताक्षरित होना आवश्यक है। बेशक आप इसे अपने स्वयं के आंतरिक कोड साइनिंग प्रमाणपत्र से हस्ताक्षरित करना भी चुन सकते हैं।

![हस्ताक्षरित](https://assets.kitploit.com/production/public/readmes/6097/95ae9fae064341feae5467ba04c909e3bab84393eb7070a304d9d9e6fd184499.png)

कृपया [सार्वजनिक कुंजी प्रमाणपत्र डाउनलोड करें](https://github.com/KnudsenMorten/ClientInspectorV2/raw/main/Trusted_Publisher_Certificate/2LINKIT-TrustedPublisher.cer) और प्रकाशक (2LINKIT - मेरी कंपनी) पर भरोसा करने के लिए इसे अपने 'trusted publisher' कंटेनर में रखें। आप इसे Intune या Group Policy का उपयोग करके तैनात कर सकते हैं।

![विश्वसनीय प्रकाशक](https://assets.kitploit.com/production/public/readmes/6097/b02285397783a3495f5d1418ed716fa450b677117dd1754875354779568b0b47.png)  
![विश्वसनीय प्रकाशक](https://assets.kitploit.com/production/public/readmes/6097/740ae59eff117b8e59d56a7274440a991b7c5ceddd486894160d0248826084b2.png)  
![विश्वसनीय प्रकाशक](https://assets.kitploit.com/production/public/readmes/6097/47d1eb6b7da9ff5a341b8486c7b4bc7532b0b8ef3d05e7b710d495e183929279.png)  


### Intune तैनाती में विश्वसनीय प्रकाशक का होना आवश्यक नहीं है
डिफ़ॉल्ट रूप से Intune सुधार स्क्रिप्ट चलाते समय BYPASS करेगा।

## संरचना
**ClientInspector** की सुरक्षा 4 परतों में विभाजित है: **डेटा-इन**, **डेटा-अपलोड** (बैकएंड पर भेजें) और **डेटा-व्यू** (डैशबोर्ड) - और **स्कीमा-प्रबंधन**

| चरण | सुरक्षा कार्यान्वयन | प्रतिनिधि / अनुमतियाँ|
|:------|:------------------------|:------------------------|
|डेटा-इन (संग्रह)| यह चरण उस विधि द्वारा नियंत्रित होता है जिसे आप वास्तविक संग्रह के लिए चुनते हैं (Intune, ConfigMg या कोई अन्य तृतीय-पक्ष) | हार्डवेयर और विंडोज़ से मुख्य डेटा एकत्र करने में सक्षम होने के लिए स्क्रिप्ट को स्थानीय व्यवस्थापक (सिस्टम संदर्भ) के रूप में चलाने की आवश्यकता है|
|डेटा-अपलोड| Logs Ingestion API के लिए प्रमाणीकरण DCE पर किया जाता है, जो मानक Azure Resource Manager प्रमाणीकरण का उपयोग करता है।<br><br>एक सामान्य रणनीति एक एप्लिकेशन ID और एप्लिकेशन कुंजी का उपयोग करना है, जो ClientInspector में उपयोग की जाने वाली विधि भी है।<br><br>Azure AppId और Secret सरलता के लिए ClientInspector के हेडर में संग्रहीत हैं<br><br>AppId और Secret को संग्रहीत करने के लिए Azure Keyvault का उपयोग करना भी संभव है| [विवरण ClientInspectV2-DeploymentKit में शामिल हैं](https://github.com/KnudsenMorten/ClientInspectorV2-DeploymentKit#security-1)|
|डेटा-व्यू|Azure RCAC अनुमतियाँ| अपने Azure LogAnalytics, Azure Workbooks और Azure Dashboards तक पहुंच प्रदान करें|
|स्कीमा-प्रबंधन| विधि 1: Azure RBAC (अनुशंसित)<br><br>विधि 2: गुप्त या प्रमाणपत्र के साथ Azure ऐप| [विवरण ClientInspectorV2-DeploymentKit में शामिल हैं](https://github.com/KnudsenMorten/ClientInspectorV2-DeploymentKit#azure-rbac-security-adjustment-separation-of-permissions-between-log-ingestion-and-tabledcr-management)|

<br>

# ClientInspector डेटा-सेट का लेआउट
प्रत्येक डेटा-सेट (बायोस, एप्लिकेशन, बिटलॉकर, आदि) समान 4-चरणीय संरचना के साथ बनाए गए हैं:

## चरण 1/4 - चर (नामकरण - डेटा कहाँ भेजें)```
#-------------------------------------------------------------------------------------------
# Variables
#-------------------------------------------------------------------------------------------
	
$TableName  = 'InvClientComputerInfoSystemV2'   # must not contain _CL
$DcrName    = "dcr-" + $AzDcrPrefixClient + "-" + $TableName + "_CL"

चरण 2/4 - डेटा संग्रहण```

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

Collecting data (in)

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

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

$DataVariable = Get-CimInstance -ClassName Win32_ComputerSystem

root@kitploit:~
## चरण 3/4 - डेटा हेरफेर (सुनिश्चित करें कि डेटा सही प्रारूप में है और कोई भी "noice" हटा दिया गया है और प्रासंगिक जानकारी जोड़ी गई है)```
#-------------------------------------------------------------------------------------------
# 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

चरण 4/4 - डेटा आउट (LogAnalytics को भेजें) - संयुक्त फ़ंक्शन```

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

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>

**टिप:  त्रुटि 513 - इकाई बहुत बड़ी है**  
डिफ़ॉल्ट रूप से, ClientInspector प्रति रिकॉर्ड के गणना किए गए औसत आकार के आधार पर डेटा को बैचों में भेजेगा। यदि आपका रिकॉर्डसेट अलग आकार का है, तो आपको त्रुटि 513 प्राप्त हो सकती है।

कारण यह है कि आप प्रत्येक अपलोड के लिए 1 mb की सीमा (Azure Pipeline सीमा) को हिट कर रहे हैं। Microsoft छोटे-छोटे डेटा के कई टुकड़े प्राप्त करना चाहता है, क्योंकि यह एक साझा वातावरण है। मैंने सभी स्थापित अनुप्रयोगों की सूची प्राप्त करते समय यह समस्या देखी है। जाहिर है, एप्लिकेशन बहुत अलग-अलग आकार की जानकारी संग्रहीत कर रहे हैं।

आप पैरामीटर **-BatchAmount <प्रति बैच भेजने के लिए रिकॉर्ड की संख्या>** को पोस्ट-कमांड में जोड़कर इस समस्या को कम कर सकते हैं। यदि आप सुनिश्चित होना चाहते हैं, तो इसे 1 पर सेट करें।```
Post-AzLogAnalyticsLogIngestCustomLogDcrDce-Output -DceName $DceName `
                                                   -DcrName $DcrName `
                                                   -Data $DataVariable `
                                                   -TableName $TableName `
                                                   -AzAppId $LogIngestAppId `
                                                   -AzAppSecret $LogIngestAppSecret `
                                                   -TenantId $TenantId `
                                                   -BatchAmount 1 `
                                                   -Verbose:$Verbose `
												   

चरण 4/4 "हुड के नीचे" - Data Out (LogAnalytics को भेजें)```

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

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:$true)```
.\ClientInspector.ps1 -verbose:$true -function:localpath

यदि आप Powershell ISE का उपयोग करके परीक्षण करना पसंद करते हैं, तो आप $Verbose वेरिएबल का उपयोग करके verbose-mode भी सक्षम कर सकते हैं।``` $Verbose = $false # can be $true or $false

root@kitploit:~
यदि आप 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

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>

# लागत - इन डेटा को संग्रहीत करने में कितना खर्च आता है?
**500** ग्राहकों से **दैनिक** ClientInspector इन्वेंट्री करने पर आपको लगभग **DKK 200 प्रति माह / USD 27 प्रति माह** का खर्च आएगा

<br>

# बग्स-खोज, कृपया मुझे सूचित करें
आज, ClientInspectorV1 का उपयोग हजारों कंप्यूटरों पर किया जाता है (और ServerInspectorV1 का उपयोग हजारों सर्वरों पर)
चूंकि ClientInspectorV2, V1 से पूर्ण पुनर्निर्माण है जो अब उदाहरण के लिए नई नामकरण परंपरा के साथ जारी किया जा रहा है, मैं आपसे वादा नहीं कर सकता कि बग नहीं मिलेंगे।
लेकिन **मैं आपसे वादा कर सकता हूं**, कि मैं उन्हें अपने खाली समय की अनुमति के अनुसार जितनी जल्दी हो सके ठीक कर दूंगा। कृपया अपनी खोजों के साथ [email protected] पर मुझे एक ईमेल भेजें।

Github साइट को फोर्क करने पर विचार करें - या डैशबोर्ड/वर्कबुक या ClientInspector स्क्रिप्ट में अपडेट पर नज़र रखें। 

इसके अलावा ClientInspector विभिन्न डिजाइनों और प्लेटफार्मों को कवर करने के लिए बनाया गया है, लेकिन आपके पास ऐसे कॉन्फ़िगरेशन हो सकते हैं जो अद्वितीय हैं और संग्रह या डैशबोर्ड द्वारा कवर नहीं किए गए हैं।
लेकिन खुला दृष्टिकोण आपको डैशबोर्ड, वर्कबुक और ClientInspector स्क्रिप्ट दोनों में बदलाव करने की अनुमति देता है, ताकि यह आपके लिए 100% काम करे। इसे Azure लॉगिंग तकनीकों के साथ और अधिक करने के लिए एक प्रदर्शन मानें - यह 24x7 समर्थन वाला भुगतान उत्पाद नहीं है। यह सभी के लिए मुफ्त है !

<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 लॉग और देखने की क्षमताओं के साथ अपने दैनिक कार्य में एक साथ काम किया है:

|Name|Role|
|:---|:---|
|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 में एकीकरण)|

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