【问题标题】:Create New User via PowerShell通过 PowerShell 创建新用户
【发布时间】:2020-10-27 02:16:01
【问题描述】:

我正在编写通过 PowerShell 使用用户(创建者)输入创建新用户的脚本。我正在寻找的输入是名字和姓氏以及一些属性。我希望从输入中自动创建 samaccountname 和 UPN。不确定这是否可以完全完成,但想对我当前的脚本进行一些输入。我突出显示了 firstinitial 作为占位符,以显示我想要完成的任务。

new-aduser -givenname($givenname = read-host "Input Firstname") -surname($surname = read-host "Input Lastname") -samAccountName ("***firstinitial***"+"$._surname") -userprincipalname "$._surname+"@domain.com" -path "OUName" -whatif

好的,感谢以下帮助。我能够进行更多搜索,并且可以进行以下搜索。除了显着的名称以单个名称出现而不是名字和姓氏之间的空格之外,所有看起来都可以工作。

#User info entered
$first = Read-Host "First name"
$last = Read-Host "Last name"
$title = Read-Host "Title"
$location = Read-Host "Location"
$department = Read-Host "Business Practice"
$password = read-host -assecurestring "Password"

#Create new user

$Attributes = @{

   Enabled = $true
   ChangePasswordAtLogon = $false

   UserPrincipalName = $first.split(" ")[0]+$last+"@domain.com"
   Name = $first+$last
   GivenName = $first
   Surname = $last
   DisplayName = "$first "+" $last"
   Office = $location
   Department = $department
   Title = $title
   samAccountName = $first.split(" ")[0] + $last
   AccountPassword = $password

}

New-ADUser @Attributes -whatif

【问题讨论】:

  • 澄清一下,如果我使用 Jane Doe 的名字,我会得到以下信息 - (注意 JaneDoe 中没有空格)“CN=janedoe,CN=Users,DC=KFriese,DC=office”
  • 好的,解决了这个名字组合的问题。
  • $first + " " + $last"{0} {1}" -f $first, $last

标签: powershell


【解决方案1】:

您可以添加此以将$_.givenName 作为第一个首字母:

$gn = (read-host "Input Firstname")
$sn = (read-host "Input Lastname")
new-aduser -givenname $gn -surname $sn -samAccountName $gn.split(" ")[0]+$sn -userprincipalname $sn+"@kfriese.com" -path "OUName" -whatif

【讨论】:

  • $gn.split(" ")[0]+$sn -- 这不起作用。它结合了名字和姓氏。我需要名字的首字母和姓氏作为 SAM。
【解决方案2】:

这是一种更高级和更强大的方法:一个自定义函数,它利用 PowerShell 集成功能。

它使用attributes 使参数成为强制性参数,因此在调用该函数时会自动查询用户输入。还有一个验证属性,以确保输入不为空且没有无效字符(您可能需要根据需要调整正则表达式)。

New-ADUser 的参数使用splatting 传递。其余的都很简单......

function makeuser {
    param(
        [Parameter(Mandatory, Position = 0)]
        [ValidatePattern("[a-z]+")]
        [string]$GivenName,

        [Parameter(Mandatory, Position = 1)]
        [ValidatePattern("[a-z]+")]
        [string]$Surname
    )
    $params = @{
        GivenName = $GivenName
        Surname = $Surname
        SamAccountName = $GivenName[0] + $Surname
        UserPrincipalName = $Surname + "@kfriese.com"
        Path = "OUName"
    }
    New-AdUser @params
}

要调用该函数,只需键入(参数值会自动查询)

makeuser

或明确指定值:

makeuser -GivenName Foo -Surname Bar
# or
makeuser foo bar

【讨论】: