Utilizar Powershell para cambiar en masa la ruta de la carpeta Inicio de los objects AD -% username "?

He hecho un montón de búsqueda en esto, y todavía no puede encontrar la respuesta.

He creado una escritura que moverá a granel todos los objects del usuario en una OU a otra OU. Esto funciona bien. Ahora estoy intentando cambiar a granel las trayectorias de la carpeta casera de esos usuarios (y letra de la impulsión). Hasta ahora, puedo get el script para cambiar la ruta / letra de unidad correctamente, pero no puedo conseguir que agregue el nombre de inicio de session del usuario al final de la ruta de acceso (\ server \ share \ username). Las carpetas Inicio de los usuarios tienen el nombre de sus nombres de inicio de session. Normalmente, haríamos esto individualmente poniendo \ server \ share \% username% en la ruta de la carpeta Home en AD, pero% username% no parece ser una opción con Powershell. Si agrego "% username%" al final de la ruta, la ruta AD se verá así: \ server \ share \% username% (el nombre del usuario aparece como "% username%", no su nombre de inicio de session real). He intentado un número de maneras de conseguir esto para trabajar (variables, $ _. SamAccountName, etc), pero hasta ahora, ninguna suerte.

Aquí está mi guión, hasta ahora …

#This script will move objects from one OU to another and set AD Home folder path. Clear-Host write-host "This script will move objects from one OU to another and set AD Home folder path." -ForegroundColor Magenta start-sleep -s 2 #Global Variables $global:path = "OU=users,OU=IT,"dc=contoso,dc=com" $domain = "dc=contoso,dc=com" do { # Operator Variables. $rootOUsource = read-host "What is the SOURCE root OU name?" $deptnamesource = read-host "What is the SOURCE department name?" write-host "Retrieving user objects...." -ForegroundColor Magenta start-sleep -s 1 #Retrieve object info. Get-ADUser -Filter * -SearchBase "OU=$deptnamesource,OU=users,OU=$rootOUsource,$domain" # Operator Variables. $divnametarget = read-host "What is the TARGET division name?" $deptnametarget = read-host "What is the TARGET department name?" #Object/target variables $users = Get-ADUser -Filter * -SearchBase "OU=$deptnamesource,OU=users,OU=$rootOUsource,$domain" $targetOU = "OU=$deptnametarget,OU=$divnametarget,$path" #Move object/s. foreach ($user in $users) { Move-ADObject $user -TargetPath $targetOU } #THIS PART DOES NOT WORK CORRECTLY... #Set AD Home Folder path and create/permission folder. $newusers = Get-ADUser -Filter * -SearchBase $targetou foreach ($newuser in $newusers) { set-aduser $newuser -homedirectory "\\server\share\users\%username%" -homedrive H: } #Repeat process option. write-host "All objects have been moved." -ForegroundColor Magenta $choice = read-host "Do you want to move more objects?" $choice = $choice.toupper() } while ($choice -eq "Y") 

¿Hay un "reemploop" para% username% que se puede utilizar genéricamente para un montón de usuarios a la vez?

Hice justamente esto el lunes. A continuación se muestra el guión que he usado, modificado para los propósitos de publicar aquí, obviamente. Lo que estás buscando, en lugar de %username% es $_.SamAccountName

 Get-ADUser -SearchBase "OU=Users,OU=[site],DC=[company],DC=[tld]" | % { Set-ADUser $_ -HomeDrive "H:" -HomeDirectory ('\\[dfs root]\[remote site name]\Users\' + $_.SamAccountName) } 

(Y sí, esto solicita un valor de filter, porque no tenemos sólo usuarios en nuestras OUs de Usuarios. Si quieres eliminar eso, agrega -Filter * allí.)

¡Usted tenía razón! $_.SamAccountName fue el path a seguir.

Sólo un FYI. Encontré esto abajo y está trabajando para mí. Se parece bastante a su ejemplo. ¡Gracias!


 #Set AD Home Folder path. Get-ADUser -Filter * -SearchBase $targetou | Foreach-Object { $sam = $_.SamAccountName Set-ADuser -Identity $_ -HomeDrive "H:" -HomeDirectory "\\server\share\$sam" }