【问题标题】:Error when creating AD contacts with powershell script使用 powershell 脚本创建 AD 联系人时出错
【发布时间】:2023-02-25 01:54:32
【问题描述】:

我有这个脚本来创建新的联系人,但这次导入时出现错误,提示“为一个只能有一个值的属性指定了多个值。”虽然我理解错误,但我没有解决方案来确定给我带来问题的属性。我试图查看 XML 文件,但它很长,而且我没有看到每个属性有多个值。有人可以帮忙吗?

    # ...
Import-Module ActiveDirectory
$import = Import-Clixml ""
$potentialAttributes = @(
    'givenName'
    'sn'
    'mail'
    'displayName'
    'cn'
    'co'
    'company'
    'l'
    'mailNickname'
    'telephoneNumber'
    'st'
    'streetAddress'
    'postalcode'
    'physicalDeliveryOfficeName'
    'mobile'
    'department'
    'title'
    'targetaddress'
    'proxyAddresses'
)

foreach($contact in $import){
    $newContact=@{
        path      = "OU=Contacts,DC=A"
        type      = "Contact"
        Name      = $contact.name
        OtherAttributes = @{}
    }

    foreach($attributeName in $potentialAttributes){
        if(-not [string]::IsNullOrEmpty($contact.$attributeName)){
            $newContact['OtherAttributes'][$attributeName] = $contact.$attributeName
        }
    }
    
    New-ADObject @newContact
}

示例 XML

<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
  <Obj RefId="7">
    <TN RefId="0" />
    <MS>
      <S N="name">Person, A (Company)</S>
      <S N="proxyAddresses">SMTP:A.person@company.com</S>
      <S N="givenName">A</S>
      <S N="sn">Person</S>
      <S N="mail">A.person@company.com</S>
      <S N="displayName">Person, A (Company)</S>
      <S N="cn">Person, A</S>
      <Nil N="co" />
      <S N="company">ABC</S>
      <Nil N="l" />
      <Nil N="mailnickname" />
      <Nil N="telephoneNumber" />
      <Nil N="st" />
      <Nil N="streetAddress" />
      <Nil N="postalcode" />
      <Nil N="physicalDeliveryOfficeName" />
      <Nil N="mobile" />
      <Nil N="department" />
      <Nil N="title" />
      <Nil N="targetaddress" />
    </MS>
  </Obj>
</Objs>

【问题讨论】:

  • 如果没有,我们无法帮助您审查 XML看到 XML:)
  • 我在上面添加了一个示例。
  • 您不能将 cn 设置为单独的属性,它将派生自对象的名称
  • 你是对的。这似乎是解决方案。奇怪,我之前包括了 CN,并且该脚本适用于我的所有其他联系人。
  • DSA 有可能忽略如果名称和 cn 值完全相同 - 但在您发布的示例中情况似乎并非如此。无论如何,最安全的选择是提供正确的名称并跳过cn :)

标签: powershell


【解决方案1】:

这里的冲突属性是CN。

CN(或通用名称)属性是 RDN (相对专有名称) contacts 模式的属性,它的值将自动从对象的姓名(您已经提供)创建时。

完全跳过 cn 属性:

$potentialAttributes = @(
    'givenName'
    'sn'
    'mail'
    'displayName'
    'co'
    'company'
    'l'
    'mailNickname'
    'telephoneNumber'
    'st'
    'streetAddress'
    'postalcode'
    'physicalDeliveryOfficeName'
    'mobile'
    'department'
    'title'
    'targetaddress'
    'proxyAddresses'
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多