当在PowerShell中对对象集合(在本例中,由ActiveDirectory模块commandlet创建)使用包含运算符(例如,-contains,-notcontains,,-in)时,我没有观察到预期的结果。操作符似乎无法检测到集合中我确定匹配的对象。
在下面的例子中,我甚至使用了compare-object commandlet来证明元素确实是匹配的。
$PSVersionTable | Format-Table
$adusers_list = (get-aduser -id fooboss -properties directreports).directreports |%{ Get-ADUser -Identity $PSItem }
$target_aduser = get-aduser -id jrw
# This use of containing operators seems very similar to the example presented in documentation:
# https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-6#containment-operators
# Here comes the unexpected results:
$adusers_list -contains $target_aduser
$target_aduser -in $adusers_list
#And yet...
$adusers_list |%{
if ($_.samaccountname -eq "jrw") {
write-output "Contrary to what the contains operators told us, here it is: $($_.samaccountname)"
Write-output "also, compare-object says:"
compare-object $_ $target_aduser
}
}
输出是:
Name Value
---- -----
PSVersion 5.1.18362.145
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.18362.145
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
False
False
Contrary to what the contains operators told us, here it is: jrw
also, compare-object says:
PS C:\WINDOWS\system32>
我意识到我可以遍历并手动比较一组属性,如果我不能学习使用包含操作符的正确方法,我会这样做,但我会首先尝试这样做。
操作员文档似乎没有特别提到object类型的元素。它确实使用了“引用值”一词,所以这可能意味着它必须是一个简单的数据类型?但是如果是这样的话,文档中难道不应该提到这一点吗?也许PS也会为不可比较的类型抛出某种软异常?
您正在将复杂对象与简单值进行比较。您需要比较等效的对象类型。作为一个示例,请将您的比较逻辑更改为:
($adusers_list | Select -Expand samaccountname) -contains $target_aduser.samaccountname
这有效地将AD用户列表转换为字符串[]
,其中包含$adusers列表中用户的$adusers帐户名
。然后,我们比较等效值($target_user.samaccountname
),以查看该字符串
值是否包含在比较的字符串 []
中。
如果集合包含具有特定属性值的元素,我想断言(使用JUnit,而不是任何其他依赖项,如hamcrest)。 我发现这个问题如何断言迭代包含具有特定属性的元素?使用危害冠。 一种选择是重写< code>equals方法,只检查我想要比较的属性,但这不是一个好的解决方案。 有没有一种优雅的方法可以使用JUnit 4来实现这一点,或者我应该对其进行编码并循环访问集合以检查值?
问题内容: 我想找到在其标签集中包含 所有 给定标签的项目。 以下是简化的类: 如果我这样尝试 我得到包含 任何 给定标签的项目。这不足为奇,但我希望包含 所有 给定标签的项目。所以我尝试另一种方式: 我收到错误消息。如果仅包含一个标签,它将起作用,但失败的原因不止于此。 如何在JPQL中表达呢? 问题答案: 诀窍是使用计数:
我有这两个类,它们都有一个项目列表,我试图返回一个新对象“ItemWithDiscount”,它具有这两个类的属性,这在服务/控制器申请中。我尝试用流映射它们,但没能做到。谁能给我一个简单的方法来做这件事吗?
问题内容: 我有两个Hibernate数据对象。第一个是用户(具有唯一的ID,用户名等),第二个是Collaborateable类。在这两者之间存在n对m的关系(带有Set的实现)。这意味着,一个用户使用许多可协作对象,而一个可协作对象具有许多用户。另外,一个可协作对象只有一个用户作为所有者。 我想实现一个Hibernate查询,该查询搜索具有特定用户作为所有者或在Collaborateable.
问题内容: 我想找到在其标签集中包含 所有 给定标签的项目。 以下是简化的类: 如果我这样尝试 我得到包含 任何 给定标签的项目。这不足为奇,但我希望包含 所有 给定标签的项目。所以我尝试另一种方式: 我收到错误消息。如果仅包含一个标签,它将起作用,但失败的原因不止于此。 如何在JPQL中表达呢? 问题答案: 诀窍是使用计数:
问题内容: 我在用Maven或Eclipse编译一些Scala时遇到问题,我尝试从Java jar导入一个包含名称空间和同名类的类。 我可以用编译。 例如,Java项目(jar)包含: 编译器抱怨: 在Scala 2.9.0.1(和)中使用Maven 3.0.03 / Eclipse 3.7.1 。 我遇到问题的jar是-它肯定包含几个实例,其中存在同名的名称空间和对象。 我正在尝试在Scala中