首页 > 解决方案 > Powershell - 可变数量的驱动器

问题描述

所以,我要把这个扔掉。我正在尝试为一堆系统编写一个简单的健康检查。我知道有些产品可以做到这一点,诸如此类。这是一种特殊的孤立情况,除非软件事先获得批准,否则我什至不能考虑免费软件选项。我拼凑了以下内容:

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'

它绝不是完美的,也不是干净的。我是SA。不是开发商。它通过调整其他 ppls 代码拼凑在一起。我的问题是,有没有一种好方法,而不是在代码中明确说明驱动器,我可以设置一个变量,它会适应驱动器的数量并给我它们的使用百分比?这些是具有不同数量驱动器的服务器。任何人都可以提供建议或指出正确的方向吗?

提前感谢您的帮助!

标签: powershell

解决方案


所以让我们谈谈POWERSHELL。

在 Powershell 中,我们喜欢使用Pipe |。这意味着将命令连接在一起以获取我们想要的数据。一旦命令完成,它将通过管道 |将响应传递给下一个命令。使用了一个 Magic 变量来表示传递的响应,即$_.

在这种情况下,您似乎想要构建一种传感器。

所以让我们解决这个问题

有一个命令叫做Get-PSDrive它基本上可以让你与操作系统环境进行交互。

如果你跑步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:\ 

我们要找的是 Provider 而我们想要的Provider是FileSystem

所以让管道

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

推荐阅读