【发布时间】:2019-06-17 07:35:45
【问题描述】:
我需要通过 -in 和 -contain 运算符检查对象数组是否包含特定对象,但没有运气,例如:
PS C:\> ($3_devices = Get-MobileDevice -ResultSize 3).guid
Guid
----
25c2f857-0098-46c3-b965-f22008006d16
1cc13103-3b36-4b69-ab51-b7e381453326
aae35123-4695-40b4-b6e5-7ea6cd0713c2
PS C:\> ($1_device = Get-MobileDevice -Resultsize 2 | select -last 1).guid
Guid
----
1cc13103-3b36-4b69-ab51-b7e381453326
PS C:\> $1_device -in $3_devices
False
PS C:\> $3_devices -contains $1_device
False
PS C:\> $3_devices.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS C:\> $1_device.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True PSObject System.Object
哪里出了错,还是 PS 条件运算符支持对象?
谢谢。
【问题讨论】:
-
试试
$3_devices.guid -contains $1_device.guid -
Gert,它可以工作,但我需要比较整个对象或使用 several -and 运算符通过几个参数比较对象。但是使用大量的 -and 似乎有些过分了。所以,我想使用 -in 或 -contains 或了解它为什么不起作用。谢谢。
-
如果你想通过引用进行比较,你可以做
$3_devices -contains $1_device(如果它们实际上是同一个对象)。如果您想要通过特定参数进行“自定义”比较,当然您必须自己编写。但我们甚至不知道您的对象是什么样的。 -
@ДенисКвочка 我假设 guid 是设备的唯一标识符。如果是的话,你不需要更多的比较。
-
@marsze,它不起作用,请看上面给出的例子。在我的示例中,“我的对象”是 Exchange Online 中的移动设备。因此,它们不是自定义对象。
标签: arrays powershell object conditional-operator