在powershell中的“in”条件

时间:2013-01-31 03:51:20

标签: powershell powershell-v2.0

是否有" in" Powershell中的条件类似于sql。如果可用,请告诉我如何使用它的语法。    我的senario是我需要获取id列表并在另一个查询中使用它。

在下面寻找

//Below line i veried returns values more than 1
$desktopGroupIds = Get-BrokerDesktopGroup -AdminAddress 'IPAddressgoeshere' |  select uid

Get-BrokerPrivateDesktop  -AdminAddress 'IPAddressgoeshere' | Where { $desktopGroupIds.contains($_.DesktopGroupUid) } | select DesktopGroupUid

第二个查询不返回值。我确信如果我逐个传递值,第二个查询可以给出结果。我想用的可能是' -in'操作员如果可用或使上述内容包含工作。

谢谢,

3 个答案:

答案 0 :(得分:4)

-in是一个反向-contains运算符,已在PowerShell 3.0中添加(因此dasari ..必须更新才能使用它)。使用包含时使用$array -contains -element,而在PS3.0中则可以使用$element -in $array

您似乎在$desktopGroupIdS -c contains $_ .....中有拼写错误。试试这个:

//Below line i veried returns values more than 1
$desktopGroupIds = @(Get-BrokerDesktopGroup -AdminAddress 'IPAddressgoeshere' |  select uid)

Get-BrokerPrivateDesktop  -AdminAddress 'IPAddressgoeshere' | Where { $desktopGroupIds -contains $_.DesktopGroupUid } | select DesktopGroupUid

答案 1 :(得分:1)

Powershell的“in”关键字通常用于在集合对象中单独选择项目。

e.g:

foreach($item in $collection)
{
    #...Process some code...
}

如果您想在解决方案中使用“Contains”,可以将第一行放在@()中,将$ desktopGroupIds中的所有内容转换为数组:

e.g。

//Below line i veried returns values more than 1
$desktopGroupIds = @(Get-BrokerDesktopGroup -AdminAddress 'IPAddressgoeshere' |  select uid)
Get-BrokerPrivateDesktop  -AdminAddress 'IPAddressgoeshere' | Where { $desktopGroupIds.Contains($_.DesktopGroupUid) } | select DesktopGroupUid

修改

您可能尝试的另一种解决方案是使用-match运算符:

e.g:

$desktopGroupIds = @(Get-BrokerDesktopGroup -AdminAddress 'IPAddressgoeshere' |  select uid)
Get-BrokerPrivateDesktop  -AdminAddress 'IPAddressgoeshere' | Where { $desktopGroupIds -match $_.DesktopGroupUid } | select DesktopGroupUid

答案 2 :(得分:0)

解决问题的更新代码行如下所示

Get-BrokerPrivateDesktop  -AdminAddress $regionAddress | Where { $desktopGroupIds  -Contains $_.DesktopGroupUid } | select DesktopGroupUid

请注意上面“-Contains”

的用法