¿Por qué $ PSItem no se comporta como se esperaba cuando se usa un argumento de filtro basado en paréntesis?
Estaba ayudando a un usuario con esta pregunta, vinculada a mi respuesta aquí: ¿Script de Shell para agregar usuarios al grupo A / D desde .csv usando solo la dirección de correo electrónico?
nicialmente escribí el script de la siguiente manera, usando un filtro basado en corchetes paraGet-AdUser
como sigue:
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)"
}
}
Sin embargo,$_.EmailAddress
no se pudo completar un valor. Sin embargo, cambiando laGet-ADUser
filter a un filtro basado en cadenas funcionó según lo previsto:
$aduser = Get-ADUser -Filter "EmailAddress -eq '$($_.EmailAddress)'"
¿Cuál es la extrañeza que estoy experimentando y por qué? ¿Es porque cuando uso corchetes, se trata como un nuevo alcance y la$PSItem
@ no seguirá?