我的目标是使用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.
答案 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之前测试代码,这可能是错误的。