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


8

我试图获取远程计算机的磁盘信息,包括是否通过使用win32_diskdrive类在驱动器上启用了SMART。

这比我想的要难。虽然很容易读取status属性,但我在Capabilities属性中发现了一些有趣的东西,即表示“ SMART Notification”是否可用的值。除非在提升的安全性上下文中运行命令,否则不会显示该值。例如,如果我运行(gwmi win32_diskdrive)。功能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)。当我用google搜索时,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检索到的对象映射到Powershell MSStorageDriver_FailurePredictStatus或通过远程会话以其他方式执行此操作?

编辑

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

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

如果没有人可以在一天左右的时间内最终确认这一点,那么我将假定该值实际上是唯一的,并将其标记为“答案”。

Answers:


5

“当您将道路分成两部分时,采取第三条道路……”〜Telaxian谚语

脚本

这是我用来从多台计算机获取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&...

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

Win32_diskdrive与MSStorageDriver_FailurePredictStatus

关于win32_diskdrivevs MSStorageDriver_FailurePredictStatus属性的问题... 在命名空间MSStorageDriver_FailurePredictStatus中是朝代的(与类存在的地方是独立的和不同的),并且继承自非类特定的属性。在得到它的数据从硬件(无供应商)直接。使用provider 的自有属性在哪里。两者都从硬件查询相同的数据,但分别进行查询。MSStorageDriverroot\wmiroot\cimv2win32_diskdrveMSStorageDriverwin32_diskdrivePNPDeviceIDWin32_DiskDrivePhysicalMedia

获取脚本上方的脚本InstanceNamePNPDeviceID下面的脚本相同:

(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


出于好奇,您是否知道InstanceName属性为何后缀“ _0”?最初我以为这是一个索引号,但是根据我的编辑,我发现情况似乎并非如此。
red888 2013年

1
硬件ID之后的那组数据Device Instance ID也称为instance-specific-ID。PnP管理器为设备树中的每个“ devnode”分配一个唯一的标识符。因为一个devnode可以有多个设备,所以它为它们建立索引,因此它们对于PnP管理器是唯一的。这就是为什么您将_X附加到的原因Device Instance ID。我将使用一些链接来编辑我的原始答案,如果您愿意的话,这些链接应该可以帮助您进一步探索。
Colyn1337

1

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

当我说连接时,我的意思是为Get-WMIObject指定-computer参数(对不起,不是别名的粉丝-我是可读性和可维护性的狂热粉丝!)。


你的权利我弄错了。该值确实与-computer参数一起出现,但我也发现它不可靠-在某些计算机的磁盘上还不存在SMART值(10),但在这些相同的计算机上,MSStorageDriver_FailurePredictStatus报告说SMART对于这些相同的驱动器处于活动状态。
red888 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.