Предложение 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