【问题标题】:Modify Active Directory attribute with New-ADuser使用 New-ADuser 修改 Active Directory 属性
【发布时间】:2018-07-31 00:20:36
【问题描述】:

我需要在我们的 AD 中提供属性“Ms-Ds-ConsistencyGUID”,但它看起来比我预期的要困难得多。这是我到目前为止所做的脚本:

ipmo activedirectory

# Combo box

$collection = @()
$a = [System.Management.Automation.Host.ChoiceDescription]::new("&Oui")
$collection+=$a

$b = [System.Management.Automation.Host.ChoiceDescription]::new("&Non")
$collection+=$b

$annuler = 
[System.Management.Automation.Host.ChoiceDescription]::new("&Annuler")
$collection+=$annuler

$prompt = $Host.UI.PromptForChoice("Messagerie","L'utilisateur aura-t-il 
besoin d'une messagerie ?",$collection,0)

Switch ($prompt) {
  0 {

# Import CSV file

$users = import-csv C:\Users\...\Desktop\test_bulk.csv -delimiter ";"


        foreach ($User in $users) 
{
        # User's info

        $Displayname = $User.Givenname + " " + $User.Surname
        $Usersurname = $User.Surname
        $Userfirstname = $User.Givenname
        $SAM = $User.Samaccountname
        $OU = $User.path
        $password = $User.Password
        $UPN = $SAM + "@...com"
        $emailaddress = ($User.Givenname + "." + $User.Surname + "@...com").ToLower()
        $description = get-aduser -Identity $User.gpuser -Properties Description | select -ExpandProperty description
        $homedirectory = "\\server\$($User.Samaccountname)"
        $infotab = $User.invcode
        [guid]$obGUID = get-aduser $newuser -Properties objectguid | Select -ExpandProperty Objectguid
        $newuser = New-ADUser -PassThru -Name $Displayname -Surname 
$Usersurname -GivenName $Userfirstname -SamAccountName $SAM -Path $OU 
-AccountPassword (ConvertTo-SecureString $password -AsPlainText -Force) -
Enabled $true -ChangePasswordAtLogon $false -PasswordNeverExpires $false 
-UserPrincipalName $UPN -EmailAddress $emailaddress -Description 
$description -ScriptPath "login.vbs" -HomeDrive "H:" -HomeDirectory 
$homedirectory 
-OtherAttributes @{businesscategory="Internal"; 
info="|MAIL_MAILBOX_O365||RU_$($infotab)|"; ms-ds-consistencyguid = 
"$obguid"}

    # Group membership

        $gpuser = Get-ADPrincipalGroupMembership $User.gpuser | select -ExpandProperty name
        $excludefromlist = @("Group1", "Group2", "Group3")
        $newgrouplist = $gpuser | where {$_ -notin $excludefromlist}

# Creation of the new user

Add-ADPrincipalGroupMembership -Identity $newuser -MemberOf $newgrouplist
} 
     }
  1 { ... }
  2 { ... }
}

如您所见,属性“ms-ds-consistencyGUID”由变量“$obguid”提供。但是该变量会从即将创建的新用户配置文件中提取 objectGUID。这有点棘手。

你知道我该如何设置吗?

【问题讨论】:

    标签: powershell scripting active-directory


    【解决方案1】:

    您无法在创建时设置属性,因为 GUID 尚不知道。您必须在创建后对其进行更新。

    您已经指定了PassThru 参数,这意味着New-ADUser 命令将返回新用户,这意味着您可以将其传递给Set-ADUser

    $newuser = New-ADUser -PassThru ...
    Set-ADUser $newuser -Replace @{"ms-ds-consistencyGUID" = $newuser.ObjectGUID}
    

    【讨论】:

    • 感谢您的回复。但问题是我需要向这个新用户添加组。我曾尝试使用 Set-ADuser,但它不起作用。解决方案之一是使用 cmdlet Add-ADPrincipalGroupMembership,但我该如何设置此 GUID?
    • 我可以在同一个脚本中使用两个 cmdlet 吗?我认为这不是一个好习惯,对吧?
    • 在同一个脚本(New-ADUserSet-ADUserAdd-ADPrincipalGroupMembership)中使用所有三个 cmdlet 没有任何问题。只要它做你需要它做的事情。只需确保您传递给 Add-ADPrincipalGroupMembership 的组列表是有效的 - 它是一个可分辨名称、GUID、SID 或 SAM 帐户名称的数组。
    【解决方案2】:

    @Gabriel,您的意思是我可以毫无问题地声明这两个 cmdlet:

    Add-ADPrincipalGroupMembership -Identity $newuser -MemberOf $newgrouplist
    Set-ADUser $newuser -Replace @{"ms-ds-consistencyGUID" = $newuser.ObjectGUID}
    

    我认为这不是正确的方法,但它终于奏效了......

    【讨论】:

      猜你喜欢
      • 2021-08-26
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 2022-11-30
      • 2023-03-22
      相关资源
      最近更新 更多