使用Powershell批量更改AD对象的主文件夹path – %username“?

我在这方面做了很多search,但仍然找不到答案。

我已经创build了一个脚本,将批量移动一个OU中的所有用户对象到另一个OU。 这工作正常。 现在我试图批量更改这些用户的主文件夹path(和驱动器号)。 到目前为止,我可以让脚本正确地更改path/驱动器号,但我无法将用户的login名添加到path末尾(\ server \ share \ username)。 用户的主文件夹以其login名命名。 通常情况下,我们可以通过在AD的Home文件夹path中放置\ server \ share \%username%来实现这个function,但是%username%似乎不是Powershell的选项。 如果在path末尾添加“%username%”,ADpath将如下所示 – \ server \ share \%username%(用户名称显示为“%username%”,而不是它们的实际login名)。 我已经尝试了很多方法来获得这个工作(variables,$ _。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%$_.SamAccountName

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

(是的,这会提示input一个过滤值,因为我们的用户OU中只有用户。 如果你想消除这一点,你会在那里添加-Filter * 。)

你是对的! $_.SamAccountName是要走的路。

只是一个供参考。 我在下面find它,它为我工作。 它看起来很像你的例子。 谢谢!


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