我想基于包含用户名列表的csv文件设置主目录。
我想象有get-user,set-user和foreach命令的组合可以提供正确的更新。
这是我正在使用的代码,但是我无法进行逻辑跳转,以将该输出传递给设置主目录的Set-ADUser命令。
function ConvertUser($user)
{
$search = New-Object DirectoryServices.DirectorySearcher([ADSI]“”)
$search.filter = “(&(objectClass=user)(displayName=$user))”
$results = $search.Findall()
foreach($result in $results){
$userEntry = $result.GetDirectoryEntry()
Write-Output($userEntry.sAMAccountName)
}
}
function ConvertUsers
{
process{
foreach($user In $_){
ConvertUser($user)
}
}
}
Get-Content ".Users.txt" | ConvertUsers
我确定我缺少一些简单的东西,但是but,我是Powershell新手。
编辑:我想从ConverUsers输出这是用户名,然后将其输出到set-aduser命令。每当我尝试通过管道将其传递给set-aduser时,我都会收到语法错误,空管道或错误的数据输出。
最佳答案
您正在寻找Set-ADUser
cmdlet。它具有-HomeDirectory
参数(显然可以使您设置用户的主目录)和-Identity
参数,该参数指定要编辑的用户。它还具有-HomeDrive
参数,该参数指定其主目录的驱动器号。
# 1. Get the user, based on their "display name"
$User = Get-ADUser -LDAPFilter '(&(displayname=Trevor Sullivan))';
# 2. Change the user's home directory and home drive
Set-ADUser -Identity $User.SamAccountName -HomeDirectory \\fileserver\users\trevor -HomeDrive U;
给定以下CSV文件内容:
以下脚本应设置主驱动器:
# 1. Import the user data from CSV
$UserList = Import-Csv -Path c:\test\Users.csv;
# 2. For each user ...
foreach ($User in $UserList) {
# 2a. Get the user's AD account
$Account = Get-ADUser -LDAPFilter ('(&(displayname={0}))' -f $User.DisplayName);
# 2b. Dynamically declare their home directory path in a String
$HomeDirectory = '\\fileserver\users\{0}' -f $Account.SamAccountName;
# 2c. Set their home directory and home drive letter in Active Directory
Set-ADUser -Identity $Account.SamAccountName -HomeDirectory $HomeDirectory -HomeDrive u;
}