इसलिए, मैं इसे बाहर फेंकने जा रहा हूं। मैं सिस्टम के एक समूह के लिए एक साधारण स्वास्थ्य जांच लिखने की कोशिश कर रहा हूँ। मुझे पता है कि ऐसे उत्पाद हैं जो इसे करते हैं और क्या नहीं। यह एक विशेष पृथक परिस्थिति है जहां जब तक सॉफ़्टवेयर की पूर्व स्वीकृति नहीं होती है, मैं फ्रीवेयर विकल्पों पर भी विचार नहीं कर सकता। मैंने निम्नलिखित को एक साथ जोड़ दिया है:

Clear-Host
$date = Get-Date -Format "yyyy-MM-dd"
$cpuTime = (Get-Counter '\Processor(_Total)\% Processor Time').CounterSamples.CookedValue
$availMem = (Get-Counter '\Memory\Available MBytes').CounterSamples.CookedValue / 1024
$totalRam =  (Get-WmiObject Win32_ComputerSystem).totalphysicalmemory / (1024 * 1024 * 1024)
$DiskUsageC = (Get-Counter '\LogicalDisk(C:)\% Free Space').CounterSamples.CookedValue


$env:computername + "`t`t" + $date + "`t`t CPU Usage: " + $cpuTime.ToString("#,0.0") + "%" + "`t`t Memory Usage: " + ($availMem / $totalRam *100).ToString("#,0.0") + '%' + "`t`t Hard Disk Usage: " + "   (C:) " + $DiskUsageC.ToString("#,0.0") + "%" | Out-GridView -Title 'System Health Check'

यह किसी भी तरह से सही या साफ नहीं है। मैं एक एसए हूं। डेवलपर नहीं। अन्य पीपीएल कोड को ट्विक करके इसे एक साथ जोड़ दिया गया है। मेरा सवाल है, क्या कोड में ड्राइव को स्पष्ट रूप से बताने के बजाय एक अच्छा तरीका है, मैं एक चर सेट कर सकता हूं और यह ड्राइव की मात्रा के अनुकूल है और मुझे उनका उपयोग प्रतिशत देता है? ये विभिन्न संख्या में ड्राइव वाले सर्वर हैं। क्या कोई सुझाव दे सकता है या मुझे सही दिशा में इंगित कर सकता है?

किसी भी सहायता के लिए अग्रिम धन्यवाद!

0
LordShaithis 27 अक्टूबर 2020, 17:47

2 जवाब

सबसे बढ़िया उत्तर

आप अपने वर्तमान प्रारूप के साथ रह सकते हैं और तार्किक ड्राइव/वॉल्यूम के माध्यम से बस पुनरावृति कर सकते हैं:

$date = Get-Date -Format "yyyy-MM-dd"
$cpuTime = (Get-Counter '\Processor(_Total)\% Processor Time').CounterSamples.CookedValue
$availMem = (Get-Counter '\Memory\Available MBytes').CounterSamples.CookedValue / 1024
$totalRam =  (Get-CimInstance Win32_ComputerSystem).totalphysicalmemory / (1024 * 1024 * 1024)

# List volumes if they have drive letters and are fixed (you can change this filter)
$drives = Get-Volume | Where {$_.DriveLetter -and $_.DriveType -eq 'Fixed'}
# Loop through each volume to create your formatted string
# $driveData is an array of those formatted strings.
$driveData = $drives | Foreach-Object {
     $letter = $_.DriveLetter
     "({0}:) {1}%" -f $letter,(Get-Counter "\LogicalDisk($($letter):)\% Free Space").CounterSamples.CookedValue.ToString('#,0.0')
}

$env:computername + "`t`t" + $date + "`t`t CPU Usage: " + $cpuTime.ToString("#,0.0") + "%" + "`t`t Memory Usage: " + ($availMem / $totalRam *100).ToString("#,0.0") + '%' + "`t`t Hard Disk Usage: $($driveData -join ', ')" |
    Out-GridView -Title 'System Health Check'

स्पष्टीकरण:

वांछित परिणाम प्राप्त करने के लिए यहां कुछ उल्लेखनीय तकनीकों का उपयोग किया गया है। $() सब-एक्सप्रेशन ऑपरेटर है, जो एक स्ट्रिंग (डबल कोट्स के अंदर कोड) के भीतर एक एक्सप्रेशन का मूल्यांकन करने की अनुमति देता है। उदाहरण के लिए, "$($letter):" $letter को इसके मान से प्रतिस्थापित करने की अनुमति देता है और फिर उस मान में एक : जोड़ दिया जाता है।

$($driveData -join ', ') दोहरे उद्धरण चिह्नों के भीतर भी होता है (एक विस्तार योग्य स्ट्रिंग के अंदर)। यह सरणी के तत्वों $driveData को एक स्ट्रिंग में शामिल होने की अनुमति देता है। फिर उन तत्वों में से प्रत्येक को , (अल्पविराम और स्थान) द्वारा अलग किया जाता है।

0
AdminOfThings 27 अक्टूबर 2020, 18:42

तो चलिए बात करते हैं पॉवरशेल की।

Powershell में हम पाइप | से प्यार करते हैं। इसका मतलब है कि हम जो डेटा चाहते हैं उसे प्राप्त करने के लिए कमांड को एक साथ जोड़ना। एक बार एक कमांड हो जाने के बाद यह अगले कमांड की प्रतिक्रिया को पाइप | देगा। एक जादू चर का उपयोग किया जाता है जो उस पारित प्रतिक्रिया का प्रतिनिधित्व करता है जो $_ है।

इस मामले में ऐसा लगता है कि आप एक प्रकार का सेंसर बनाना चाहते हैं।

तो चलिए इस मुद्दे को हल करते हैं

Get-PSDrive नामक एक कमांड है जो मूल रूप से आपको OS वातावरण के साथ बातचीत करने की अनुमति देता है।

अगर आप Get-PSDrive चलाते हैं तो आपको इस तरह की चीजें मिलेंगी

Name           Used (GB)     Free (GB) Provider      Root                                                                                                                                                         CurrentLocation
----           ---------     --------- --------      ----                                                                                                                                                         ---------------
Alias                                  Alias                                                                                                                                                                                     
C                 101.05        314.08 FileSystem    C:\                                                                                                 Users\Andrew Davis\Documents\Scripts\Powershell\Autoload\ActiveDirectory
Cert                                   Certificate   \                                                                                                                                                                           
D                  79.95        576.85 FileSystem    D:\ 

हम जिस चीज की तलाश कर रहे हैं वह प्रदाता है और जो प्रदाता हम चाहते हैं वह है फाइलसिस्टम

तो चलो पाइप

Get-PSDrive -PSProvider 'FileSystem' | Foreach-Object{
    "Drive: $($_.Name), Free Space : $([math]::Round($_.Free / 1GB, 1)) GB"  
}

कुछ ऐसा लौटाएगा

Drive: C, Free Space : 314.1 GB
Drive: D, Free Space : 576.8 GB
Drive: E, Free Space : 0.8 GB
Drive: F, Free Space : 6.2 GB
Drive: G, Free Space : 73.3 GB
Drive: H, Free Space : 29 GB
Drive: I, Free Space : 6.6 GB
Drive: J, Free Space : 24 GB
1
ArcSet 27 अक्टूबर 2020, 18:18