如何将变量传递给 -Filter
How to pass a variable to -Filter
我在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 并且 returns 数据类型为:
Deserialized.Microsoft.Exchange.Data.Directory.Management.Mailbox
但是当 Get-ADUser
命令出错时,它说对象的类型是 PSCustomobject
。我认为这可能是问题的一部分。
Get-ADUser -Filter "userprincipalname -eq '$($user.userprincipalname)'"
我不知道为什么,但这里有更多讨论关于哪些语法适用于 Get-ADUser,哪些不适用于 Get-ADUser,以及您使用的脚本块语法如何适用于完整的用户对象,但不适用于PSCustomObject,此处:
我在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 并且 returns 数据类型为:
Deserialized.Microsoft.Exchange.Data.Directory.Management.Mailbox
但是当 Get-ADUser
命令出错时,它说对象的类型是 PSCustomobject
。我认为这可能是问题的一部分。
Get-ADUser -Filter "userprincipalname -eq '$($user.userprincipalname)'"
我不知道为什么,但这里有更多讨论关于哪些语法适用于 Get-ADUser,哪些不适用于 Get-ADUser,以及您使用的脚本块语法如何适用于完整的用户对象,但不适用于PSCustomObject,此处: