#powershell #if-statement #active-directory
#powershell #if-инструкция #active-directory
Вопрос:
Я не думаю, что я далеко ушел, однако первая инструкция if не работает, сброс выполняется, если имя пользователя правильное, однако я хочу, чтобы скрипт проверил, правильно ли указано имя пользователя AD, прежде чем выполнять сброс. Что мне нужно изменить?
Import-Module ActiveDirectory
$username = Read-host "please enter users AD username"
If ($username -eq $null) {"$username does not exist in AD"}
Else {"User found in AD"}
$myinformation = get-aduser $username -properties *
Set-ADAccountPassword $username -NewPassword $newpwd -Reset -PassThru | Set-ADuser -ChangePasswordAtLogon $False
Read-host "Password reset successfully"
Комментарии:
1. Ваша первая
if
инструкция проверяет только то, было ли вообще введено имя пользователя сRead-Host
. Он не проверяет, существует ли пользователь в Active Directory.2. Как бы мне это изменить
Ответ №1:
Обновите эту строку:
If ($username -eq $null) {"$username does not exist in AD"}
Для:
try {
Get-ADUser $username -ErrorAction Stop
}
Catch {"$username does not exist in AD"}
или:
if (!(Get-ADUser -filter {SamAccountName -eq $username})) {"$username does not exist in AD"}
как прокомментировал ТобьЮ, вы $username
не подтверждаете, существует ли пользователь в AD, в строке замены, которую я предложил, подтвердите это, что означает, что если $username
не существует ( !
сокращение от -not
), выведите «не существует» и т.д.
Комментарии:
1. Это не сработает, потому что в случае, если пользователь не найден, будет выдана ошибка завершения, поэтому ваш блок скрипта не будет выполнен. Это необходимо изменить на
Get-ADUser -filter {SamAccountName -eq $username}
, чтобы эта логика работала, поскольку она вернет,$null
если ничего не найдет.