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

क्या आप नियंत्रण में हैं? - या आपकी कुछ मुख्य बुनियादी ढांचा प्रक्रियाएँ जैसे पैचिंग, एंटीवायरस, बिटलॉकर सक्षमीकरण बहाव कर रही हैं? या क्या आप उन्नत इन्वेंट्री करना चाहेंगे, जहाँ आप Lenovo या Dell वारंटी के विरुद्ध अपनी वारंटी स्थिति देख सकते हैं, तो पढ़ते रहें।
क्लाइंट इंस्पेक्टर देखें, जो आपको अपने संपूर्ण क्लाइंट वातावरण में उत्कृष्ट अंतर्दृष्टि प्राप्त करने में मदद कर सकता है।
क्लाइंट इंस्पेक्टर समुदाय के लिए मुफ़्त है - इसे एक शानदार प्रदर्शन के रूप में बनाया गया है कि आप Azure Log Ingestion Pipeline, Azure Data Collection Rules, Azure LogAnalytics का उपयोग करके अपने क्लाइंट्स से डेटा वापस कैसे ला सकते हैं; उन्हें Azure Monitor & Azure Dashboards के साथ देख सकते हैं - और Microsoft Sentinel का उपयोग करके "ड्रिफ्ट-अलर्ट" प्राप्त कर सकते हैं।
क्लाइंट इंस्पेक्टर (v2) एकत्रित डेटा को Azure LogAnalytics कार्यक्षेत्र में कस्टम लॉग्स में अपलोड कर रहा है - Log ingestion API, Azure Data Collection Rules (DCR) और Azure Data Collection Endpoints (DCE) का उपयोग करके।




मेरे लिए यह कहना महत्वपूर्ण है कि मैं एक अलग प्रबंधन उपकरण बनाने की कोशिश नहीं कर रहा हूँ, जो 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 कस्टम तालिकाओं में भेज सकते हैं।
स्क्रिप्ट निम्नलिखित जानकारी (सेटिंग्स, सूचना, कॉन्फ़िगरेशन, स्थिति) एकत्र करती है:
अपनी आवश्यकताओं के अनुरूप और अच्छे डेटा-संग्रह जोड़ने के लिए स्वतंत्र महसूस करें। यदि आप समुदाय में भाग लेना चाहते हैं, तो कृपया मुझे अपने संग्रह के साथ एक ईमेल भेजें, यदि आपको लगता है कि वे पूरे समुदाय के लाभ के हो सकते हैं।
आप किसी भी स्रोत डेटा का उपयोग कर सकते हैं जिसे Powershell में प्राप्त किया जा सकता है (wmi, cim, बाहरी डेटा, rest api, xml-format, json-format, csv-format, आदि)
यह समझना बहुत महत्वपूर्ण है कि डेटा को भेजने से पहले आमतौर पर हेरफेर करने की आवश्यकता होती है - यह सुनिश्चित करने के लिए कि वे मान्य हैं और कोई अप्रासंगिक डेटा हटा दिया गया है।
ClientInspector, Powershell मॉड्यूल AzLogDcIngestPS के भीतर सभी 24 फ़ंक्शनों का उपयोग करता है, ताकि स्रोत डेटा हेरफेर को संभाल सके, डेटा में "शोर" को हटा सके, तालिकाओं/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
प्रारंभिक तैनाती के भाग के रूप में ClientInSpectorV2-DeploymentKit का उपयोग करते हुए, आपको बहुत सारे Azure डैशबोर्ड और Azure वर्कबुक तक पहुंच प्राप्त होगी।
डैशबोर्ड का विचार यह है कि वे दिखाएंगे कि आपका बुनियादी ढाँचा 'वांछित स्थिति' से कहाँ भटक रहा है। उन्हें KPI के रूप में सोचें, जहाँ बुनियादी ढाँचा नियंत्रण में नहीं है।
पैचिंग और एंटीवायरस प्रबंधन के कार्य के बजाय, आप KPI रखने पर विचार कर सकते हैं, जो दिखाएंगे कि कंप्यूटर पैच नहीं किए गए हैं - या जहाँ एंटीवायरस में रीयलटाइम सुरक्षा चल नहीं रही है - या वे मशीनें जिन्होंने पिछले 24 घंटों में ब्लूस्क्रीन किया है।
यह Microsoft Secure Score के समान अवधारणा है।















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

प्रदान किए गए Azure डैशबोर्ड देखने का लिंक
यदि आप और अधिक डैशबोर्ड या वर्कबुक जोड़ना चाहते हैं, तो आप सामान्यतः KQL क्वेरीज़ का उपयोग करके कस्टम लॉग तालिकाओं में एकत्रित डेटा की जांच करके शुरू करेंगे। जब आपको वांछित क्वेरी मिल जाए, तो आप वर्कबुक में नए दृश्य बना सकते हैं - और अपने पसंदीदा को अपने डैशबोर्ड पर पिन कर सकते हैं।
यदि आप Kusto भाषा नहीं जानते हैं, तो मैं अनुशंसा करता हूँ कि आप इसके साथ खेलना शुरू करें, क्योंकि यह वास्तव में एक शक्तिशाली भाषा है।
वीडियो 1m 58s - Kusto क्वेरीज़ विरुद्ध डेटा
वीडियो 3m 01s - डैशबोर्ड
Kusto क्वेरी भाषा के साथ अपनी पहली क्वेरी लिखें
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 में डेटा होता है, तो हम अन्य स्रोतों के साथ डेटा को एकीकृत करना शुरू कर सकते हैं, जैसे 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)** का उपयोग करके।

## स्कीमा
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-स्तरीय अनुपालन

आपको अपने फ़ायरवॉल में निम्नलिखित एंडपॉइंट की अनुमति देनी होगी:
|एंडपॉइंट|उद्देश्य|पोर्ट|दिशा|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)

<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
डिटेक्शन स्क्रिप्ट ClientInspector_Detection.ps1 डाउनलोड करें (राइट-क्लिक करें और 'लिंक को इस रूप में सहेजें' चुनें)
फ़ाइल को अपने पसंदीदा संपादक में खोलें। इन्वेंट्री कितनी बार चलानी है, इसकी आवृत्ति समायोजित करें```js ##################################
##################################
$RunEveryHours = 8
$LastRun_RegPath = "HKLM:\SOFTWARE\ClientInspector"
$LastRun_RegKey = "ClientInSpector_System"
3. अब हमें रेमेडिएशन जॉब बनाने की आवश्यकता है। Microsoft Intune पोर्टल -> Reports -> Endpoint Analysis --> Proactive remediations पर जाएं और नीचे दिखाए अनुसार एक स्क्रिप्ट पैकेज बनाएं
नोट: रेमेडिएशन स्क्रिप्ट के लिए **ClientInspector.ps1** फ़ाइल का उपयोग करें


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

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


दूसरी फ़ाइल के शीर्षलेख के रूप में 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) (राइट-क्लिक करें और '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
$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 मिनट तक चलेगा और आवश्यक तालिकाएँ और डेटा संग्रह नियम बनाएगा। कृपया स्क्रीन पर परिणाम देखें और किसी भी त्रुटि (लाल) की जाँच करें।
5. जब सब कुछ ठीक दिखे, तो स्क्रिप्ट को फिर से चलाएँ और यह बहुत तेज़ी से चलेगी। विभिन्न तालिकाओं में Kusto क्वेरीज़ का उपयोग करके डेटा आने की पुष्टि करें। नोट: डेटा के पहले अपलोड में लगभग 10-15 मिनट लग सकते हैं, क्योंकि बैकएंड में पाइपलाइन बनानी होती है।
6. अंतिम परिवर्तन के रूप में, हमें पैरामीटर में 2 पैरामीटर बदलने की आवश्यकता है, ताकि ClientInspector को संदर्भ मशीन से चलने पर केवल स्कीमा परिवर्तन करने का निर्देश दिया जा सके।```js
$AzLogDcrTableCreateFromReferenceMachine = @("<<MyReferenceMachineComputerName>>") # sample @("ComputerName")
$AzLogDcrTableCreateFromAnyMachine = $false # important so changes can only happen on reference machine
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
## .\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
</details>
<br>
## ClientInspector का नमूना आउटपुट
[वीडियो 3 मिनट 19 सेकंड - कमांडलाइन (सामान्य मोड) का उपयोग करके ClientInspector चलाना](https://youtu.be/4kA4BE0zJ9g)
<br>
# सुरक्षा
## कोड साइनिंग
**ClientInspector.ps1-फ़ाइल** और **AzLogDcrIngestPS मॉड्यूल (AzLogDcrIngest.psm1)** दोनों मेरे कोड साइनिंग प्रमाणपत्र (2LINKIT - मेरी कंपनी) से हस्ताक्षरित हैं। इस तरह आप इसे चला सकते हैं, यदि आपको स्क्रिप्ट पर हस्ताक्षरित होना आवश्यक है। बेशक आप इसे अपने स्वयं के आंतरिक कोड साइनिंग प्रमाणपत्र से हस्ताक्षरित करना भी चुन सकते हैं।

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



### 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"
#-------------------------------------------------------------------------------------------
#-------------------------------------------------------------------------------------------
Write-Output "" Write-Output "Collecting Computer system information ... Please Wait !"
$DataVariable = Get-CimInstance -ClassName Win32_ComputerSystem
## चरण 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
#-------------------------------------------------------------------------------------------
#-------------------------------------------------------------------------------------------
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 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 `
#-----------------------------------------------------------------------------------------------
#-----------------------------------------------------------------------------------------------
$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:$true)```
.\ClientInspector.ps1 -verbose:$true -function:localpath
यदि आप Powershell ISE का उपयोग करके परीक्षण करना पसंद करते हैं, तो आप $Verbose वेरिएबल का उपयोग करके verbose-mode भी सक्षम कर सकते हैं।``` $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 इन्वेंट्री करने पर आपको लगभग **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 में एकीकरण)|
