Question

J'essaie de résoudre les autorisations sur shared mailboxes dans leurs objets utilisateur.Ceux-ci sont répertoriés sur la boîte aux lettres par leur O365 SAMAccountName.Je les ai sous forme de tableau de chaînes et je recherche l'objet utilisateur comme ceci :

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

La plupart du temps, cela fonctionne.La plupart des SAMAccountNames sont de la forme "abcd1111111-222222222".

Cependant, certains ressemblent à ceci :

$A75T20-QSRL3G5B6T0L

C'est une chaîne, pas un nom de variable.Ce que j'obtiens lorsque le bloc de code ci-dessus recherche cela est le suivant :

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."

Je suis très loin d'être un expert Powershell d'après ce que je peux comprendre, c'est prendre le signe dollar sur le devant de la chaîne pour être un sceau et essayer de le traiter comme une variable.Comment puis-je empêcher Powershell de faire cela ?

Il semble que les comptes qui ont cette forme de SAMAccountName soient assez anciens et aient été créés à l'époque de Live@Edu, début 2011 environ.Il n’y en a pas beaucoup comparé aux dizaines de milliers créés depuis, mais il y en a suffisamment pour que cela pose problème.

Merci d'avance.

Était-ce utile?

La solution

Vous devez citer la chaîne imbriquée dans votre expression de filtre :

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

Si vous fournissez une chaîne littérale au lieu d'une variable dans l'expression de filtre, vous devez échapper au $ pour garantir que PowerShell ne traite pas la chaîne comme une variable :

$user = Get-User -Filter "SamAccountName -eq '`$A75T20-QSRL3G5B6T0L'"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top