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