Вопрос

Я пытаюсь разрешить разрешения на 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'"
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top