Как пропустить пустые значения в new-aduser - PullRequest
0 голосов
/ 28 мая 2020

Здравствуйте, я пишу программу, которая будет создавать пользователя из PowerShell gui, и у меня проблема: иногда не все поля имеют значения и они пусты, но когда я пытаюсь создать пользователя с параметром, который имеет пустое значение, я получаю ошибку

new-aduser server is unwilling to process the request

Я могу использовать много блоков if-else для каждого поля, но я думаю, что это не лучшее решение. Пожалуйста, помогите, могу ли я передать создание пользователя с пустыми параметрами.

New-ADUser     -AccountPassword (ConvertTo-SecureString -AsPlainText -Force -String ($Password.Text)) `
               -GivenName $UserName.Text `
               -Company $company.Text `
               -EmployeeID $Tabel.Text `
               -HomePhone $homephone.Text `
               -MobilePhone $mobilephone.Text `
               -Enabled $true `
               -SamAccountName $Login.Text `
               -StreetAddress $street.Text `
               -Surname $Surname.Text `
               -Title $JobPost.Text `
               -UserPrincipalName ($Login.Text + "@domain.com") `
               -OfficePhone $phone.Text `
               -Office $office.Text `
               -Description $SZnumb.Text `
               -City $City.Text `
               -Department $Departament.Text `
               -Division $Division.Text `
               -Name ($Surname.Text + " " + $UserName.Text + " " + $FatherName.Text) `
               -DisplayName ($Surname.Text + " " + $UserName.Text + " " + $FatherName.Text) `
               -Path $OUpicker.Text `
               -PasswordNeverExpires $passneverexpires `
               -ChangePasswordAtLogon $changepassatlogon `
               -CannotChangePassword $cantchangepassword `
               -OtherAttributes @{ 'employeeType' = $LevelRuler.Text; 'extensionAttribute4'=$Sektor.Text}

Обновить

Проблема с параметром -OtherAttributes, если эти два поля пусты, это вызывает ошибку

1 Ответ

1 голос
/ 28 мая 2020

Предложение vonPryz звучит неплохо. У вас может быть что-то вроде переключателя, определяющего, с каким типом учетной записи вы имеете дело, и на основе этого отключите или скройте некоторые поля ввода.

В любом случае, я думаю, вам действительно стоит подумать о переходе на использование Splatting. Это делает код более читаемым и поддерживаемым (больше никаких неприятных обратных кавычек). И вы можете добавлять или опускать свойства в зависимости от определенных условий.

Что-то вроде:

# build a Hashtable object for splatting, at first with properties all account types have in common
# for instance:
$userParams = @{
    AccountPassword       = (ConvertTo-SecureString -AsPlainText -Force -String ($Password.Text))
    GivenName             = $UserName.Text
    Company               = $company.Text
    EmployeeID            = $Tabel.Text
    HomePhone             = $homephone.Text
    MobilePhone           = $mobilephone.Text
    Enabled               = $true
    SamAccountName        = $Login.Text
    StreetAddress         = $street.Text
    Surname               = $Surname.Text
    Title                 = $JobPost.Text
    UserPrincipalName     = ($Login.Text + "@atbmarket.com")
    Description           = $SZnumb.Text
    City                  = $City.Text
    Department            = $Departament.Text
    Division              = $Division.Text
    Name                  = ($Surname.Text + " " + $UserName.Text + " " + $FatherName.Text)
    DisplayName           = ($Surname.Text + " " + $UserName.Text + " " + $FatherName.Text)
    Path                  = $OUpicker.Text
    PasswordNeverExpires  = $passneverexpires
    ChangePasswordAtLogon = $changepassatlogon
    CannotChangePassword  = $cantchangepassword
}

Теперь вы можете добавить определенные дополнительные свойства в зависимости от типа учетной записи. Например:

switch ($LevelRuler.Text) {
    'Manager' { 
        $userParams['OtherAttributes'] = @{'employeeType' = 'Manager'; 'extensionAttribute4'=$Sektor.Text}
    }
    'FloorWalker' {
        $userParams['OtherAttributes'] = @{'employeeType' = 'FloorWalker' }
    }
    # etc.
}

И добавляйте другие общие свойства, только если они не пустые:

if (!([string]::IsNullOrWhiteSpace($phone.Text))) {
    $userParams['OfficePhone'] = $phone.Text.Trim()
}
if (!([string]::IsNullOrWhiteSpace($office.Text))) {
    $userParams['Office'] = $office.Text.Trim()
}
# etc.

Наконец, создайте нового пользователя:

New-ADUser @userParams

PS1 это опечатка? $Departament.Text

PS2 Вместо того, чтобы делать ($Surname.Text + " " + $UserName.Text + " " + $FatherName.Text) дважды, я бы сначала создал переменную $ name, например $name = ('{0} {1} {2}' -f $Surname.Text, $UserName.Text, $FatherName.Text).Trim() -replace '\s+', ' ', и использовал бы ее для свойств Name и DisplayName

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...