Сценарий PowerShell для сброса учетной записи AD при проверке, существует она или нет

#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 если ничего не найдет.