Назад | Перейти на главную страницу

Использование Powershell для массового изменения пути к домашней папке объектов AD -% username "?

Я много искал по этому поводу и до сих пор не могу найти ответ.

Я создал сценарий, который будет массово перемещать все пользовательские объекты из одного OU в другое OU. Это прекрасно работает. Теперь я пытаюсь массово изменить пути к домашним папкам этих пользователей (и букву диска). Пока я могу заставить скрипт правильно изменить путь / букву диска, но я не могу заставить его добавить имя пользователя для входа в конец пути (\ server \ share \ username). Домашние папки пользователей названы по именам их учетных записей. Обычно мы делаем это индивидуально, просто помещая \ server \ share \% username% в путь к домашней папке в AD, но% username% не подходит для Powershell. Если я добавлю «% username%» в конец пути, путь AD будет выглядеть так - \ server \ share \% username% (имя пользователя отображается как «% username%», а не его фактическое имя для входа). Я пробовал несколько способов заставить это работать (переменные, $ _. SamAccountName и т. Д.), Но пока безуспешно.

Вот мой сценарий, пока ...

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

Есть ли «замена» для% username%, которая может быть использована сразу для группы пользователей?

Именно это я и сделал в понедельник. Ниже приведен сценарий, который я использовал, очевидно, измененный для публикации здесь. То, что вы ищете, вместо %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) }

(И да, при этом запрашивается значение фильтра, потому что у нас есть не только пользователи в наших подразделениях Users. Если вы хотите устранить это, вы должны добавить -Filter * там.)

Ты был прав! $_.SamAccountName был путь.

Просто к вашему сведению. Я нашел это ниже, и он работает для меня. Это очень похоже на ваш пример. Спасибо!


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