我正在使用 Powershell 并尝试检索物理磁盘资源的大小和可用空间。
我希望此代码在一个 Windows Server 2008 R2 机器(监控服务器)上运行,并在同一域上的三个远程集群上轮询资源。其中 2 个集群也运行 Windows Server 2008 R2,但一个运行的是 Windows Server 2012 (x64)。返回的数据将作为监控应用程序的一部分插入数据库。
目前我使用的代码是:
$clusters = "cluster1.domain.local","cluster2.domain.local","cluster3.domain.local"
foreach ( $cluster in $clusters) {
$resources = Get-ClusterResource -Cluster $cluster | where-object {$_.ResourceType -match "Physical Disk"}
foreach ( $resource in $resources) {
$details = Get-ClusterResource -Cluster $cluster -Name $resource.Name | fc *
<how to get disk size & space from $details?>
}
}
“Get-ClusterResource | fc *”返回的数据不包括物理磁盘大小或可用空间,我不知道如何得出这些信息。返回的信息对所有集群资源都是通用的 - 可以在此处查看示例(示例 2)。下面的示例 3 几乎很有帮助,但不包括磁盘大小或可用空间。
我已经检查了这个问题,但答案使用了 WMI 查询,当我尝试这个时,我遇到了各种安全和兼容性问题。如果可能的话,我更愿意坚持直接使用 PowerShell,尤其是因为监控应用程序也使用纯 PowerShell 来检查 Exchange 邮箱大小和 DFS 复制积压。
请注意,我不是在尝试查询集群共享卷——它们有自己的、独立的 PowerShell 函数,我没有问题。它专门用于物理磁盘资源,我无法让它工作。
我知道物理磁盘是许多资源类型之一,因此通用 Get-ClusterResource 命令不会返回任何特定于磁盘的内容,但我希望我可以调用另一个函数,传入 Get-ClusterResource 的返回值来检索磁盘空间/可用空间
任何帮助将不胜感激,谢谢
山姆
Ansgar Wiechers 的更新
你的目标是什么?如前所述,创建一系列“数据收集器”powershell 脚本,从需要监控的多个系统收集数据,并将这些数据注入数据库,以提供警报、保留历史记录并普遍增强我们的监控能力。我们目前的监控工具套件涵盖了我们需要的 90%,但只是遗漏了一些小东西,我希望使用这种方法来纠正
为什么需要物理磁盘参数而不是 CSV 参数?因为 CSV 不是集群中唯一使用的磁盘类型。例如,我们有一个 2 个服务器、7 个实例、31 个卷的 SQL 集群。必须监视所有卷上的可用磁盘空间,原因我认为是显而易见的。此监控目前是手动完成的,缺乏历史保留
哪些物理磁盘?无论我指定哪个。一个理想的解决方案将能够监控任何正在使用(即不是“可用”)的集群磁盘资源。我不打算监控“无用”磁盘,例如我们 SQL 集群上的 DTC 卷或 Quorum 卷,但如果我选择监控这些,我没有理由不能监控
以及为什么要通过集群获取这些信息,而不是监视集群成员的物理磁盘信息 虽然可以通过 SNMP MIB 获取其中一些信息,但获取、解释和翻译这些信息要困难得多。我可以对此进行详细介绍,但这会分散问题的注意力,只要说 Powershell 是我的首选方法就足够了