web-dev-qa-db-ja.com

Powershellを使用してユーザーのホームディレクトリを更新する

ホームディレクトリパスを多数のユーザーに変更しようとしています。

ユーザー名のパスを次のように変更するスクリプトをPpowershellで作成しました。

\\serverName\shareName\$_.SamAccountName

問題は、SamAccountNameではなくDistinguishedNameを取得することです。

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

なぜこれが機能しないのか誰にも分かりますか?

4
eliko

これは、Powershellが引用符で囲まれた変数を処理する方法が原因です。基本的に、というより

$_.SamAccountName

あなたは実際に得ていました

$_ + "SamAccountName"

これを解決するには、次のメソッドを使用して変数をカプセル化します。

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

更新:@JScottから、このメソッドは "subexpression" と呼ばれることが通知されました

8
Dan