我有一个脚本(在很大程度上要感谢此站点),该脚本从文本文件中提取人物姓名,并将其分为FullName,FirstName,LastName和FirstLetter。
我现在计划将它们导入AD,并且在很大程度上,我知道我在做什么。
但是,我正在努力应对以下部分
New-ADUser -Name
我想做这样的事情
$result.ForEach({
New-ADUser -Name $_.FirstName + $_.LastName -GivenName $_.FirstName -Surname
$_.LastName -AccountPassword
(ConvertTo-SecureString -AsPlainText "APassword!" -Force)
-PasswordNeverExpires $True -UserPrincipalName
"$_.FirstLetter+$_.LastName@vennershipley.co.uk"
-SamAccountName "$_.FirstLetter $_.LastName"
-Path 'OU=Users,OU=London,OU=Sites,DC=MyCompany,DC=local'
})
这将返回错误,指出“提供的名称不是正确的帐户名称”。现在我想这是因为,如果我这样做
$result.FirstName + $result.LastName
它在单独的行上返回3个名字和3个姓氏,所以我想它正在尝试用两个单独的行上的名字来命名每个人,例如
那么假设这是问题所在,那么我如何将结果显示在一行上?
此外,如果有更好的广告创建方法,请告知,我还在学习!
答案 0 :(得分:2)
就像在ConvertTo-SecureString
部分中所做的那样,将两个变量括在括号中以获得加法的结果:
$result.ForEach({
New-ADUser -Name ($_.FirstName + "" + $_.LastName) -GivenName $_.FirstName -Surname
$_.LastName -AccountPassword
(ConvertTo-SecureString -AsPlainText "APassword!" -Force)
-PasswordNeverExpires $True -UserPrincipalName
"$_.FirstLetter+$_.LastName@vennershipley.co.uk"
-SamAccountName "$_.FirstLetter $_.LastName"
-Path 'OU=Users,OU=London,OU=Sites,DC=MyCompany,DC=local'
})
现在,当您需要更好的方法时,几乎看不到任何可能性,包括Splatting parameters和string.format (-f)
也请注意Name
和{{ 1}}参数:
SamAccountName
另一件事:在生产中执行此操作之前检查所有内容是否良好,我建议您将foreach ($user in $result)
{
$Params = @{
Name = "$($user.FirstName) $($user.LastName)"
GivenName = $user.FirstName
Surname = $user.LastName
AccountPassword = (ConvertTo-SecureString -AsPlainText "APassword!" -Force)
PasswordNeverExpires = $true
UserPrincipalName = "{0}{1}@vennershipley.co.uk" -f $user.FirstName.Chars(0),$_.Lastname
SamAccountName = "{0}{1}" -f $user.FirstName.Chars(0),$_.Lastname
Path = 'OU=Users,OU=London,OU=Sites,DC=MyCompany,DC=local'
}
New-ADUser @Params
}
参数添加到-WhatIf
cmdlet中,它将演示操作,但不会运行它