使用Powershell更新用户主目录

我正在尝试将主目录path更改为一群用户。

我在Ppowershell中写了一个脚本,它应该改变用户名的path:

\\serverName\shareName\$_.SamAccountName 

问题是,我得到DistinguishedName而不是SamAccountName像这样:

 \\serverName\shareName\CN=UserName,OU=OuName,DC=domainName,dc=local 

这是我写的脚本:

 Get-ADUser -Filter * -SearchBase 'ou=XX,dc=domainName,dc=local' | ForEach-Object { Set-ADUser $_.SamAccountName -HomeDrive "Z:" -HomeDirectory "\\serverName\shareName\$_.SamAccountName" } 

任何人都可以看到为什么这是行不通的?

这是因为Powershell使用引号处理variables的方式。 基本上,而不是得到

 $_.SamAccountName 

你真的得到了

 $_ + "SamAccountName" 

要解决这个问题,只需使用下面的方法来封装你的variables:

 Set-ADUser $_.SamAccountName -HomeDrive "Z:" -HomeDirectory "\\serverName\shareName\$($_.SamAccountName)" 

更新:@JScott已经通知我这个方法被称为“子expression式”

 $users = Get-Content C:\temp\homedir\test.txt foreach ($user in $users) { $h = Get-ADUser $user -Properties * | select-object -expandproperty cn Set-ADUser $H -HomeDrive "H:" -HomeDirectory "\\my.domain.com\myserver\homedirs\$H" }