Использование 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"
}