Проблемы с новым скриптом - PullRequest
0 голосов
/ 01 июня 2018

Я написал скрипт, который собирает информацию из файла CSV и должен создать учетную запись AD и учетную запись MSOL на основе переменных, которые указаны в столбцах.Скрипт работает только с одним пользователем, которого я тестировал.

$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
    }
}

Проблема в том, что когда имеется более двух пользователей, он выдает ошибку для всех переменных, которые я пытался установить;ошибка:

"Невозможно преобразовать 'System.Object []' в тип 'System.String', требуемый параметром 'SamAccountName'. Указанный метод не поддерживается"

и он проходит через все переменные (Displayname, Samaccountname и UPN), но с этой ошибкой.

Нет -Raw для Import-Csv, как дляGet-Content.

Есть ли способ преобразовать его в системную строку?Пожалуйста, дайте мне знать, какое возможное решение

* пришлось переделать

1 Ответ

0 голосов
/ 01 июня 2018

Первая и самая главная проблема, о которой @boxdog упоминал в комментариях, заключается в том, что вы перебираете $AccountList, а каждый элемент равен $Person.Так что если вы хотите текущий элемент, вы должны использовать $person.

Вторая проблема заключалась в определении $AccountName с помощью $firstname и $lastname до того, как вы их определили.

В-третьих, вы просто $AccountList.pLocation направляете в другой цикл.

В-четвертых, $Department -match "Call Center" -or "Retail" всегда будет истинным, потому что $Department -match "Call Center" и "Retail" являются отдельными условными выражениями, а когда строка Retail приводится к логическому значению, поскольку оно не пустое, оно всегда будет истинным.| является регулярным выражением или оператором, в противном случае вам понадобится еще один оператор -match после -or.

Ваш сценарий также можно значительно упростить, используя splatting для определения параметров вHashtable, а затем передавая Hashtable в качестве параметров для вашей команды.

$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 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...