PowerShell Active Directory - 无法在 Get-ADUser 的过滤器中使用数组值

PowerShell Active Directory - Can't use array value in filter for Get-ADUser

我有两个变量; $test$accounts[0].upn

两者都是字符串,都包含完全相同的值。

当我运行:

Get-ADUser -Filter "UserPrincipalName -eq '$test'"

我得到了我想要的结果,但是当我 运行:

Get-ADUser -Filter "UserPrincipalName -eq '$accounts[0].upn'"

它没有return任何结果。

我知道 $accounts 是一个数组,但我想我应该得到相同的结果,因为变量的类型和值都相同。

请参阅下面的屏幕截图,以便更好地了解我想要实现的目标,我只制作了 $test 变量用于调试,我希望该命令与 $accounts[0].upn 一起使用。抱歉,出于隐私原因,我不得不涂掉一些个人信息,这不应该妨碍理解屏幕截图。

Demonstration Screenshot

非常感谢任何帮助!

这里的问题是 powershell 不知道何时停止解释字符串中的变量(它称为 expression expansion)。

因此,要解决此问题,您应该将任何具有属性的变量包装在子表达式中,以便 powershell 知道何时停止扩展它。

Get-ADUser -Filter "UserPrincipalName -eq '$accounts[0].upn'"

应该变成

Get-ADUser -Filter "UserPrincipalName -eq '$($accounts[0].upn)'"

注意 $() 里面有你的变量。