Powershell 把两个变量放在同一行上

Powershell 把两个变量放在同一行上,powershell,active-directory,Powershell,Active Directory,我有一个脚本(很大程度上要感谢这个网站),它从一个文本文件中提取人名,并将其拆分为全名、名、名和首字母 我现在计划把这些导入到广告中,我知道我在做什么 然而,我正在为下面的部分而挣扎 New-ADUser -Name 我想做这样的事情 $result.ForEach({ New-ADUser -Name $_.FirstName + $_.LastName -GivenName $_.FirstName -Surname $_.LastName -AccountPassword (Conv

我有一个脚本(很大程度上要感谢这个网站),它从一个文本文件中提取人名,并将其拆分为全名、名、名和首字母

我现在计划把这些导入到广告中,我知道我在做什么

然而,我正在为下面的部分而挣扎

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个姓氏,因此我认为它试图在两行中分别命名每个人,如

  • 名字
  • 姓氏
那么,假设这就是问题所在,我如何将结果显示在一行上呢


此外,如果有更好的方法做广告创作,那么请建议,我仍然在学习

将两个变量括在括号中,以获得加法的结果,就像您在
converttosecurestring
部分中所做的那样:

$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' 
})
现在,当您询问更好的方法时,请参见一些可能性,包括和
(-f)
。请注意
Name
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
参数添加到
New ADUser
cmdlet中,它将演示该操作,但不会运行它

将两个变量括在括号中,以获得加法结果,就像您在
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' 
})
现在,当您询问更好的方法时,请参见一些可能性,包括和
(-f)
。请注意
Name
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
参数添加到
New ADUser
cmdlet中,它将演示该操作,但不会运行它

关闭括号中的$result.FirstName和$result.LastName:($\ufirstname+$\uname)但是名字和姓氏将连接在一起。如果要将它们分开,请这样使用:($\.FirstName++$\.LastName)在括号中关闭$result.FirstName和$result.LastName:($\.FirstName++$\.LastName),但名字和姓氏将连接在一起。如果您想将它们分开,可以这样使用:($\u.FirstName++$\u.LastName)这非常有用。然而,我用-Whatif运行了这个程序,它给了我看起来正确的结果。一个例子是假设:在目标“CN=Jolene Matthew,OU=Users,OU=London,OU=VS Sites,DC=Vennershipley,DC=local”上执行“New”操作。但是,当我运行实际的行时,仍然会出现错误New ADUser:在第2行提供的名称不是格式正确的帐户名称:char:5+New ADUser-name($\u.FirstName+“”+$\u.LastName)-GivenName$\u…尝试我的版本。。。同时发布
$result.ForEach({($.FirstName++$.LastName)})的结果。
看起来有效。服务器不愿意处理请求,这很可能是我老板在某个地方设置的,因此现在将与他交谈。谢谢你的帮助!$result.ForEach({($\.FirstName++$\.LastName)})的结果Jolene Matthew Ilka Clune Emma Bowyer这真的很有帮助。然而,我用-Whatif运行了这个程序,它给了我看起来正确的结果。一个例子是假设:在目标“CN=Jolene Matthew,OU=Users,OU=London,OU=VS Sites,DC=Vennershipley,DC=local”上执行“New”操作。但是,当我运行实际的行时,仍然会出现错误New ADUser:在第2行提供的名称不是格式正确的帐户名称:char:5+New ADUser-name($\u.FirstName+“”+$\u.LastName)-GivenName$\u…尝试我的版本。。。同时发布
$result.ForEach({($.FirstName++$.LastName)})的结果。
看起来有效。服务器不愿意处理请求,这很可能是我老板在某个地方设置的,因此现在将与他交谈。谢谢你的帮助!$result.ForEach({($\.FirstName++$\.LastName)的结果Jolene Matthew Ilka Clune Emma Bowyer