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