powershell - PowerShell + Exchange Online - 使用 Where-Object 针对不同对象过滤一个对象?
问题描述
真的把我的头发拉出来了。我有点初学者所以提前道歉。
我在使用 Where-Object cmdlet 基本上从 Exchange Online 中的 Get-Group 查询中删除外部联系人时遇到问题。
group@domain.com
包含 4 个成员 -InternalUser1, InternalUser2, ExternalUser1, ExternalUser2
这是我到目前为止所拥有的,并且我尝试了许多不同的比较器(-notmatch、-notlike、-ne 等)但无济于事:
输入
$x = Get-Contact | Select-Object -ExpandProperty Identity
$y = Get-Group -Identity "group@domain.com" | Select-Object -ExpandProperty Members | Where-Object {$_ -notcontains $x}
输出
$x
ExternalUser1
ExternalUser2
$y
ExternalUser1
ExternalUser2
InternalUser1
InternalUser2
期望的输出
$y
InternalUser1
InternalUser2
排除 Where-Object 部分,输出是正确的,因此问题必须出在我对 Where-Object cmdlet 的使用上。对此的任何帮助将不胜感激!
解决方案
假设您的扩展变量包含字符串列表,则以下工作。
$y | Where-object {$_ -notin $x}
应用于您的示例
$x = Get-Contact | Select-Object -ExpandProperty Identity
$y = Get-Group -Identity "group@domain.com" | Select-Object -ExpandProperty Members | Where-Object {$_ -notin $x}
完整的可重现的独立示例。
$x = @(
'ExternalUser1',
'ExternalUser2'
)
$y = @(
'ExternalUser1',
'ExternalUser2',
'InternalUser1',
'InternalUser2'
)
$y | Where-object {$_ -notin $x}
如果这不起作用,请执行以下操作:
$x[0].GetType()
$Y[0].GetType()
如果 Member 或 Identity 是一个复杂对象而不是字符串,您可能需要在使用 -notin 之前从那里获取实际的字符串值
推荐阅读
- python - 按索引将值弹出到子列表中
- react-native - 无法从 React Native 上传文件:“网络请求失败”?
- javascript - 如何获取当前月份的最后日期以及条件适用的下个月
- crystal-reports - 水晶报表记录移动到下一页但他的位置是空的
- c - 如何制作一个脚本,将多个输入逐个发送到 ac 程序
- elasticsearch - ES聚合查询根据应用于ES中子文档聚合结果的条件来获取父文档?
- python - json.loads(request.body) 中的 JSONDecodeError
- c - 用于替换包含头文件的预处理器 C 程序
- flask - 烧瓶,视图装饰器没有效果
- spring-boot - 在 Spring Boot 中如何同时使用来自不同配置文件的属性?