Ricerca di SamAccountName in Office365
-
21-12-2019 - |
Domanda
Sto cercando di risolvere le autorizzazioni su shared mailboxes
nei loro oggetti utente. Questi sono elencati come sulla cassetta postale dal loro O365 SAMAccountName
. Ho questi come una serie di stringhe e sto cercando l'oggetto utente come:
foreach ($samaccountname in $SANRWUsers)
{
Write-Host "Looking for" $samaccountname
$user = Get-User -Filter "SamAccountName -eq $($samaccountname)"
# Do other stuff...
}
.
Principalmente questo sta funzionando. La maggior parte dei SamaccountNames è del modulo "abcd1111111-222222222
".
Tuttavia, alcuni sembrano questo:
$A75T20-QSRL3G5B6T0L
.
Questa è una stringa, non un nome variabile. Quello che ottengo quando il blocco di codice sopra ricerca è questo questo:
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."
.
Sono molto lontano da un esperto di PowerShell da quello che posso capire che sta prendendo il segno del dollaro sulla parte anteriore della stringa per essere un sigil e cercando di trattarlo come variabile. Come posso prendere PowerShell a non farlo?
Sembra che i conti che abbiano questa forma di SamaccountName siano abbastanza vecchi e sono stati creati nei giorni Live @ EDU, all'inizio del 2011 o giù di lì. Non ci sono molti confrontati con le molte decine di migliaia create da allora, ma c'è abbastanza per questo per essere un problema.
Grazie in anticipo.
Soluzione
È necessario citare la stringa nidificata nell'espressione del filtro:
$user = Get-User -Filter "SamAccountName -eq '$samaccountname'"
.
Se si fornisce una stringa letterale anziché una variabile nell'espressione del filtro è necessario sfuggire al $
per assicurarsi che PowerShell non tratti la stringa come variabile:
$user = Get-User -Filter "SamAccountName -eq '`$A75T20-QSRL3G5B6T0L'"
.