#powershell
Вопрос:
У меня есть скрипт, который в целом работает хорошо, но один из параметров отображается не так, как должен.
Скрипт :
# Create user account in AD. After execution, you will ask to set the password.
New-ADUser `
-Name "John Travolta" `
-GivenName "John" `
-Surname "Travolta" `
-UserPrincipalName "JohnT"`
-DisplayName "John Travolta" `
-AccountPassword (Read-Host -AsSecureString "Input User Password") `
-ChangePasswordAtLogon $True `
-Company "CLASS" `
-Title "Actor" `
-State "ON" `
-City "Kitchener" `
-Description "Bold dude from face off" `
-EmployeeNumber "4" `
-Department "Paramount Cinema" `
-Country "CA" `
-PostalCode "N2B G5T" `
-SamAccountName "JohnT"`
-MobilePhone "519-7218652"`
-Enabled $True
#Add user to the specific OU.
$MOVEOU = Move-ADObject -Identity "CN=John Travolta,CN=Users,DC=class,DC=com" -TargetPath "OU=paramount cinema,DC=class,DC=com"
if ($moveou -eq "error") {
Write-Host "Move ADObject failed" -ForegroundColor DarkRed
}
else {
Write-Host "Move ADObject completed" -ForegroundColor Cyan
}
#Add user to the specific group
$MoveToGroup = Add-ADGroupMember -Identity SG-ParamountCinema -Members JohnT
if ($movetogroup -eq "error") {
Write-Host "Add ADGroupMember Failed" -ForegroundColor DarkRed
}
else {
Write-Host "Add ADGroupMember completed" -ForegroundColor Cyan
}
Результат хороший, но в случае ошибки он не показывает «Не удалось» темно-красным цветом, только успех.
Пожалуйста, помогите, спасибо!
Комментарии:
1. Вы всегда можете добавить
-ErrorAction Stop
параметр и обернуть все в aTry{}Catch{}
. Такие какTry{$MoveToGroup = Add-ADGroupMember -Identity SG-ParamountCinema -Members JohnT -ErrorAction Stop;Write-Host "Add ADGroupMember completed" -ForegroundColor Cyan}Catch{Write-Host "Add ADGroupMember Failed" -ForegroundColor DarkRed}
Ответ №1:
По умолчанию, в случае успеха Add-ADGroupmember
не выводит никаких результатов. Поэтому присвоение «ничего $MoveToGroup
» никогда не будет равнозначно «ошибке». Это, вероятно, то же самое для Move-ADObject
. Независимо от выходных данных, это неправильный способ обработки ошибок. Вам следует взглянуть на about_Try_Catch_Finally, но вот как это может выглядеть:
Try {
$MoveToGroup = Add-ADGroupMember -Identity SG-ParamountCinema -Members JohnT -ErrorAction Stop -passThru
Write-Host "Add ADGroupMember completed" -ForegroundColor Cyan
}
Catch {
Write-Host "Add ADGroupMember Failed" -ForegroundColor DarkRed
}
Обратите внимание на добавление -passThru
. Хотя вам не нужно назначать какие-либо выходные данные переменной для обработки ошибок, я не знаю, нужен ли объект группы в другом месте. Обычно -passThru
командлету предписывается создать объект, с которым он работал. Так что, если переменная $MoveToGrou нужна в другом месте и т. Д…
Как правило, использование обратных ссылок для продолжения строки не одобряется. Вместо этого попробуйте плюхнуться. Это может выглядеть примерно так:
$Params = @{
Name = "John Travolta"
GivenName = "John"
Surname = "Travolta"
UserPrincipalName = "JohnT"
DisplayName = "John Travolta"
AccountPassword = (Read-Host -AsSecureString "Input User Password")
ChangePasswordAtLogon = $True
Company = "CLASS"
Title = "Actor"
State = "ON"
City = "Kitchener"
Description = "Bold dude from face off"
EmployeeNumber = "4"
Department = "Paramount Cinema"
Country = "CA"
PostalCode = "N2B G5T"
SamAccountName = "JohnT"
MobilePhone = "519-7218652"
Enabled = $True
Path = "OU=paramount cinema,DC=class,DC=com"
}
New-ADUser @Params
Кроме того, вам не нужно перемещать пользователя по факту. Просто используйте -Path
параметр в New-ADUser
команде. Создайте его именно там, где вы хотите, чтобы он был.