AD没有SamAccountName从CSV文件更新

时间:2015-09-16 17:18:02

标签: powershell csv active-directory

我的目标是使用HR导出的CSV文件,但没有正确的标题来更新我们的AD用户和计算机。最后我想更新:部门,描述/职位,办公室,位置,经理。

我不是要求你为我做这件事,只是指出我正确的方向,并且非常感激。

此外,您会注意到没有SamAccountName,这是设计使然,因为用户具有相同的名称,因此我们必须使用某些用户名字的后2个首字母,后跟姓氏。

import-module ActiveDirectory
Import-CSV $data | ForEach-Object {
     $Name;expression={($_.'First Name'+' '+$_.'Last Name')}
     $displayName;expression={$_.'First Name'+' '+$_.'Last Name'}
     $givenName;expression={$_.'First Name'}
     $surName;expression={$_.'Last Name'}
     $description;expression={$_.'Job Name'}
     $office;expression={$_.'Location Name'}
     $department;expression={$_.'Department Name'}
     $title;expression={$_.'Job Name'}
     $manager;expression={$_.'Manager Name'} 
     }
foreach ($user in $data){
Get-ADUser -Filter "displayName -eq '$($user.$Name)'" | Set-ADUser -Replace @{title = “$($user.$title)”}
}

我遇到的一个错误

The term 'expression=' is not recognized as the name of a cmdlet, function, script file, or operable program.

1 个答案:

答案 0 :(得分:0)

您的代码大部分都无法管理。

更容易重做它
  

指向[你]正确的方向

通过尝试重命名每行的值来解决复杂问题。虽然你可以做到这一点,但你真的不需要。 FWIW你是从calculated properties投入语法的。

Import-Module ActiveDirectory

# Path to the CSV file
$filePath = "C:\scripts\ADIntegrationData.csv"

# Import the users
Import-CSV $filePath | ForEach-Object {

    # Try and find a matching user
    $displayName = "{0} {1}" -f $_.'First Name', $_.'Last Name'
    Get-ADUser Get-ADUser -Filter "displayName -eq '$displayName'" | Set-ADUser -Title $_.'Job Name' -WhatIf
}

对于Set-ADUser,如果您要更改的媒体资源已存在,则只需使用-Add-Remove-Replace-Title已经支持了,所以在这种情况下我们使用它!请务必查阅文档,因此请查看Set-ADUser的链接,并查看可以更改的本机属性。

您会看到此处使用的-f formatting operator。这是一种构建复杂字符串的简单方法。

注意-WhatIf,它可以帮助您在更改AD之前测试代码,这可能是错误的。