Поиск по SamaccountName в Office365
-
21-12-2019 - |
Вопрос
Я пытаюсь разрешить разрешения на shared mailboxes
в свои пользовательские объекты. Они перечислены как на почтовом ящике своим O365 SAMAccountName
. У меня есть это как массив строк, и я ищу пользовательский объект, как так:
foreach ($samaccountname in $SANRWUsers)
{
Write-Host "Looking for" $samaccountname
$user = Get-User -Filter "SamAccountName -eq $($samaccountname)"
# Do other stuff...
}
.
В основном это работает. Большинство SamaccountNames имеют форму «Генеракодицетагкод».
Однако некоторые выглядят так:
$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 не делать этого?
Похоже, что аккаунты, которые имеют эту форму Samacccountname, являются довольно старыми, и были созданы в Live @ Edu Days, в начале 2011 года или около того. Там не так много по сравнению со многими десятками тысяч, созданных, но для этого достаточно проблемой.
Спасибо заранее.
Решение
Вам нужно процитировать вложенную строку в вашем выражении фильтра:
$user = Get-User -Filter "SamAccountName -eq '$samaccountname'"
.
Если вы предоставляете буквальную строку вместо переменных в выражении фильтра, необходимо избежать генеракодицетагкода, чтобы убедиться, что PowerShell не обрабатывает строку в виде переменной:
$user = Get-User -Filter "SamAccountName -eq '`$A75T20-QSRL3G5B6T0L'"
.