Powershell 新员工脚本问题
我编写了一个脚本,它从CSV文件中获取信息,并根据列中的变量创建一个AD帐户和一个MSOL帐户。该脚本只与我测试的一个用户一起工作Powershell 新员工脚本问题,powershell,Powershell,我编写了一个脚本,它从CSV文件中获取信息,并根据列中的变量创建一个AD帐户和一个MSOL帐户。该脚本只与我测试的一个用户一起工作 $AccountList = import-csv "C:\File\path\input.csv" ForEach ($Person in $AccountList) { $Accountname = $firstname.Trim().ToLower() + "." + $lastname.Trim().ToLower() $Firstname
$AccountList = import-csv "C:\File\path\input.csv"
ForEach ($Person in $AccountList) {
$Accountname = $firstname.Trim().ToLower() + "." + $lastname.Trim().ToLower()
$Firstname = $AccountList.pFirstName
$LastName = $AccountList.pLastName
$UPN = $Accountname + "@company.com"
$displayname = $firstname + " " + $Lastname
$Department = $AccountList.pDepartment
$Location = $AccountList.pLocation|
ForEach {
New-ADUser -SamAccountName $Accountname -Name $displayname -DisplayName $displayname -Surname $Lastname -GivenName $Firstname -UserPrincipalName $UPN -Department $Department -Office $Location -AccountPassword (ConvertTo-SecureString -AsPlainText "X" -Force) -ChangePasswordAtLogon $true -Enabled $true -PasswordNeverExpires $false -Path "CN=Users,DC=medsinmotion,DC=local"
}
ForEach ($Person in $AccountList) {
New-MsolUser -DisplayName $displayname -FirstName $Firstname -LastName $Lastname -UserPrincipalName $UPN -Department $Department -UsageLocation US -LicenseAssignment reseller-account:DESKLESSPACK -ForceChangePassword $true
if ($Department -match "Call Center" -or "Retail") {
Add-MailboxPermission -Identity CallCenter -User $Accountname -AccessRights FullAccess
Add-DistributionGroupMember -Identity callctr@company.com -Member $Accountname
}
Else {
Set-MsolUserLicense -UserPrincipalname $UPN -AddLicenses O365_BUSINESS_PREMIUM -RemoveLicenses reseller-account:DESKLESSPACK
}
Add-DistributionGroupMember -Identity all -Member $UPN
}
}
问题是,当有2个以上的用户时,我试图设置的所有变量都会出现错误;错误是:
“无法将”“System.Object[]”转换为参数”“SamAccountName”“所需的类型”“System.String”“。不支持指定的方法”
它会遍历所有变量(Displayname
,Samaccountname
,和UPN
),但会出现该错误
导入Csv的-Raw
与获取内容的不同
有没有办法将其转换为系统字符串?请告诉我可能的解决方案
*不得不重做正如@boxdog在评论中提到的,第一个也是最主要的问题是,您正在循环使用$AccountList
,每个元素都是$Person
。因此,如果需要当前元素,应该使用$person
第二个问题是在定义$AccountName
之前,使用$firstname
和$lastname
定义$AccountName
第三,您只是将$AccountList.pLocation
导入另一个循环
第四,$Department-match“Call Center”-或“Retail”
始终为真,因为$Department-match“Call Center”
和“Retail”
是单独的条件,当字符串Retail
被转换为布尔值时,因为它不是空的,所以始终为真|
是正则表达式或运算符,否则您需要在-或之后使用另一个-match
语句
通过利用在哈希表中定义参数,然后将哈希表作为命令的参数传递,也可以大大简化脚本
$AccountList = import-csv "C:\File\path\input.csv"
ForEach ($Person in $AccountList) {
$NewUserParams = @{
GivenName = $Person.pFirstName
Surname = $Person.pLastName
SamAccountName = "$($Person.pFirstName.Trim().ToLower()).$($Person.pLastName.Trim().ToLower())"
UserPrincipalName = "$($Person.pFirstName.Trim().ToLower()).$($Person.pLastName.Trim().ToLower())@company.com"
Name = "$($Person.pFirstName) $($Person.pLastName)"
DisplayName = "$($Person.pFirstName) $($Person.pLastName)"
Department = $Person.pDepartment
Office = $Person.pLocation
AccountPassword = (ConvertTo- SecureString -AsPlainText "X" -Force)
ChangePasswordAtLogon = $True
Enabled = $True
PasswordNeverExpires = $False
Path = "CN=Users,DC=medsinmotion,DC=local"
}
New-ADUser @NewUserParams
$NewMsolUserParams = @{
FirstName = $NewUserParams.GivenName
LastName = $NewUserParams.Surname
UserPrincipalName = $NewUserParams.UserPrincipalName
DisplayName = $NewUserParams.displayname
Department = $NewUserParams.Department
UsageLocation = 'US'
LicenseAssignment = 'reseller-account:DESKLESSPACK'
ForceChangePassword = $True
}
New-MsolUser @NewMsolUserParams
if ($NewMsolUserParams.Department -match "Call Center|Retail") {
Add-MailboxPermission -Identity CallCenter -User $NewUserParams.SamAccountName -AccessRights FullAccess
Add-DistributionGroupMember -Identity callctr@company.com -Member $NewUserParams.SamAccountName
} Else {
Set-MsolUserLicense -UserPrincipalname $NewUserParams.UserPrincipalName -AddLicenses O365_BUSINESS_PREMIUM -RemoveLicenses reseller-account:DESKLESSPACK
}
Add-DistributionGroupMember -Identity all -Member $NewUserParams.UserPrincipalName
}
至少有一个问题(可能还有更多问题)是您在不同的地方引用了$AccountList
,您应该在这些地方引用$Person
。例如:$Firstname=$AccountList.pFirstName
,应该是$Firstname=$Person.pFirstName
好的,谢谢,我必须尝试一下。我很感谢你的评论,这很酷,我不知道它的存在,但我必须尝试一下。谢谢你的建议。这可以工作并创建帐户,但它不会将所有用户添加到特定的邮箱和DL中;它只添加列表中的最后一个成员。是否有一种方法可以将所有用户同时添加到列表中?检查是否对任何额外的右大括号进行了修改}
。邮箱部分应该位于foreach
循环中,并针对每个用户运行。既不使用数组,也不使用数组,因此您确实需要为循环中的每个用户运行一次。