Por que $ PSItem não se comporta conforme o esperado ao usar um argumento -Filter baseado em colchetes?
Eu estava ajudando um usuário com esta pergunta, vinculada à minha resposta aqui:Script do PowerShell para adicionar usuários ao grupo A / D de .csv usando apenas o endereço de email?
Inicialmente, escrevi o script da seguinte maneira, usando um filtro baseado em colchetes paraGet-AdUser
como segue:
Import-CSV "C:\users\Balbahagw\desktop\test1.csv" |
Foreach-Object {
# Here, $_.EmailAddress refused to resolve
$aduser = Get-ADUser -Filter { EmailAddress -eq $_.EmailAddress }
if( $aduser ) {
Write-Output "Adding user $($aduser.SamAccountName) to groupname"
Add-ADGroupMember -Identity groupname -Members $aduser
} else {
Write-Warning "Could not find user in AD with email address $($_.EmailAddress)"
}
}
Contudo,$_.EmailAddress
falha ao preencher um valor. No entanto, alterar oGet-ADUser
filtro para um filtro baseado em string funcionou como pretendido:
$aduser = Get-ADUser -Filter "EmailAddress -eq '$($_.EmailAddress)'"
Qual é a estranheza que estou experimentando e por quê? É porque quando estou usando colchetes, ele é tratado como um novo escopo e o$PSItem
não vai seguir?