powershell:如何检查远程机器上是否启用了 SMART

powershell:如何检查远程机器上是否启用了 SMART

我尝试使用 win32_diskdrive 类来获取远程机器的磁盘信息,包括驱动器上是否启用了 SMART。

这比我想象的要棘手。虽然读取 status 属性很容易,但我在 Capabilities 属性中发现了一些有趣的东西 - 即表示“SMART 通知”是否可用的值。除非在提升的安全上下文中运行该命令,否则不会出现此值。因此,例如,如果我运行 (gwmi win32_diskdrive).Capabilities,则 SMART 值 (10) 不会出现在值数组中,但如果我在提升的提示符下运行它,它就会出现。据我所知,您无法在提升的上下文中运行 winrm 会话(而且我对低俗的 schtasks 黑客或 psexec 不感兴趣)。

因此,我尝试将 win32_diskdrive 映射到 MSStorageDriver_FailurePredictStatus 类。我认为无论如何我都必须这样做,因为即使 SMART 出现在 Capabilities 属性中,也不一定意味着它已启用,对吗?

我将 win32_diskdrive 的 PNPDeviceID 属性映射到 MSStorageDriver_FailurePredictStatus 的 InstanceName 属性,但现在我的问题是,我认为 InstanceName 属性不够唯一,无法实现此功能。例如,这是我的 InstanceName:IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0

它显示了接口类型 (IDE)、型号 (ST3250312AS)、固件版本 (JC47),我认为是某种唯一标识符 ( 5&350bf0c3&0&0.0.0),然后看起来像索引号 (_0)。当我用谷歌搜索时,5&350bf0c3&0&0.0.0它会显示有关驱动器的一些信息,所以我认为这个数字不是唯一的。这意味着唯一性在于索引号,它不包含在 win32_diskdrive 类的 PNPDeviceID 属性中。这是一个问题,因为我们的许多服务器都有多个相同的磁盘。

我担心的是,这MSStorageDriver_FailurePredictStatus会代表多个磁盘,如下所示:

IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0
IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_1
IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_2

所有这些 win32_diskdrive 的 PNPDeviceID 属性都将是 IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0

我如何才能可靠地映射从 win32_diskdrive 检索到的对象,MSStorageDriver_FailurePredictStatus或者通过远程会话使用 powershell 以另一种方式执行此操作?

编辑

好吧,看来我反应过度了。当我检查一堆服务器时,我发现 InstanceNames\PNPDeviceIDs 是这样的:

SCSI\Disk&Ven_TOSHIBA&Prod_MBF2600RC\5&354ecb35&0&000200_0
SCSI\Disk&Ven_TOSHIBA&Prod_MBF2600RC\5&354ecb35&0&000300_0

如果没有人能够确切地证实这一点,那么在一两天内,我就会假设这个值实际上是唯一的,并将其标记为“答案”。

答案1

“当你面前的路一分为二时,选择第三条路...”〜特拉克西亚谚语

脚本

这是我用来从多台机器获取 SMART 数据的脚本。我已经winrm在本例中使用的设备上启用了该脚本。

$aComputers = Get-Content C:\ComputerSMARTDriveTest.txt

 (Get-WmiObject -ComputerName $aComputers -namespace root\wmi –class MSStorageDriver_FailurePredictStatus -ErrorAction Silentlycontinue |  
    more |
    Select PSComputerName,PredictFailure,Reason,InstanceName |
    Format-Table –Autosize) 

这将获得如下输出:

PSComputerName PredictFailure Reason InstanceName                                                            
-------------- -------------- ------ ------------                                                            
4CZ1*****              False      0 IDE\DiskHitachi_HTS723225A7A364_________________ECBOA60W\4&35e86db3&0...
2UA0*****              False      0 IDE\DiskST3160318AS_____________________________HP35____\5&5df8cfa&0&...

脚本说明: 在文本文件中,我每行列出一个主机名。数据之间没有逗号分隔。此外,没有启用智能驱动器的计算机不会显示在报告中。您可以使用更多数据选项自定义报告以供选择,只需运行而Select *不是我在脚本中使用的选项即可查看完整转储。

Win32_diskdrive 与 MSStorageDriver_FailurePredictStatus

win32_diskdrive关于vsMSStorageDriver_FailurePredictStatus属性的问题... 位于命名空间中MSStorageDriver_FailurePredictStatus的朝代(与类所在的位置分开且不同),并从继承中获取非类特定的属性。直接从硬件获取数据(无提供程序)。 而 as有自己的属性,它使用提供程序。 两者都从硬件查询相同的数据,但分别进行。MSStorageDriverroot\wmiroot\cimv2win32_diskdrveMSStorageDriverwin32_diskdrivePNPDeviceIDWin32_DiskDrivePhysicalMedia

上面的脚本获取的内容InstanceName与下面的相同PNPDeviceID

(Get-WmiObject -ComputerName $aComputers -Namespace root\cimv2 -Class win32_diskdrive `
    -ErrorAction Continue |
    more |
    select PNPDeviceID |
    Format-Table -AutoSize)

结论

(gwmi -Namespace root\wmi -Class MSStorageDriver_FailurePredictStatus).InstanceName

获取与以下相同的数据:

(gwmi -Class Win32_DiskDrive).PNPDeviceID

评论参考

本节包含用于引用此答案的评论部分的附加信息的链接。

设备树

实例 ID

答案2

如果使用属于远程计算机本地管理员组的域帐户连接到远程 WMI 命名空间,则 UAC 令牌筛选不应该生效。

当我说连接时,我的意思是通过指定-电脑参数获取 WMIObject(抱歉,我不喜欢别名 - 我更喜欢可读性和可维护性!)。

相关内容