是否有" 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'操作员如果可用或使上述内容包含工作。
谢谢,
答案 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”
的用法