2014-01-26 3 views
0

Я пытаюсь извлечь информацию, хранящуюся в $Win32_LogicalDisk, для системного диска, который вытягивается из переменной $Win32_OperatingSystem.SystemDrive.Pull Single Item From Array

$Temp_SystemDrive = $Win32_logicalDisk | 
    Select DeviceID, FreeSpace, Size | 
    Where-Object (($_.DeviceID) -like ($Win32_OperatingSystem.SystemDrive)); 
$Temp_SystemDrive 

ответ

3

Win32_LogicalDisk и Win32_OperatingSystem не являются переменными, они WMI-классов. Для доступа к ним необходимо использовать Get-WmiObject. Попробуйте это:

#Save OS-information early to clean up your code 
$os = (Get-WmiObject Win32_OperatingSystem) 

#Save the ORIGINAL object for disk in the case you need more info later 
$Temp_SystemDrive = Get-WmiObject Win32_LogicalDisk | Where-Object { $_.DeviceID -eq $os.SystemDrive } 

#Get the properties you need 
$Temp_SystemDrive | Select DeviceID, FreeSpace, Size 
+3

'Get-WmiObject' может сделать фильтрацию по себе : 'Get-WmiObject Win32_LogicalDisk -Filter 'DeviceID =' $ ($ os.SystemDrive) '" ' –

+0

+1. Я уже переписал достаточно своего образца :) –

1

Чтобы получить максимальную производительность, только тянуть поля, нужно, и применить фильтр на уровне запроса, а не после того, как:

$os = Get-WmiObject -Query "SELECT SystemDrive FROM Win32_OperatingSystem" 
$wmiQuery = "SELECT DeviceID, FreeSpace, Size " + 
       "FROM Win32_LogicalDisk " + 
      "WHERE DeviceID='$($os.SystemDrive)'" 
Get-WmiObject -Query $wmiQuery