取两个变量并将它们放在同一行

时间:2018-08-10 09:13:47

标签: powershell active-directory

我有一个脚本(在很大程度上要感谢此站点),该脚本从文本文件中提取人物姓名,并将其分为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个姓氏,所以我想它正在尝试用两个单独的行上的名字来命名每个人,例如

  • 名字
  • 姓氏

那么假设这是问题所在,那么我如何将结果显示在一行上?

此外,如果有更好的广告创建方法,请告知,我还在学习!

1 个答案:

答案 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 parametersstring.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中,它将演示操作,但不会运行它