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

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

Я создал скрипт, который будет массово перемещать все пользовательские объекты в одном подразделении в другое подразделение. Это отлично работает. Сейчас я пытаюсь массово изменить пути к домашним папкам этих пользователей (и букву диска). До сих пор я мог заставить скрипт корректно изменить путь / букву диска, но я не могу заставить его добавить имя пользователя в конец пути (\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%, которую можно использовать в общем для нескольких пользователей одновременно?

2 ответа

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