在Office365中搜索SAMAccountName

时间:2014-04-12 13:18:49

标签: powershell office365

我尝试将shared mailboxes的权限解析为其用户对象。它们由O365 SAMAccountName列在邮箱上。我将这些作为一个字符串数组,我正在搜索用户对象,如下所示:

foreach ($samaccountname in $SANRWUsers)
{
    Write-Host "Looking for" $samaccountname
    $user = Get-User -Filter "SamAccountName -eq $($samaccountname)"
    # Do other stuff...
}

大部分情况都是这样。大多数SAMAccountNames的格式为" abcd1111111-222222222"。

然而,有些看起来像这样:

$A75T20-QSRL3G5B6T0L

这是一个字符串,而不是变量名。上面的代码块搜索到的内容是:

Cannot bind parameter 'Filter' to the target. Exception setting "Filter": ""-QSRL3G5B6T0L" is not a valid operator. For a list of supported operators see the command help.
"SamAccountName -eq $A75T20-QSRL3G5B6T0L" at position 27."

我离Powershell专家很远,我可以发现它将字符串前面的美元符号作为一个印记并试图将其视为一个变量。我怎样才能让Powershell不这样做?

似乎具有SAMAccountName形式的帐户是相当旧的帐户,并且是在2011年初的Live @ Edu日期创建的。与之后创建的数万个相比,并没有多少,但这足以成为一个问题。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您需要在过滤器表达式中引用嵌套字符串:

$user = Get-User -Filter "SamAccountName -eq '$samaccountname'"

如果在过滤器表达式中提供文字字符串而不是变量,则需要转义$以确保PowerShell不将字符串视为变量:

$user = Get-User -Filter "SamAccountName -eq '`$A75T20-QSRL3G5B6T0L'"