red*_*888 8 powershell smart wmi winrm
我试图获取远程机器的磁盘信息,包括是否使用 win32_diskdrive 类在驱动器上启用了 SMART。
这比我想象的要棘手。虽然读取 status 属性很容易,但我在 Capabilities 属性中发现了一些有趣的东西——即表示“智能通知”是否可用的值。除非该命令在提升的安全上下文中运行,否则不会出现此值。因此,例如,如果我运行 (gwmi win32_diskdrive).Capabilities SMART 值 (10) 尚未出现在值数组中,如果我在提升的提示中运行它,它确实会出现。据我所知,您无法在提升的上下文中运行 winrm 会话(而且我对俗气的 schtasks hacks 或 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
Run Code Online (Sandbox Code Playgroud)
而所有这些的 win32_diskdrive 的 PNPDeviceID 属性就是
IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0
如何MSStorageDriver_FailurePredictStatus通过远程会话可靠地将从 win32_diskdrive 检索到的对象映射到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
Run Code Online (Sandbox Code Playgroud)
如果没有人能够在一天左右的时间内最终确认这一点,我将假设该值实际上是唯一的并将其标记为“答案”。
“当你之前的路一分为二时,走第三条路……”~特拉仙谚语
脚本
这是我用来从多台机器获取 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)
Run Code Online (Sandbox Code Playgroud)
这会让你输出如下:
PSComputerName PredictFailure Reason InstanceName
-------------- -------------- ------ ------------
4CZ1***** False 0 IDE\DiskHitachi_HTS723225A7A364_________________ECBOA60W\4&35e86db3&0...
2UA0***** False 0 IDE\DiskST3160318AS_____________________________HP35____\5&5df8cfa&0&...
Run Code Online (Sandbox Code Playgroud)
脚本注释:
在文本文件中,我每行列出一个主机名。没有逗号分隔数据。此外,报告中不会显示没有启用智能驱动器的计算机。您可以使用更多数据选项自定义报告以供选择,只需运行 aSelect *而不是我在脚本中使用的选项即可查看完整转储。
Win32_diskdrive 与 MSStorageDriver_FailurePredictStatus
关于win32_diskdrivevsMSStorageDriver_FailurePredictStatus属性的问题......在命名空间MSStorageDriver_FailurePredictStatus中的王朝(它是独立的并且与类存在的地方不同)并且从继承中获取它是非类特定的属性。在得到它的数据从硬件(无供应商)直接。哪里有它自己的财产,它使用 provider 。两者都从硬件查询相同的数据,但分别进行。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)
Run Code Online (Sandbox Code Playgroud)
结论
(gwmi -Namespace root\wmi -Class MSStorageDriver_FailurePredictStatus).InstanceName
Run Code Online (Sandbox Code Playgroud)
获取与以下相同的数据:
(gwmi -Class Win32_DiskDrive).PNPDeviceID
Run Code Online (Sandbox Code Playgroud)
评论参考
本部分包含旨在引用此答案评论部分中的其他信息的链接。
| 归档时间: |
|
| 查看次数: |
6098 次 |
| 最近记录: |