2015-09-03 2 views
0

Я пытаюсь написать сценарий, который проверяет AD OU для любых учетных записей, которые включены или не установлены требуемый пароль, или пароль никогда не истекает или не установлен скрытых от списка адресов. Затем скрипт отключит любой из них в целях безопасности. Вот сценарий до сих пор:Powershell: Error wieth Set-ADUser

Function Update-ADUser 
{ 
    [CmdletBinding()] 
    param(
     [Parameter(Mandatory=$true)] 
     [string]$user 
    ) 
BEGIN{} 
PROCESS{ 
    Set-ADUser -instance $user -Server dc01 
    } 
END{} 
} 

$lostUsers = Get-ADUser -filter {PasswordNotRequired -eq $true -or PasswordNeverExpires -eq $true -or Enabled -eq $true -or msExchHideFromAddressLists -eq $false } -SearchBase "OU=Lost Users,OU=DEPT,DC=School,DC=edu" -Server dc01 -properties enabled, PasswordNeverExpires, PasswordNotRequired, msExchHideFromAddressLists 
foreach ($user in $lostUsers) 
    { 
     if ($user.PasswordNotRequired -eq $true) 
     { 
      $user.PasswordNotRequired = $false 
     } 

     if ($user.PasswordNeverExpires -eq $true) 
     { 
      $user.PasswordNeverExpires = $false 
     } 
     if ($user.msExchHideFromAddressLists -ne $true ) 
     { 
      $user.msExchHideFromAddressLists = $true 
     } 
     if ($user.Enabled -eq $true) 
     { 
      $user.Enabled = $false 
     } 
     Update-ADUser -user $user 
    } 

Большая часть сценариев работает нормально. $lostUsers создает массив, который использует Get-ADUser для поиска только записей, имеющих один из необходимых атрибутов. Затем мои инструкции foreach/if устанавливают каждый атрибут для того, что должно быть для каждой записи.

Проблема возникает, когда я вызываю функцию Update-ADUser. Я получаю сообщение об ошибке, Set-ADUser : The instance parameter object must be of type: 'Microsoft.ActiveDirectory.Management.ADUser'.

Я попытался удалить [строку] из [string]$user в функции, но это дает мне другую ошибку, Set-ADUser : The server is unwilling to process the request. я использую учетную запись администратора домена, чтобы запустить сценарий, так что я знаю, что это не вызывает эта ошибка.

я мог бы использовать Set-ADUser в каждом if заявлении, вместо того, чтобы вызвать функцию Update-ADUser, но это не кажется эффективным, как сценарий затем сделать до четырех изменений в записи, а не только один с функцией. Я также подумал о том, чтобы просто использовать один оператор для изменения всех четырех атрибутов для всех найденных записей, но это кажется неэффективным, так как некоторые атрибуты уже были правильно установлены и, таким образом, просто будут записаны снова.

Не могу понять, почему команда Set-ADUser не работает. Я в основном скопировал синтаксис из справки Set-ADUser. Может ли кто-нибудь просветить меня по этому поводу?

+0

Обновление: после дальнейших исследований выяснилось, что нулевые атрибуты могут привести к «нежеланию обрабатывать ошибку запроса». Тем не менее, проверка тестового пользователя $, и я не вижу никаких нулей, но все равно получаю ошибку. – David

ответ

0

Незнайка, что я здесь отсутствует, но не заменяя линии (в самом конце вашего Еогеасп)

Update-ADUser -user $user 

с ...

Set-ADUser -instance $user -Server dc01 

... сделать точно что ты хочешь?

+0

Да, я мог бы написать так, но нет, он все еще не работает; Я получаю ту же ошибку. – David

+0

Возможно, вам придется использовать Disable-ADAccount вместо $ user.Enabled = $ false, чтобы сделать это. Различные источники в Интернете, похоже, предполагают, что другие атрибуты задействованы в отключении учетной записи. К сожалению, у меня нет возможности проверить это на данный момент. – notjustme

+0

Обновление: я изменил последнюю строку на Set-ADUser -instance $ user -Server dc01, как и было предложено. Я также изменил инструкции if, чтобы проверить, был ли атрибут «не равным», а не «равным» некоторому значению. Похоже на небольшое изменение, но это имело огромное значение, потому что, хотя некоторые атрибуты могут быть не равны «true», это не значит, что они установлены на «false». Они могут быть нулевыми, и это было проблемой. Кажется, что Set-ADUser не любит устанавливать значение null. Таким образом, мой скрипт затем удостоверился, что любое из значений, которые я менял, фактически имело значение (либо $ true, либо $ false, но не нулевые значения). – David

Смежные вопросы