Usando o Powershell para alterar em massa o caminho da pasta Home dos objetos do AD -% username "?

2

Eu fiz muita pesquisa sobre isso e ainda não consegui encontrar a resposta.

Eu criei um script que moverá todos os objetos de usuário em uma unidade organizacional para outra unidade organizacional. Isso funciona bem. Agora estou tentando alterar em massa os caminhos da pasta Home desses usuários (e a letra da unidade). Até agora, posso fazer com que o script altere a letra do caminho / unidade corretamente, mas não consigo adicionar o nome de logon do usuário ao final do caminho (\ server \ share \ username). As pastas base dos usuários são nomeadas após seus nomes de logon. Normalmente, faríamos isso individualmente apenas colocando \ server \ share \% username% no caminho da pasta Home no AD, mas% username% não parece ser uma opção com o Powershell. Se eu adicionar "% username%" ao final do caminho, o caminho do AD será semelhante a este - \ server \ share \% username% (o nome do usuário aparece como "% username%", não o nome de logon real). Eu tentei várias maneiras de fazer isso funcionar (variáveis, $ _. SamAccountName, etc), mas até agora, sem sorte.

Aqui está o meu script, até agora ...

#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")

Existe um "substituto" para% username% que pode ser usado genericamente para um grupo de usuários de uma só vez?

    
por j7wb 09.04.2013 / 23:48

2 respostas

4

Eu fiz exatamente isso na segunda-feira. Abaixo está o script que usei, modificado para os propósitos de postar aqui, obviamente. O que você está procurando, em vez de %username% é $_.SamAccountName

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

(E sim, isso solicita um valor de filtro, porque não temos apenas usuários em nossas UOs de usuários. Se você quiser eliminar isso, adicione -Filter * em lá.)

    
por 10.04.2013 / 00:40
0

Você estava certo! $_.SamAccountName foi o caminho a percorrer.

Apenas um FYI. Eu encontrei isso abaixo e está funcionando para mim. Parece bastante semelhante ao seu exemplo. Obrigado!

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