Назад | Перейти на главную страницу

Использование Powershell для обновления домашнего каталога пользователей

Я пытаюсь изменить путь к домашнему каталогу для группы пользователей.

Я написал сценарий в Ppowershell, который должен изменить путь к имени пользователя следующим образом:

\\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 обрабатывает переменные в кавычках. По сути, вместо того, чтобы получать

$_.SamAccountName

Вы действительно получали

$_ + "SamAccountName"

Чтобы решить эту проблему, просто используйте следующий метод для инкапсуляции ваших переменных:

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

Обновление: @JScott сообщил мне, что этот метод называется "подвыражение"

$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"  
}