Where-Object和字符串解释

时间:2017-03-10 11:24:45

标签: powershell

使用Where-Object,为什么这样做..

Get-CimInstance -ClassName Win32_MountPoint | Where-Object {$_.Directory -like 'Win32_Directory (Name = "C:\")'}

但这不是:

Get-CimInstance -ClassName Win32_MountPoint | Where-Object {$_.Directory -eq 'Win32_Directory (Name = "C:\")'}

我假设-eq运算符需要额外的引号,或者语音标记可能存在问题。

由于

1 个答案:

答案 0 :(得分:2)

它不起作用,因为Directory属性包含嵌套对象,而不是字符串。因此,相等运算符将Win32_Directory对象与字符串进行比较,并正确地发现它们不相等。

您需要将Directory属性转换为实际字符串,例如像这样:

... | Where-Object { "$($_.Directory)" -eq 'Win32_Directory (Name = "C:\")' }

或者像这样:

... | Where-Object { $_.Directory.ToString() -eq 'Win32_Directory (Name = "C:\")' }

或(更好)检查嵌套对象的相关属性,例如像这样:

... | Where-Object { $_.Directory.Name -eq 'C:\' }