【问题标题】:Take two variables and put them on the same line取两个变量并将它们放在同一行
【发布时间】:2018-08-10 09:13:47
【问题描述】:

我有一个脚本(主要感谢这个网站),它从文本文件中获取人名并将它们拆分为 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 个姓氏,所以我认为它试图在两个单独的行上为每个人命名,例如

  • 名字
  • 姓氏

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

另外,如果有更好的制作广告的方法,请指教,我还在学习!

【问题讨论】:

  • 在括号中关闭 $result.FirstName 和 $result.LastName:($_.FirstName + $_.LastName) 但名字和姓氏将连接起来。如果你想将它们分开,可以这样使用: ($_.FirstName + " " + $_.LastName)

标签: powershell active-directory


【解决方案1】:

将两个变量括在括号中以获得相加的结果,就像您在 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) 还要注意 NameSamAccountName 参数中字符串格式之间的差异:

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

}

还有一点:为了在生产中执行之前检查一切是否正常,我建议你在New-ADUser cmdlet 中添加-WhatIf 参数,它会演示操作但不会运行它

【讨论】:

  • 这真的很有帮助。但是,我用 -Whatif 运行了它,它给了我看起来正确的结果。一个例子是如果:对目标“CN=Jolene Matthew,OU=Users,OU=London,OU=VS Sites,DC=Vennershipley,DC=local”执行“New”操作。 但是,当我运行实际行时,它仍然错误 New-ADUser : The name provided is not a proper form account name At line:2 char:5 + New-ADUser -Name ($_.FirstName + " " + $_.LastName) -GivenName $_ ...
  • 试试我的版本...同时发布$result.ForEach({ ($_.FirstName + " " + $_.LastName) })的结果
  • 看起来可行。服务器不愿意处理这个请求,这很可能是我老板在某个地方设置的,所以现在和他谈谈。谢谢你的帮助! $result.ForEach({ ($_.FirstName + " " + $_.LastName)}) 的结果 Jolene Matthew Ilka Clune Emma Bowyer
猜你喜欢
  • 2022-07-05
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 2019-08-16
  • 2016-02-23
  • 2013-01-01
相关资源
最近更新 更多