powershell: Como verificar se o SMART está ativado em máquinas remotas

8

Eu estava tentando obter informações sobre o disco de máquinas remotas, incluindo se o SMART está ou não ativado na unidade usando a classe win32_diskdrive.

Isso é mais complicado do que eu pensava. Embora seja fácil ler a propriedade status, descobri algo interessante na propriedade Capabilities, ou seja, o valor que indica se "SMART Notification" está disponível. Este valor não aparecerá a menos que o comando seja executado em um contexto de segurança elevado. Portanto, por exemplo, se eu executar (gwmi win32_diskdrive) .Capabilities the SMART value (10) ainda não aparece na matriz de valores, mas se eu executá-lo em um prompt elevado, ele aparecerá. Até onde eu sei, você não pode executar uma sessão winrm em um contexto elevado (e não estou interessado em hacks bregas ou psexec).

Então, tentei mapear win32_diskdrive para a classe MSStorageDriver_FailurePredictStatus. Eu acho que precisaria fazer isso de qualquer maneira, porque, mesmo que o SMART apareça na propriedade Capabilities, isso não significa necessariamente que está ativado, certo?

Eu estava mapeando a propriedade PNPDeviceID do win32_diskdrive para a propriedade InstanceName do MSStorageDriver_FailurePredictStatus, mas agora o meu problema é que não acho que a propriedade InstanceName seja exclusiva o suficiente para que isso funcione. Por exemplo, aqui está o meu InstanceName:IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0

Ele mostra o tipo de interface (IDE), o número do modelo (ST3250312AS), a versão do firmware (JC47), o que eu pensei ser um identificador exclusivo de algum tipo ( 5&350bf0c3&0&0.0.0) e, em seguida, o que parece um número de índice (_0). Quando pesquiso no Google 5&350bf0c3&0&0.0.0, algumas informações são exibidas na unidade, então não acho que esse número seja único. Isso significa que a exclusividade está no número do índice que não está incluído na propriedade PNPDeviceID da classe win32_diskdrive. Esse é um problema, porque muitos de nossos servidores possuem vários discos idênticos.

Minha preocupação é que MSStorageDriver_FailurePredictStatusrepresentaria vários discos como este:

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

E a propriedade PNPDeviceID de win32_diskdrive de todos eles seria apenas IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0

Como posso mapear com segurança objetos recuperados do win32_diskdrive para MSStorageDriver_FailurePredictStatusou fazer isso de outra maneira com o powershell por meio de sessões remotas?

Editar :

Bem, parece que eu estava reagindo demais. Quando verifiquei vários servidores, encontrei InstanceNames \ PNPDeviceIDs como este:

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

Se ninguém puder confirmar isso conclusivamente, em um dia ou mais, assumirei que esse valor é realmente único e marque-o como a "resposta".

red888
fonte

Respostas:

5

"Quando a estrada antes de você se dividir em dois, siga um terceiro caminho ..." ~ Provérbio Telaxian

Roteiro

Este é o script que eu usei para obter os dados SMART de várias máquinas. Eu já habilitei winrmos dispositivos usados ​​neste exemplo.

$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) 

Isso fará com que você produza como:

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

Notas do script: No arquivo de texto, tenho um nome de host listado por linha. Não há vírgula separando os dados. Além disso, os computadores que não possuem unidades ativadas inteligentes não serão exibidos no relatório. Você pode personalizar o relatório com mais opções de dados para selecionar, basta executar um em Select *vez das opções que usei no script para ver o despejo completo.

Win32_diskdrive vs MSStorageDriver_FailurePredictStatus

Na questão de win32_diskdrivevs MSStorageDriver_FailurePredictStatuspropriedades ... O MSStorageDriver_FailurePredictStatusestá na dinastia de MSStorageDriverno root\wmiespaço para nome (que é separado e distinto de root\cimv2onde a classe win32_diskdrveexiste) e get's são propriedades não específicas da classe da herança. A MSStorageDriverrecebe-lo de dados direto do hardware (sem operador). Onde, como win32_diskdrivetem sua própria PNPDeviceIDpropriedade, que usa o provedor Win32_DiskDrivePhysicalMedia. Ambos consultam os mesmos dados do hardware, mas o fazem separadamente.

O script acima, de onde ele recebe, InstanceNameé o mesmo que PNPDeviceIDabaixo:

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

Conclusão

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

Obtenha os mesmos dados que:

(gwmi -Class Win32_DiskDrive).PNPDeviceID

Referências de comentários

Esta seção contém links destinados a referenciar informações adicionais da seção de comentários desta resposta.

Árvore de dispositivos

IDs da instância

Colyn1337
fonte
Por curiosidade, você tem alguma idéia de por que "_0" está com o sufixo na propriedade InstanceName? Inicialmente, pensei que fosse um número de índice, mas, de acordo com minha edição, achei que esse não parece ser o caso.
red888
1
Esse conjunto de dados após o ID do hardware Device Instance IDtambém é conhecido como ID específico da instância . O gerenciador de PnP atribui um identificador exclusivo para cada "devnode" na árvore de dispositivos. Como um devnode pode ter vários dispositivos, ele os indexa para que sejam exclusivos do gerenciador de PnP. É por isso que você recebe um _X anexado ao Device Instance ID. Editarei minha resposta original com alguns links que devem ajudá-lo a explorar mais esse assunto, se você optar por fazê-lo.
Colyn1337
1

Se você se conectar ao namespace WMI remoto usando uma conta de domínio que seja membro do grupo de administradores locais do computador remoto, a filtragem de token do UAC não entrará em vigor.

Quando digo conectar, quero dizer especificando o parâmetro -computer para Get-WMIObject (desculpe, não sou um fã de aliases - sou um grande fã de legibilidade e manutenção!).

Simon Catlin
fonte
Você está certo, eu estava enganado. O valor aparece com o parâmetro -computer, mas também achei não confiável - o valor SMART (10) ainda não está presente nos discos de algumas máquinas, nessas mesmas máquinas. MSStorageDriver_FailurePredictStatus reporta que o SMART está ativo nessas mesmas unidades.
red888