I just did on a test user, and it did in fact work quite well. My concern was if I changed the SAM as part of the script when I went to look for it in the ForEach-Object, it's now gone. I was probably over-thinking it, but it does in fact work quite well as written. I've got several of these scripts I'm using for batch updating ADUC fields, but always use the SAM as the fixed variable on import of .csv, and since that was changing, I second guessed myself.
Oh, OK. No, ForEach object isn't individually querying the data from AD as it goes. You query the data, ForEach enumerates across what you've got. It'll be a problem if you have more than 1k or so users, because you won't get them all in one query.