Ввод / вывод конвейера

Я хочу перечислить файлы диска C :. Прежде всего, я хочу получить идентификатор устройства из объекта wmi логического диска и перечислить его.

Следующая команда возвращает:

Get-WmiObject -class Win32_logicaldisk


DeviceID     : C:  
DriveType    : 3  
ProviderName :  
FreeSpace    : 940371968  
Size         : 125809192960  
VolumeName   :  

Но эта команда:

Get-WmiObject -class Win32_logicaldisk | select deviceid | Get-ChildItem -path {$_}

дает ошибку ниже:

Get-ChildItem: не удается найти диск. Диск с именем "@ {deviceid = C" не существует. В строке: 1 символ: 60
+ Get-WmiObject -class Win32_logicaldisk | выберите deviceid | Get-ChildItem -path {...
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: ObjectNotFound: (@ {deviceid = C: String ) [Get-ChildItem], DriveNotFoundException
+ FullyQualifiedErrorId: DriveNotFound, Microsoft.PowerShell.Commands.GetChildItemCommand

Get-ChildItem -path принимает ввод конвейера, как мы можем решить эту проблему?


person Half Diminished    schedule 04.04.2016    source источник


Ответы (2)


Ваш Select возвращает объект со свойством с именем DeviceID.

Используйте -ExpandProperty, чтобы получить значение свойства, затем передайте его по конвейеру:

Get-WmiObject -class Win32_logicaldisk | select -expandproperty deviceid | Get-ChildItem -path {$_}
person xXhRQ8sD2L7Z    schedule 04.04.2016

Вы также можете просто выбрать свойство в возвращаемом объекте. В этом случае $_.DeviceID

Get-WmiObject -class Win32_logicaldisk | select deviceid | Get-ChildItem -path {$_.DeviceID}
person David    schedule 05.04.2016