【问题标题】:AD Update from CSV file without SamAccountName从没有 SamAccountName 的 CSV 文件进行 AD 更新
【发布时间】:2015-12-13 09:48:58
【问题描述】:

我的目标是使用 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.

【问题讨论】:

  • 嗨,你能告诉我们出了什么问题吗? :) 最后我至少看到了一些奇怪的引用
  • @sodawillow 这些将是聪明的报价。 通常是复制粘贴的产物。卡姆你从来没有问过问题吗?
  • 您没有为$name(或其他变量)赋值,所以我确信您在这方面遇到了几个错误。 $Name = $_.'First Name' + ' ' + $_.'Last Name' 在我看到您在这里遇到的其他问题中。你不需要有两个循环,$data 看起来像一个文件路径,所以每个循环的第二个都没有权重
  • 只是为了记录......无论人们是否有相同的名字,sAMAccountName 可能是 John Doe 的“roflninjacopter”,Neo 的“kitten27”等等......哦,虽然在同名主体;找到一个用户,其中 displayName -eq "First Name" + "Last Name" - 这不可能让 CIO 成为场地管理员或类似的人吗?

标签: powershell csv active-directory


【解决方案1】:

您的代码大部分是无法管理的。重做它更容易

将[你]指向正确的方向

您尝试重命名每一行的值,从而使事情变得复杂。虽然您可以这样做,但您实际上并不需要这样做。 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 进行更改之前测试您的代码。

【讨论】:

  • 嗨,马特,感谢您对 Set-ADUser 的一个 qq 的回复,如果我想扩展导入以允许多个参数,我可以在 -WhatIf 语句之前添加它们吗?即Set-ADUser -Title $_.'Job Name' -Department $_.'Department Name' -WhatIf }
  • 它没有-whatif之前。但是,是的......只需将它们添加到那里。 @Cam
猜你喜欢
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2023-02-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
相关资源
最近更新 更多