【问题标题】:Powershell setting up a new user with a specific attributePowershell设置具有特定属性的新用户
【发布时间】:2020-10-04 14:07:21
【问题描述】:

我有一个脚本可以创建可用于不同操作的新用户。

Param(
[Parameter(Mandatory=$True,Position=1)]
  [string]$GivenName, #=givenName

[Parameter(Mandatory=$True,Position=2)]
  [string]$Name, # =sn

[Parameter(Mandatory=$True,Position=9)]
  [string]$ADuser, 

[Parameter(Mandatory=$True,Position=4)]
  [string]$Description, #=title


[Parameter(Mandatory=$True,Position=4)]
  [string]$AdministrationUser,

[Parameter(Mandatory=$True,Position=4)]
  [string]$SamAccManager
)

在这些参数之后我有一个新用户名等等,但我想使用最后一个参数 SamAccManager 添加到 adminDisplayName,所以我可以搜索谁负责那个 AD 用户,因为会有没有登录权限的用户将仅用于测试目的。

new-aduser -name $DisplayName -DisplayName $DisplayName -Description $Description -GivenName $GivenName -Surname $Name -SamAccountName $usr -UserPrincipalName $UserPrincipalName -Path $OU_AD

如何集成以将该信息添加到特定的 adminDisplayName 字段中?例如,我想在最后一段代码中添加 -admindisplayname $samaccmanager ,但我不能这样做,因为它是一个无效参数。有任何想法吗?

【问题讨论】:

    标签: powershell active-directory powershell-4.0


    【解决方案1】:

    我注意到的第一件事是您将 Position 的重复值添加到参数中。此外,还有一个您似乎没有使用的参数:$AdministrationUser,就我个人而言,我会更改其中一些参数的名称,以便更清楚它们代表什么。

    下面的代码使用Splatting 将参数提供给New-ADUser cmdlet。这是调用具有大量属性的 cmdlet 的一种很好的可读性和可维护性。

    Param(
        [Parameter(Mandatory=$True,Position=0)]
        [string]$GivenName,    # =givenName
    
        [Parameter(Mandatory=$True,Position=1)]
        [string]$SurName,      # =SurName
    
        [Parameter(Mandatory=$True,Position=2)]
        [string]$AccountName,  # =SamAccountName
    
        [Parameter(Mandatory=$True,Position=3)]
        [string]$Description,  # =title
    
        [Parameter(Mandatory=$True,Position=4)]
        [string]$OU,           #= distinguishedName of the OU
    
        [Parameter(Mandatory=$True,Position=5)]
        [string]$SamAccManager #= AdminDisplayName
    )
    
    # create a hashtable for the New-ADUser parameters
    $userParams = @{
        Name              = "$GivenName $SurName"
        DisplayName       = "$GivenName $SurName"
        Description       = $Description
        GivenName         = $GivenName
        Surname           = $SurName
        SamAccountName    = $AccountName
        UserPrincipalName = "$AccountName@yourdomain.com"
        Path              = $OU
        # add the AdminDisplayName attribute as hashtable
        OtherAttributes   = @{AdminDisplayName = $SamAccManager}
    }
    
    # create the user by splatting the parameters
    New-ADUser @userParams
    

    当然,你也可以在创建用户后设置AdminDisplayName属性,使用

    Set-ADuser -Identity $AccountName -Add @{AdminDisplayName = $SamAccManager}
    

    【讨论】:

    • 基本上当我创建用户时,我添加了 $SamAccManager 的位置参数,这将是请求通用用户的用户的 samaccountname,所以我可以确切地知道他们有多少以及谁是这些用户由我管理,我选择了属性 adminDisplayName,所以在 adminDisplayName 中,会有一个字符串代表发出请求的用户
    • @CălimanuLoredan 当然,但问题是如何在用户的AdminDisplayName 属性中添加该(请求者)用户,我想我已经回答了,不是吗?
    • 是的,你做到了,我会看看如何修改我的脚本,因为出于某些安全原因和其他暗示公司的原因,我只粘贴了整个脚本的零碎部分。之后,如果它符合需要,我会将其标记为解决方案。如果不是,我会回来解释任何障碍。非常感谢。
    • 因为我们在同一个脚本上,我怎么能用输入yes或no来实现一个参数,所以我可以选择一些用户的密码是否永不过期。我希望脚本将参数作为输入 YES --> 密码永不过期,NO --> 默认密码过期。
    • @CălimanuLoredan 您可以将其实现为 [1] 一个开关参数:[switch]$PasswordNeverExpires 并将其添加到 $userParams 哈希表 PasswordNeverExpires= [bool]$PasswordNeverExpires。然后如果没有给脚本这个参数,它将默认为$false。 [2] 或者你可以做一个可选参数[ValidateSet('Yes','No')];[string]$PasswordNeverExpires = 'No' 并在 $userParams 里面这样设置:PasswordNeverExpires= ($PasswordNeverExpires -eq 'Yes')
    猜你喜欢
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多