繁体   English   中英

使用 powershell 从 CSV 导入 AD 属性

[英]Importing AD attributes from CSV using powershell

我是 PowerShell 的新手,我正在尝试使用来自 a.csv 文件的 PowerShell 更新 AD 属性

下面是我的 csv 文件中的行以及我要更新的属性

部门 > 部门

事业部 > 事业部

服务 > 信息

EmployeeFullname(用于标识对象)

LineManger全名 > 经理

成本中心 > 部门编号

职称 > 职称

到目前为止,我只能更新 Active Directory 中的部门、部门、职务(职务)和经理属性

我正在使用下面的脚本成功更新这些属性

$Users = Import-CSV C:\Users\user\Documents\CurrentWork\userlist.csv

ForEach ($User in $Users) {
    Get-ADUser -Filter * -property displayname | where {$_.displayname -eq $User.EmployeeFullName} | Set-ADUser -department $User.Department -Division $User.Division -Title $User.JobTitle -Manager $User.LineMangerFullname
}

但是,将infodepartmentNumber添加到脚本(如下)时,失败并显示:

 "parameter name 'info' is ambiguous" and A parameter cannot be found that matches parameter name 'departmentNumber'
$Users = Import-CSV C:\Users\user\Documents\CurrentWork\userlist.csv

ForEach ($User in $Users) {
    Get-ADUser -Filter * -property displayname | where {$_.displayname -eq $User.EmployeeFullName} | Set-ADUser -department $User.Department -Division $User.Division -Title $User.JobTitle -Manager $User.LineMangerFullname -info $User.Service -departmentNumber $User.'Cost Centre'
}

有谁知道我做错了什么或如何让这些更新以及如何导出结果以查看更新是否成功? 真的卡在这里

Set-ADUser不会将所有可能的 AD 架构属性公开为参数,仅公开一组有限的常见用户属性 - 并且info属性(或在某些工具中显示的“注释”)不是它具有参数的属性之一。

要设置没有相应参数的属性的值,请使用-Replace-Add参数,通过传递描述更新的哈希表:

... |Set-ADUser -Replace @{ info = "new info value" }

正如所评论的,对于 Set-AccountName, Manager属性只能是DistinguishedName, GUID, SID or SamAccountName之一。 显然, CSV 不包含任何这些,并且$User.LineMangerFullname包含经理的完整名字和姓氏。

为此,您需要使用另一个Get-ADUser调用从该管理器检索有效属性。

接下来,作为 Mathias R。 Jessen 已经在他的有用答案中指出,并非所有属性都可以直接在 Set-ADUser 的参数中使用,因此对于某些您将不得不使用-Replace @{property = value}语法。

最后,我建议在 cmdlet 上使用Splatting ,它可能需要很多参数来使代码干净/可维护。

尝试

$Users = Import-CSV C:\Users\user\Documents\CurrentWork\userlist.csv

foreach ($User in $Users) {
    $adUser = Get-ADUser -Filter "DisplayName -eq '$($User.EmployeeFullName)'" -Properties DisplayName -ErrorAction SilentlyContinue
    if ($adUser) {
        # set up a Splatting Hashtable for the Set-ADUser cmdlet
        $userParams = @{
            Department = $User.Department
            Division   = $User.Division
            Title      = $User.JobTitle
        }
        $manager = Get-ADUser -Filter "Name -eq "$($User.LineMangerFullname) -ErrorAction SilentlyContinue
        # if we did find a manager, add property 'Manager' to the Hashtable
        if ($manager) { $userParams['Manager'] = $manager.DistinguishedName }

        # use the Hash to splat all known parameters to Set-ADUser
        $adUser | Set-ADUser $userParams
        # next , update the attributes that have no direct parameter in Set-ADUser
        $adUser | Set-ADUser -Replace @{ info = $User.Service; departmentNumber = $User.'Cost Centre' }
    }
    else {
        Write-Warning "User $($User.EmployeeFullName) could not be found"
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM