我在PS中遇到了一个非常奇怪的情况。
在我拥有的脚本中,有一个cmdlet(Get-Mailbox
)可以回收几个邮箱并将它们存储在$mailboxes
中。
然后我按如下方式循环查找匹配的AD帐户。
foreach ($user in $mailboxes) {
Get-ADUser -Filter {UserPrincipalName -eq $user.UserPrincipalName}
}
当我运行此错误时,表示无法在UserPrincipalName
上找到属性$user
。
我已经调试了脚本并对其进行了彻底的测试。如果我输入$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
。我认为这可能是问题的一部分。
答案 0 :(得分:2)
Get-ADUser -Filter "userprincipalname -eq '$($user.userprincipalname)'"
我不知道原因,但此处还有一些关于哪些语法与Get-ADUser无关,以及您使用的scriptblock语法如何与完整配合使用的讨论用户对象但没有PSCustomObject,这里: