【发布时间】:2017-01-24 03:00:22
【问题描述】:
我在PS中遇到了一个很奇怪的情况。
在我拥有的脚本中,有一个 cmdlet (Get-Mailbox) 可以拉回一些邮箱并将它们存储在 $mailboxes 中。
然后我按如下方式循环查找匹配的 AD 帐户。
foreach ($user in $mailboxes) {
Get-ADUser -Filter {UserPrincipalName -eq $user.UserPrincipalName}
}
当我运行它时,它会报错说它在$user 上找不到属性UserPrincipalName。
我已经调试了脚本并对其进行了彻底的测试。如果我输入 $user.UserPrincipalName 会出错,它会输出一个 UPN 列表,并且它们的日期类型是字符串,因此该属性在那里并且有数据。
我得出的结论是,由于某种原因,-Filter 看不到 $user 变量 - 好像它被隔离在 {} 括号内,我听说函数可能就是这种情况。但是,如果我像这样修改代码,它会起作用。
foreach ($user in $mailboxes) {
$name = $user.UserPrincipalName
Get-ADUser -Filter {UserPrincipalName -eq $name}
}
虽然这解决了我的问题,但我想了解为什么第一个示例不起作用。谁能解释一下?
值得注意的是get-mailbox实际上首先连接到Exchange Online并返回一个数据类型:
Deserialized.Microsoft.Exchange.Data.Directory.Management.Mailbox
但是当Get-ADUser 命令出错时,它说对象是PSCustomobject 类型。我认为这可能是问题的一部分。
【问题讨论】:
-
所以...我看不到如何编辑这篇文章,但我注意到顶部有一个错字。 $userlist 应该说 $mailboxes 否则当然会导致重大问题!
标签: powershell active-directory office365